From a0cb7b0a1433e19c9913d10e0001cadb5ad636a3 Mon Sep 17 00:00:00 2001 From: Brandon Yates Date: Wed, 15 May 2024 16:47:16 +0000 Subject: [PATCH] fix(debugger): Add page fault address to L0 PF event Related-to: GSD-9110 Signed-off-by: Brandon Yates --- level_zero/tools/source/debug/linux/prelim/debug_session.cpp | 1 + .../sources/debug/linux/prelim/debug_session_fixtures_linux.h | 2 ++ .../sources/debug/linux/prelim/test_debug_api_linux.cpp | 1 + 3 files changed, 4 insertions(+) diff --git a/level_zero/tools/source/debug/linux/prelim/debug_session.cpp b/level_zero/tools/source/debug/linux/prelim/debug_session.cpp index be33f14ecf..26f73f46bd 100644 --- a/level_zero/tools/source/debug/linux/prelim/debug_session.cpp +++ b/level_zero/tools/source/debug/linux/prelim/debug_session.cpp @@ -1026,6 +1026,7 @@ void DebugSessionLinuxi915::handlePageFaultEvent(prelim_drm_i915_debug_event_pag if (threadsWithPF.size() == 0) { zet_debug_event_t debugEvent = {}; debugEvent.type = ZET_DEBUG_EVENT_TYPE_PAGE_FAULT; + debugEvent.info.page_fault.address = pf->page_fault_address; PRINT_DEBUGGER_INFO_LOG("PageFault event for unknown thread", 0); enqueueApiEvent(debugEvent); } diff --git a/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/debug_session_fixtures_linux.h b/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/debug_session_fixtures_linux.h index 5dc8d1cf8b..b294bb16ce 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/debug_session_fixtures_linux.h +++ b/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/debug_session_fixtures_linux.h @@ -549,6 +549,7 @@ struct DebugApiPageFaultEventFixture : public DebugApiLinuxPrelimFixture { pf.ci.engine_class = 0; pf.ci.engine_instance = 0; pf.bitmask_size = static_cast(bitmaskSize * 3); + pf.page_fault_address = pfAddress; memcpy(data, &pf, sizeof(prelim_drm_i915_debug_event_page_fault)); memcpy(ptrOffset(data, offsetof(prelim_drm_i915_debug_event_page_fault, bitmask)), bitmaskBefore.get(), bitmaskSize); @@ -563,6 +564,7 @@ struct DebugApiPageFaultEventFixture : public DebugApiLinuxPrelimFixture { uint64_t ctxHandle = 2; uint64_t vmHandle = 7; uint64_t lrcHandle = 8; + uint64_t pfAddress = 0x12345; }; struct DebugApiLinuxMultiDeviceFixture : public MultipleDevicesWithCustomHwInfo { diff --git a/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/test_debug_api_linux.cpp b/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/test_debug_api_linux.cpp index 430c5dacff..9317eb1b9f 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/test_debug_api_linux.cpp +++ b/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/test_debug_api_linux.cpp @@ -5896,6 +5896,7 @@ TEST_F(DebugApiLinuxPageFaultEventTest, GivenNoPageFaultingThreadWhenHandlingPag ASSERT_EQ(1u, sessionMock->apiEvents.size()); auto event = sessionMock->apiEvents.front(); ASSERT_EQ(event.type, ZET_DEBUG_EVENT_TYPE_PAGE_FAULT); + ASSERT_EQ(event.info.page_fault.address, pfAddress); } TEST_F(DebugApiLinuxPageFaultEventTest, GivenPageFaultEventWIthInvalidClientHandleThenNoThreadsReportedStopped) {