mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-21 09:14:47 +08:00
fix: Eudebug: read one event for each poll in internal event thread
Related-To: NEO-11188 Signed-off-by: Jitendra Sharma <jitendra.sharma@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
74f8eedf1e
commit
06935f87d7
@@ -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<drm_xe_eudebug_event *>(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<drm_xe_eudebug_event *>(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<std::mutex> lock(internalEventThreadMutex);
|
||||
|
||||
if (result == ZE_RESULT_SUCCESS) {
|
||||
std::lock_guard<std::mutex> lock(internalEventThreadMutex);
|
||||
auto memory = std::make_unique<uint64_t[]>(maxEventSize / sizeof(uint64_t));
|
||||
memcpy(memory.get(), event, maxEventSize);
|
||||
|
||||
auto memory = std::make_unique<uint64_t[]>(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<char *>(&client), static_cast<uint64_t>(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<decltype(drm_xe_eudebug_event::type)>(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<decltype(drm_xe_eudebug_event::type)>(DRM_XE_EUDEBUG_EVENT_READ), handler->debugEventInput.type);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user