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 5cda5e1dc6..5d38a438a6 100644 --- a/level_zero/tools/source/debug/linux/prelim/debug_session.cpp +++ b/level_zero/tools/source/debug/linux/prelim/debug_session.cpp @@ -816,7 +816,7 @@ bool DebugSessionLinux::handleVmBindEvent(prelim_drm_i915_debug_event_vm_bind *v } if (connection->vmToTile.find(vmHandle) == connection->vmToTile.end()) { - DEBUG_BREAK_IF(connection->vmToTile.find(vmHandle) == connection->vmToTile.end() && + DEBUG_BREAK_IF(connection->vmToTile.find(vmHandle) == connection->vmToTile.end() && (vmBind->base.flags & PRELIM_DRM_I915_DEBUG_EVENT_NEED_ACK) && (connection->uuidMap[uuid].classIndex == NEO::DrmResourceClass::Isa || connection->uuidMap[uuid].classIndex == NEO::DrmResourceClass::ModuleHeapDebugArea)); return false; } @@ -1094,18 +1094,17 @@ bool DebugSessionLinux::handleVmBindEvent(prelim_drm_i915_debug_event_vm_bind *v } } } - - if (shouldAckEvent && (vmBind->base.flags & PRELIM_DRM_I915_DEBUG_EVENT_NEED_ACK)) { - prelim_drm_i915_debug_event_ack eventToAck = {}; - eventToAck.type = vmBind->base.type; - eventToAck.seqno = vmBind->base.seqno; - eventToAck.flags = 0; - auto ret = ioctl(PRELIM_I915_DEBUG_IOCTL_ACK_EVENT, &eventToAck); - PRINT_DEBUGGER_INFO_LOG("PRELIM_I915_DEBUG_IOCTL_ACK_EVENT seqno = %llu ret = %d errno = %d\n", (uint64_t)eventToAck.seqno, ret, ret != 0 ? errno : 0); - } - return true; } - return false; + + if (shouldAckEvent && (vmBind->base.flags & PRELIM_DRM_I915_DEBUG_EVENT_NEED_ACK)) { + prelim_drm_i915_debug_event_ack eventToAck = {}; + eventToAck.type = vmBind->base.type; + eventToAck.seqno = vmBind->base.seqno; + eventToAck.flags = 0; + auto ret = ioctl(PRELIM_I915_DEBUG_IOCTL_ACK_EVENT, &eventToAck); + PRINT_DEBUGGER_INFO_LOG("PRELIM_I915_DEBUG_IOCTL_ACK_EVENT seqno = %llu ret = %d errno = %d\n", (uint64_t)eventToAck.seqno, ret, ret != 0 ? errno : 0); + } + return true; } void DebugSessionLinux::handleContextParamEvent(prelim_drm_i915_debug_event_context_param *contextParam) { diff --git a/level_zero/tools/test/unit_tests/sources/debug/linux/test_debug_api_linux.cpp b/level_zero/tools/test/unit_tests/sources/debug/linux/test_debug_api_linux.cpp index d97edd5d64..833419da8f 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/linux/test_debug_api_linux.cpp +++ b/level_zero/tools/test/unit_tests/sources/debug/linux/test_debug_api_linux.cpp @@ -3711,6 +3711,26 @@ TEST_F(DebugApiLinuxVmBindTest, GivenUnknownVmAndEventWithAckFlagForIsaWhenHandl EXPECT_EQ(1u, handler->ackCount); } +TEST_F(DebugApiLinuxVmBindTest, GivenUnknownVmAndEventWithoutUuidsWhenHandlingVmBindEventThenEventIsNotPushedToPendingEvents) { + uint64_t vmBindIsaData[(sizeof(prelim_drm_i915_debug_event_vm_bind) + sizeof(uint64_t)) / sizeof(uint64_t)]; + prelim_drm_i915_debug_event_vm_bind *vmBindIsa = reinterpret_cast(&vmBindIsaData); + + vmBindIsa->base.type = PRELIM_DRM_I915_DEBUG_EVENT_VM_BIND; + vmBindIsa->base.flags = PRELIM_DRM_I915_DEBUG_EVENT_CREATE; + vmBindIsa->base.size = sizeof(prelim_drm_i915_debug_event_vm_bind); + vmBindIsa->base.seqno = 20u; + vmBindIsa->client_handle = MockDebugSessionLinux::mockClientHandle; + vmBindIsa->va_start = 0x1000; + vmBindIsa->va_length = 0x1000; + vmBindIsa->vm_handle = 5678; + vmBindIsa->num_uuids = 0; + + session->handleEvent(&vmBindIsa->base); + + EXPECT_EQ(0u, session->pendingVmBindEvents.size()); + EXPECT_EQ(0u, session->processPendingVmBindEventsCalled); +} + TEST_F(DebugApiLinuxVmBindTest, GivenEventForISAWhenModuleLoadEventAlreadyAckedThenEventIsAckedImmediatelyAndNotPushed) { uint64_t isaGpuVa = 0x345000; uint64_t isaSize = 0x2000;