diff --git a/level_zero/tools/source/debug/linux/xe/debug_session.cpp b/level_zero/tools/source/debug/linux/xe/debug_session.cpp index c4f9ac6f70..40a32d4616 100644 --- a/level_zero/tools/source/debug/linux/xe/debug_session.cpp +++ b/level_zero/tools/source/debug/linux/xe/debug_session.cpp @@ -139,28 +139,23 @@ void DebugSessionLinuxXe::readInternalEventsAsync() { ze_result_t result = ZE_RESULT_SUCCESS; - int maxLoopCount = 3; - do { + uint8_t maxEventBuffer[sizeof(drm_xe_eudebug_event) + maxEventSize]; + auto event = reinterpret_cast(maxEventBuffer); + event->len = maxEventSize; + event->type = DRM_XE_EUDEBUG_EVENT_READ; + event->flags = 0; - uint8_t maxEventBuffer[sizeof(drm_xe_eudebug_event) + maxEventSize]; - auto event = reinterpret_cast(maxEventBuffer); - event->len = maxEventSize; - event->type = DRM_XE_EUDEBUG_EVENT_READ; - event->flags = 0; + result = readEventImp(event); - result = readEventImp(event); - maxLoopCount--; + if (result == ZE_RESULT_SUCCESS) { + std::lock_guard lock(internalEventThreadMutex); - if (result == ZE_RESULT_SUCCESS) { - std::lock_guard lock(internalEventThreadMutex); + auto memory = std::make_unique(maxEventSize / sizeof(uint64_t)); + memcpy(memory.get(), event, maxEventSize); - auto memory = std::make_unique(maxEventSize / sizeof(uint64_t)); - memcpy(memory.get(), event, maxEventSize); - - internalEventQueue.push(std::move(memory)); - internalEventCondition.notify_one(); - } - } while (result == ZE_RESULT_SUCCESS && maxLoopCount > 0); + internalEventQueue.push(std::move(memory)); + internalEventCondition.notify_one(); + } } } diff --git a/level_zero/tools/test/unit_tests/sources/debug/linux/xe/test_debug_api_linux_xe.cpp b/level_zero/tools/test/unit_tests/sources/debug/linux/xe/test_debug_api_linux_xe.cpp index 7db72ccf8a..93f0b7e144 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/linux/xe/test_debug_api_linux_xe.cpp +++ b/level_zero/tools/test/unit_tests/sources/debug/linux/xe/test_debug_api_linux_xe.cpp @@ -363,7 +363,6 @@ TEST_F(DebugApiLinuxTestXe, GivenPollReturnsNonZeroWhenReadingInternalEventsAsyn handler->pollRetVal = 1; session->ioctlHandler.reset(handler); session->clientHandle = MockDebugSessionLinuxXe::mockClientHandle; - // session->synchronousInternalEventRead = true; uint64_t clientHandle = 2; drm_xe_eudebug_event_client client = {}; @@ -375,16 +374,14 @@ TEST_F(DebugApiLinuxTestXe, GivenPollReturnsNonZeroWhenReadingInternalEventsAsyn handler->eventQueue.push({reinterpret_cast(&client), static_cast(client.base.len)}); session->readInternalEventsAsync(); - - constexpr int clientEventCount = 1; constexpr int dummyReadEventCount = 1; - EXPECT_EQ(clientEventCount + dummyReadEventCount, handler->ioctlCalled); + EXPECT_EQ(dummyReadEventCount, handler->ioctlCalled); EXPECT_EQ(DebugSessionLinuxXe::maxEventSize, handler->debugEventInput.len); EXPECT_EQ(static_cast(DRM_XE_EUDEBUG_EVENT_READ), handler->debugEventInput.type); } -TEST_F(DebugApiLinuxTestXe, GivenMoreThan3EventsInQueueThenInternalEventsOnlyReads3) { +TEST_F(DebugApiLinuxTestXe, GivenMoreThan1EventsInQueueThenInternalEventsOnlyReads1) { zet_debug_config_t config = {}; config.pid = 0x1234; @@ -411,7 +408,7 @@ TEST_F(DebugApiLinuxTestXe, GivenMoreThan3EventsInQueueThenInternalEventsOnlyRea session->readInternalEventsAsync(); - EXPECT_EQ(3, handler->ioctlCalled); + EXPECT_EQ(1, handler->ioctlCalled); EXPECT_EQ(DebugSessionLinuxXe::maxEventSize, handler->debugEventInput.len); EXPECT_EQ(static_cast(DRM_XE_EUDEBUG_EVENT_READ), handler->debugEventInput.type); }