Add support for sysman event ZES_EVENT_TYPE_FLAG_MEM_HEALTH

Signed-off-by: Jitendra Sharma <jitendra.sharma@intel.com>
This commit is contained in:
Jitendra Sharma
2020-11-19 09:53:32 +05:30
committed by Compute-Runtime-Automation
parent 765b6cc2ed
commit 514b191bb6
6 changed files with 55 additions and 8 deletions

View File

@@ -6,8 +6,8 @@
set(L0_SRCS_TOOLS_SYSMAN_EVENTS_LINUX
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${CMAKE_CURRENT_SOURCE_DIR}/os_events_imp.cpp
${CMAKE_CURRENT_SOURCE_DIR}/os_events_imp.h
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/os_events_imp.cpp
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/os_events_imp.h
)
if(UNIX)

View File

@@ -64,6 +64,14 @@ bool LinuxEventsImp::checkDeviceAttachEvent(zes_event_type_flags_t &pEvent) {
return false;
}
bool LinuxEventsImp::checkIfMemHealthChanged(zes_event_type_flags_t &pEvent) {
if (currentMemHealth() != memHealthAtEventRegister) {
pEvent = ZES_EVENT_TYPE_FLAG_MEM_HEALTH;
return true;
}
return false;
}
bool LinuxEventsImp::eventListen(zes_event_type_flags_t &pEvent, uint32_t timeout) {
if (registeredEvents & ZES_EVENT_TYPE_FLAG_DEVICE_RESET_REQUIRED) {
if (isResetRequired(pEvent)) {
@@ -80,15 +88,27 @@ bool LinuxEventsImp::eventListen(zes_event_type_flags_t &pEvent, uint32_t timeou
return true;
}
}
if (registeredEvents & ZES_EVENT_TYPE_FLAG_MEM_HEALTH) {
if (checkIfMemHealthChanged(pEvent)) {
return true;
}
}
return false;
}
ze_result_t LinuxEventsImp::eventRegister(zes_event_type_flags_t events) {
registeredEvents = events;
if (registeredEvents & ZES_EVENT_TYPE_FLAG_MEM_HEALTH) {
memHealthAtEventRegister = currentMemHealth();
}
return ZE_RESULT_SUCCESS;
}
void LinuxEventsImp::init() {
zes_mem_health_t LinuxEventsImp::currentMemHealth() {
return ZES_MEM_HEALTH_UNKNOWN;
}
void LinuxEventsImp::getPciIdPathTag() {
std::string bdfDir;
ze_result_t result = pSysfsAccess->readSymLink("device", bdfDir);
if (ZE_RESULT_SUCCESS != result) {
@@ -108,7 +128,7 @@ LinuxEventsImp::LinuxEventsImp(OsSysman *pOsSysman) {
pLinuxSysmanImp = static_cast<LinuxSysmanImp *>(pOsSysman);
pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess();
pFsAccess = &pLinuxSysmanImp->getFsAccess();
init();
getPciIdPathTag();
}
OsEvents *OsEvents::create(OsSysman *pOsSysman) {

View File

@@ -21,11 +21,14 @@ class LinuxEventsImp : public OsEvents, NEO::NonCopyableOrMovableClass {
protected:
LinuxSysmanImp *pLinuxSysmanImp = nullptr;
void init();
void getPciIdPathTag();
zes_mem_health_t currentMemHealth();
bool isResetRequired(zes_event_type_flags_t &pEvent);
bool checkDeviceDetachEvent(zes_event_type_flags_t &pEvent);
bool checkDeviceAttachEvent(zes_event_type_flags_t &pEvent);
bool checkIfMemHealthChanged(zes_event_type_flags_t &pEvent);
std::string pciIdPathTag;
zes_mem_health_t memHealthAtEventRegister = ZES_MEM_HEALTH_UNKNOWN;
private:
FsAccess *pFsAccess = nullptr;

View File

@@ -8,7 +8,7 @@ if(UNIX)
target_sources(${TARGET_NAME}
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${CMAKE_CURRENT_SOURCE_DIR}/test_zes_events.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mock_events.h
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/test_zes_events.cpp
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/mock_events.h
)
endif()

View File

@@ -83,7 +83,8 @@ struct Mock<EventsSysfsAccess> : public EventsSysfsAccess {
class PublicLinuxEventsImp : public L0::LinuxEventsImp {
public:
PublicLinuxEventsImp(OsSysman *pOsSysman) : LinuxEventsImp(pOsSysman) {}
using LinuxEventsImp::init;
using LinuxEventsImp::getPciIdPathTag;
using LinuxEventsImp::memHealthAtEventRegister;
using LinuxEventsImp::pciIdPathTag;
};

View File

@@ -188,5 +188,28 @@ TEST_F(SysmanEventsFixture, GivenValidDeviceHandleWhenListeningForDeviceAttachEv
delete[] pDeviceEvents;
}
TEST_F(SysmanEventsFixture, GivenValidDeviceHandleWhenListeningForMemHealthEventsThenEventListenAPIReturnsAfterReceivingEventWithinTimeout) {
PublicLinuxEventsImp *pLinuxEventsImp = new PublicLinuxEventsImp(pOsSysman);
pLinuxEventsImp->eventRegister(ZES_EVENT_TYPE_FLAG_MEM_HEALTH);
pLinuxEventsImp->memHealthAtEventRegister = ZES_MEM_HEALTH_OK;
zes_event_type_flags_t events;
uint32_t timeout = 100u;
EXPECT_TRUE(pLinuxEventsImp->eventListen(events, timeout));
EXPECT_EQ(events, ZES_EVENT_TYPE_FLAG_MEM_HEALTH);
delete pLinuxEventsImp;
}
TEST_F(SysmanEventsFixture, GivenValidDeviceHandleWhenListeningForMemHealthEventsAndMemHealthDidntOccurThenEventListenAPIReturnsWithinTimeout) {
EXPECT_EQ(ZE_RESULT_SUCCESS, zesDeviceEventRegister(device->toHandle(), ZES_EVENT_TYPE_FLAG_MEM_HEALTH));
zes_device_handle_t *phDevices = new zes_device_handle_t[1];
phDevices[0] = device->toHandle();
uint32_t numDeviceEvents = 0;
zes_event_type_flags_t *pDeviceEvents = new zes_event_type_flags_t[1];
EXPECT_EQ(ZE_RESULT_SUCCESS, zesDriverEventListen(driverHandle->toHandle(), 100u, 1u, phDevices, &numDeviceEvents, pDeviceEvents));
EXPECT_EQ(0u, numDeviceEvents);
delete[] phDevices;
delete[] pDeviceEvents;
}
} // namespace ult
} // namespace L0