diff --git a/level_zero/sysman/source/shared/linux/sysman_kmd_interface_i915_prelim.cpp b/level_zero/sysman/source/shared/linux/sysman_kmd_interface_i915_prelim.cpp index 9ed3f4f413..05e9558884 100644 --- a/level_zero/sysman/source/shared/linux/sysman_kmd_interface_i915_prelim.cpp +++ b/level_zero/sysman/source/shared/linux/sysman_kmd_interface_i915_prelim.cpp @@ -96,7 +96,8 @@ std::optional SysmanKmdInterfaceI915Prelim::getEngineClassString(ui } uint32_t SysmanKmdInterfaceI915Prelim::getEventType(const bool isIntegratedDevice) { - return 0; + std::string i915DirName = "i915"; + return getEventTypeImpl(i915DirName, isIntegratedDevice); } void SysmanKmdInterfaceI915Prelim::getWedgedStatus(LinuxSysmanImp *pLinuxSysmanImp, zes_device_state_t *pState) { diff --git a/level_zero/sysman/test/unit_tests/sources/shared/linux/sysman_kmd_interface_tests_i915_prelim.cpp b/level_zero/sysman/test/unit_tests/sources/shared/linux/sysman_kmd_interface_tests_i915_prelim.cpp index db38716e28..fe8bf3dc64 100644 --- a/level_zero/sysman/test/unit_tests/sources/shared/linux/sysman_kmd_interface_tests_i915_prelim.cpp +++ b/level_zero/sysman/test/unit_tests/sources/shared/linux/sysman_kmd_interface_tests_i915_prelim.cpp @@ -25,6 +25,32 @@ namespace ult { using namespace NEO; +static const uint32_t mockReadVal = 23; + +static int mockReadLinkSuccess(const char *path, char *buf, size_t bufsize) { + constexpr size_t sizeofPath = sizeof("/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0"); + strcpy_s(buf, sizeofPath, "/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0"); + return sizeofPath; +} + +static int mockReadLinkFailure(const char *path, char *buf, size_t bufsize) { + errno = ENOENT; + return -1; +} + +static ssize_t mockReadSuccess(int fd, void *buf, size_t count, off_t offset) { + std::ostringstream oStream; + oStream << mockReadVal; + std::string value = oStream.str(); + memcpy(buf, value.data(), count); + return count; +} + +static ssize_t mockReadFailure(int fd, void *buf, size_t count, off_t offset) { + errno = ENOENT; + return -1; +} + class SysmanFixtureDeviceI915Prelim : public SysmanDeviceFixture { protected: L0::Sysman::SysmanDevice *device = nullptr; @@ -33,6 +59,12 @@ class SysmanFixtureDeviceI915Prelim : public SysmanDeviceFixture { SysmanDeviceFixture::SetUp(); device = pSysmanDevice; pLinuxSysmanImp->pSysmanKmdInterface.reset(new SysmanKmdInterfaceI915Prelim(pLinuxSysmanImp->getProductFamily())); + mockInitFsAccess(); + } + + void mockInitFsAccess() { + VariableBackup mockReadLink(&NEO::SysCalls::sysCallsReadlink, &mockReadLinkSuccess); + pLinuxSysmanImp->pSysmanKmdInterface->initFsAccessInterface(*pLinuxSysmanImp->getDrm()); } void TearDown() override { @@ -109,9 +141,41 @@ TEST_F(SysmanFixtureDeviceI915Prelim, GivenSysmanKmdInterfaceInstanceWhenCheckin EXPECT_TRUE(pSysmanKmdInterface->isStandbyModeControlAvailable()); } -TEST_F(SysmanFixtureDeviceI915Prelim, GivenSysmanKmdInterfaceInstanceWhenCallingGetEventTypeThenInvalidValueIsReturned) { - auto pSysmanKmdInterface = pLinuxSysmanImp->getSysmanKmdInterface(); - EXPECT_EQ(0u, pSysmanKmdInterface->getEventType(true)); +TEST_F(SysmanFixtureDeviceI915Prelim, GivenSysmanKmdInterfaceInstanceAndIsIntegratedDeviceWhenGetEventsIsCalledThenValidEventTypeIsReturned) { + + VariableBackup mockPread(&NEO::SysCalls::sysCallsPread, &mockReadSuccess); + + auto pSysmanKmdInterface = pLinuxSysmanImp->pSysmanKmdInterface.get(); + bool isIntegratedDevice = true; + EXPECT_EQ(mockReadVal, pSysmanKmdInterface->getEventType(isIntegratedDevice)); +} + +TEST_F(SysmanFixtureDeviceI915Prelim, GivenSysmanKmdInterfaceInstanceAndIsNotIntegratedDeviceWhenGetEventsIsCalledThenValidEventTypeIsReturned) { + + VariableBackup mockReadLink(&NEO::SysCalls::sysCallsReadlink, &mockReadLinkSuccess); + VariableBackup mockPread(&NEO::SysCalls::sysCallsPread, &mockReadSuccess); + + auto pSysmanKmdInterface = pLinuxSysmanImp->pSysmanKmdInterface.get(); + bool isIntegratedDevice = false; + EXPECT_EQ(mockReadVal, pSysmanKmdInterface->getEventType(isIntegratedDevice)); +} + +TEST_F(SysmanFixtureDeviceI915Prelim, GivenSysmanKmdInterfaceInstanceAndIsNotIntegratedDeviceAndReadSymLinkFailsWhenGetEventsIsCalledThenFailureIsReturned) { + + VariableBackup mockReadLink(&NEO::SysCalls::sysCallsReadlink, &mockReadLinkFailure); + + auto pSysmanKmdInterface = pLinuxSysmanImp->pSysmanKmdInterface.get(); + bool isIntegratedDevice = false; + EXPECT_EQ(0u, pSysmanKmdInterface->getEventType(isIntegratedDevice)); +} + +TEST_F(SysmanFixtureDeviceI915Prelim, GivenSysmanKmdInterfaceInstanceAndIsNotIntegratedDeviceAndFsReadFailsWhenGetEventsIsCalledThenFailureIsReturned) { + + VariableBackup mockPread(&NEO::SysCalls::sysCallsPread, &mockReadFailure); + + auto pSysmanKmdInterface = pLinuxSysmanImp->pSysmanKmdInterface.get(); + bool isIntegratedDevice = false; + EXPECT_EQ(0u, pSysmanKmdInterface->getEventType(isIntegratedDevice)); } TEST_F(SysmanFixtureDeviceI915Prelim, GivenSysmanKmdInterfaceInstanceWhenCheckingAvailabilityOfFrequencyFilesThenTrueValueIsReturned) {