diff --git a/level_zero/core/source/event/event_impl.inl b/level_zero/core/source/event/event_impl.inl index 02dc92761f..3089706bca 100644 --- a/level_zero/core/source/event/event_impl.inl +++ b/level_zero/core/source/event/event_impl.inl @@ -742,7 +742,8 @@ void EventImp::synchronizeCounterBasedTimestampCompletionWithTimeout() calculateProfilingData(); timeDiff = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - startTime).count(); - } while (contextEndTS == Event::STATE_CLEARED && (timeDiff < timeoutMs)); + } while ((contextEndTS == Event::STATE_CLEARED || contextEndTS == 0) && (timeDiff < timeoutMs)); + DEBUG_BREAK_IF(contextEndTS == Event::STATE_CLEARED || contextEndTS == 0); } template @@ -756,7 +757,7 @@ ze_result_t EventImp::queryKernelTimestamp(ze_kernel_timestamp_result_ assignKernelEventCompletionData(getHostAddress()); calculateProfilingData(); - if (isCounterBased() && contextEndTS == Event::STATE_CLEARED) { + if (isCounterBased() && (contextEndTS == Event::STATE_CLEARED || contextEndTS == 0)) { synchronizeCounterBasedTimestampCompletionWithTimeout(); } diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp index c91a0b4db2..65bdaa309e 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp @@ -455,12 +455,13 @@ HWTEST2_F(InOrderCmdListTests, givenCounterBasedTimestampEventWhenQueryingTimest uint32_t assignKernelEventCompletionDataCalled = 0; uint32_t assignKernelEventCompletionDataFailCounter = 0; + uint64_t notReadyData = Event::STATE_CLEARED; void assignKernelEventCompletionData(void *address) override { auto completionAddress = reinterpret_cast(getCompletionFieldHostAddress()); assignKernelEventCompletionDataCalled++; if (assignKernelEventCompletionDataCalled <= assignKernelEventCompletionDataFailCounter) { - *completionAddress = Event::STATE_CLEARED; + *completionAddress = notReadyData; } else { *completionAddress = 0x123; } @@ -472,24 +473,38 @@ HWTEST2_F(InOrderCmdListTests, givenCounterBasedTimestampEventWhenQueryingTimest auto cmdList = createImmCmdList(); auto eventPool = createEvents(1, true); - auto event = std::make_unique(eventPool.get(), device); - event->enableCounterBasedMode(true, ZE_EVENT_POOL_COUNTER_BASED_EXP_FLAG_IMMEDIATE); - event->assignKernelEventCompletionDataFailCounter = 2; - event->setUsingContextEndOffset(true); + auto event1 = std::make_unique(eventPool.get(), device); + auto event2 = std::make_unique(eventPool.get(), device); - cmdList->appendLaunchKernel(kernel->toHandle(), groupCount, event->toHandle(), 0, nullptr, launchParams, false); + event1->enableCounterBasedMode(true, ZE_EVENT_POOL_COUNTER_BASED_EXP_FLAG_IMMEDIATE); + event1->assignKernelEventCompletionDataFailCounter = 2; + event1->setUsingContextEndOffset(true); - *reinterpret_cast(event->getCompletionFieldHostAddress()) = Event::STATE_CLEARED; - event->getInOrderExecInfo()->setLastWaitedCounterValue(2); + event2->enableCounterBasedMode(true, ZE_EVENT_POOL_COUNTER_BASED_EXP_FLAG_IMMEDIATE); + event2->assignKernelEventCompletionDataFailCounter = 2; + event2->setUsingContextEndOffset(true); + event2->notReadyData = 0; - EXPECT_EQ(ZE_RESULT_SUCCESS, event->queryStatus()); + cmdList->appendLaunchKernel(kernel->toHandle(), groupCount, event1->toHandle(), 0, nullptr, launchParams, false); + cmdList->appendLaunchKernel(kernel->toHandle(), groupCount, event2->toHandle(), 0, nullptr, launchParams, false); + + *reinterpret_cast(event1->getCompletionFieldHostAddress()) = Event::STATE_CLEARED; + *reinterpret_cast(event2->getCompletionFieldHostAddress()) = 0; + event1->getInOrderExecInfo()->setLastWaitedCounterValue(2); + event2->getInOrderExecInfo()->setLastWaitedCounterValue(2); + + EXPECT_EQ(ZE_RESULT_SUCCESS, event1->queryStatus()); + EXPECT_EQ(ZE_RESULT_SUCCESS, event2->queryStatus()); ze_kernel_timestamp_result_t kernelTimestamps = {}; - EXPECT_EQ(0u, event->assignKernelEventCompletionDataCalled); - event->queryKernelTimestamp(&kernelTimestamps); + EXPECT_EQ(0u, event1->assignKernelEventCompletionDataCalled); + EXPECT_EQ(0u, event2->assignKernelEventCompletionDataCalled); + event1->queryKernelTimestamp(&kernelTimestamps); + event2->queryKernelTimestamp(&kernelTimestamps); - EXPECT_EQ(event->assignKernelEventCompletionDataFailCounter + 1, event->assignKernelEventCompletionDataCalled); + EXPECT_EQ(event1->assignKernelEventCompletionDataFailCounter + 1, event1->assignKernelEventCompletionDataCalled); + EXPECT_EQ(event2->assignKernelEventCompletionDataFailCounter + 1, event2->assignKernelEventCompletionDataCalled); } HWTEST2_F(InOrderCmdListTests, givenInterruptableEventsWhenExecutingOnDifferentCsrThenAssignItToEventOnExecute, IsAtLeastXeHpCore) {