diff --git a/level_zero/core/source/cmdqueue/cmdqueue.cpp b/level_zero/core/source/cmdqueue/cmdqueue.cpp index a3aac04593..8a2ef7b8a0 100644 --- a/level_zero/core/source/cmdqueue/cmdqueue.cpp +++ b/level_zero/core/source/cmdqueue/cmdqueue.cpp @@ -100,6 +100,10 @@ ze_result_t CommandQueueImp::synchronizeByPollingForTaskCount(uint64_t timeout) auto taskCountToWait = getTaskCount(); bool enableTimeout = true; int64_t timeoutMicroseconds = static_cast(timeout); + if (timeout == std::numeric_limits::max()) { + enableTimeout = false; + timeoutMicroseconds = NEO::TimeoutControls::maxTimeout; + } csr->waitForCompletionWithTimeout(enableTimeout, timeoutMicroseconds, this->taskCount); diff --git a/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue.cpp b/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue.cpp index 38a5586f0a..e40aa69bf0 100644 --- a/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue.cpp @@ -1435,6 +1435,7 @@ struct SynchronizeCsr : public NEO::UltCommandStreamReceiver { } bool waitForCompletionWithTimeout(bool enableTimeout, int64_t timeoutMs, uint32_t taskCountToWait) override { + enableTimeoutSet = enableTimeout; waitForComplitionCalledTimes++; return true; } @@ -1451,6 +1452,7 @@ struct SynchronizeCsr : public NEO::UltCommandStreamReceiver { uint32_t *tagAddress; uint32_t waitForComplitionCalledTimes = 0; uint32_t waitForTaskCountWithKmdNotifyFallbackCalled = 0; + bool enableTimeoutSet = false; }; HWTEST_F(CommandQueueSynchronizeTest, givenCallToSynchronizeThenCorrectEnableTimeoutAndTimeoutValuesAreUsed) { @@ -1467,22 +1469,22 @@ HWTEST_F(CommandQueueSynchronizeTest, givenCallToSynchronizeThenCorrectEnableTim queue->csr = csr.get(); uint64_t timeout = 10; - bool enableTimeoutExpected = true; int64_t timeoutMicrosecondsExpected = timeout; queue->synchronize(timeout); EXPECT_EQ(1u, csr->waitForComplitionCalledTimes); EXPECT_EQ(0u, csr->waitForTaskCountWithKmdNotifyFallbackCalled); + EXPECT_TRUE(csr->enableTimeoutSet); timeout = std::numeric_limits::max(); - enableTimeoutExpected = false; timeoutMicrosecondsExpected = NEO::TimeoutControls::maxTimeout; queue->synchronize(timeout); EXPECT_EQ(2u, csr->waitForComplitionCalledTimes); EXPECT_EQ(0u, csr->waitForTaskCountWithKmdNotifyFallbackCalled); + EXPECT_FALSE(csr->enableTimeoutSet); L0::CommandQueue::fromHandle(commandQueue)->destroy(); } @@ -1511,6 +1513,7 @@ HWTEST_F(CommandQueueSynchronizeTest, givenDebugOverrideEnabledWhenCallToSynchro EXPECT_EQ(1u, csr->waitForComplitionCalledTimes); EXPECT_EQ(0u, csr->waitForTaskCountWithKmdNotifyFallbackCalled); + EXPECT_TRUE(csr->enableTimeoutSet); timeout = std::numeric_limits::max(); enableTimeoutExpected = false; @@ -1520,6 +1523,7 @@ HWTEST_F(CommandQueueSynchronizeTest, givenDebugOverrideEnabledWhenCallToSynchro EXPECT_EQ(2u, csr->waitForComplitionCalledTimes); EXPECT_EQ(1u, csr->waitForTaskCountWithKmdNotifyFallbackCalled); + EXPECT_FALSE(csr->enableTimeoutSet); L0::CommandQueue::fromHandle(commandQueue)->destroy(); }