mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-27 07:44:16 +08:00
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:
committed by
Compute-Runtime-Automation
parent
765b6cc2ed
commit
514b191bb6
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user