feature: capture multiple cpu pagefault handler

Recorded multiple page fault handlers by using vector in
cpu_page_fault_manager_linux.

Added a static handlerIndex in order to track the depth of
handler logic to call appropriate previous handlers.

Related-To: NEO-11563
Signed-off-by: Young Jin Yoon <young.jin.yoon@intel.com>
This commit is contained in:
Young Jin Yoon
2024-09-02 16:46:37 +00:00
committed by Compute-Runtime-Automation
parent 8e5e3d1e6c
commit 4b3a6e9cfe
11 changed files with 317 additions and 35 deletions

View File

@@ -23,11 +23,11 @@ class MockPageFaultManager : public PageFaultManager {
using PageFaultManager::selectGpuDomainHandler;
using PageFaultManager::transferAndUnprotectMemory;
using PageFaultManager::unprotectAndTransferMemory;
using PageFaultManager::verifyPageFault;
using PageFaultManager::verifyAndHandlePageFault;
bool checkFaultHandlerFromPageFaultManager() override {
checkFaultHandlerCalled++;
return (registerFaultHandlerCalled != 0);
return isFaultHandlerFromPageFaultManager;
}
void registerFaultHandler() override {
registerFaultHandlerCalled++;
@@ -115,6 +115,7 @@ class MockPageFaultManager : public PageFaultManager {
size_t protectedSize = 0;
bool isAubWritable = true;
bool isCpuAllocEvictable = true;
bool isFaultHandlerFromPageFaultManager = false;
aub_stream::EngineType engineType = aub_stream::EngineType::NUM_ENGINES;
EngineUsage engineUsage = EngineUsage::engineUsageCount;
};
@@ -130,8 +131,8 @@ class MockPageFaultManagerHandlerInvoke : public T {
using T::registerFaultHandler;
using T::T;
bool verifyPageFault(void *ptr) override {
handlerInvoked = true;
bool verifyAndHandlePageFault(void *ptr, bool handlePageFault) override {
handlerInvoked = handlePageFault;
if (allowCPUMemoryAccessOnPageFault) {
this->allowCPUMemoryAccess(ptr, size);
}