diff --git a/shared/source/debug_settings/debug_variables_base.inl b/shared/source/debug_settings/debug_variables_base.inl index 9089ce5926..ce85b55da4 100644 --- a/shared/source/debug_settings/debug_variables_base.inl +++ b/shared/source/debug_settings/debug_variables_base.inl @@ -485,7 +485,6 @@ DECLARE_DEBUG_VARIABLE(int32_t, EnableWaitpkg, -1, "-1: use default, 0: disable, DECLARE_DEBUG_VARIABLE(int32_t, GTPinAllocateBufferInSharedMemory, -1, "Force GTPin to allocate buffer in shared memory") DECLARE_DEBUG_VARIABLE(int32_t, AlignLocalMemoryVaTo2MB, -1, "Allow 2MB pages for allocations with size>=2MB. On Linux it means aligned VA, on Windows it means aligned size. -1: default, 0: disabled, 1: enabled") DECLARE_DEBUG_VARIABLE(int32_t, EnableUserFenceForCompletionWait, -1, "-1: default (disabled), 0: disable, 1: enable : Use Wait User Fence instead Gem Wait") -DECLARE_DEBUG_VARIABLE(int32_t, EnableUserFenceUseCtxId, -1, "-1: default (disabled), 0: disable, 1: enable : Use Context Id in Wait User Fence when waiting for completion tag") DECLARE_DEBUG_VARIABLE(int32_t, OverrideUserFenceStartValue, -1, "-1: default (disabled), >1: Instead of starting from 0, use different start value.") DECLARE_DEBUG_VARIABLE(int32_t, SetKmdWaitTimeout, -1, "-1: default (infinity), >0: amount of time units for wait function timeout") DECLARE_DEBUG_VARIABLE(int32_t, OverrideNotifyEnableForTagUpdatePostSync, -1, "-1: default (usage determined by user fence wait call), 0: disable use of NotifyEnable flag, 1: enable use NotifyEnable flag") diff --git a/shared/source/direct_submission/linux/drm_direct_submission.inl b/shared/source/direct_submission/linux/drm_direct_submission.inl index be9752b224..41f6e021f0 100644 --- a/shared/source/direct_submission/linux/drm_direct_submission.inl +++ b/shared/source/direct_submission/linux/drm_direct_submission.inl @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2023 Intel Corporation + * Copyright (C) 2020-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -93,7 +93,7 @@ inline DrmDirectSubmission::~DrmDirectSubmission() { auto osContextLinux = static_cast(&this->osContext); auto &drm = osContextLinux->getDrm(); auto completionFenceCpuAddress = reinterpret_cast(this->completionFenceAllocation->getUnderlyingBuffer()) + TagAllocationLayout::completionFenceOffset; - drm.waitOnUserFences(*osContextLinux, completionFenceCpuAddress, this->completionFenceValue, this->activeTiles, this->immWritePostSyncOffset); + drm.waitOnUserFences(*osContextLinux, completionFenceCpuAddress, this->completionFenceValue, this->activeTiles, -1, this->immWritePostSyncOffset); } this->deallocateResources(); if (this->pciBarrierPtr) { diff --git a/shared/source/os_interface/linux/drm_command_stream.h b/shared/source/os_interface/linux/drm_command_stream.h index eef9eccd98..c7a6cfe035 100644 --- a/shared/source/os_interface/linux/drm_command_stream.h +++ b/shared/source/os_interface/linux/drm_command_stream.h @@ -83,6 +83,5 @@ class DrmCommandStreamReceiver : public DeviceCommandStreamReceiver { int32_t kmdWaitTimeout = -1; bool useUserFenceWait = true; - bool useContextForUserFenceWait = false; }; } // namespace NEO diff --git a/shared/source/os_interface/linux/drm_command_stream.inl b/shared/source/os_interface/linux/drm_command_stream.inl index c3014496d0..793f1fd642 100644 --- a/shared/source/os_interface/linux/drm_command_stream.inl +++ b/shared/source/os_interface/linux/drm_command_stream.inl @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2023 Intel Corporation + * Copyright (C) 2018-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -67,10 +67,6 @@ DrmCommandStreamReceiver::DrmCommandStreamReceiver(ExecutionEnvironme if (overrideUserFenceForCompletionWait != -1) { useUserFenceWait = !!(overrideUserFenceForCompletionWait); } - int overrideUserFenceUseCtxId = debugManager.flags.EnableUserFenceUseCtxId.get(); - if (overrideUserFenceUseCtxId != -1) { - useContextForUserFenceWait = !!(overrideUserFenceUseCtxId); - } useNotifyEnableForPostSync = useUserFenceWait; int overrideUseNotifyEnableForPostSync = debugManager.flags.OverrideNotifyEnableForTagUpdatePostSync.get(); if (overrideUseNotifyEnableForPostSync != -1) { @@ -373,27 +369,7 @@ SubmissionStatus DrmCommandStreamReceiver::flushInternal(const BatchB template bool DrmCommandStreamReceiver::waitUserFence(TaskCountType waitValue, uint64_t hostAddress, int64_t timeout) { - int ret = 0; - StackVec ctxIds; - - if (useContextForUserFenceWait) { - for (auto tileIterator = 0u; tileIterator < this->osContext->getDeviceBitfield().size(); tileIterator++) { - uint32_t ctxId = 0u; - if (this->osContext->getDeviceBitfield().test(tileIterator)) { - ctxId = static_cast(osContext)->getDrmContextIds()[tileIterator]; - ctxIds.push_back(ctxId); - } - } - UNRECOVERABLE_IF(ctxIds.size() != this->activePartitions); - } - - for (uint32_t i = 0; i < this->activePartitions; i++) { - ret |= this->drm->waitUserFence(useContextForUserFenceWait ? ctxIds[i] : 0, hostAddress, waitValue, Drm::ValueWidth::u64, timeout, 0u); - if (ret != 0) { - break; - } - hostAddress += this->immWritePostSyncWriteOffset; - } + int ret = drm->waitOnUserFences(static_cast(*this->osContext), hostAddress, waitValue, this->activePartitions, timeout, this->immWritePostSyncWriteOffset); return (ret == 0); } diff --git a/shared/source/os_interface/linux/drm_memory_manager.cpp b/shared/source/os_interface/linux/drm_memory_manager.cpp index 7fd2b29e64..8fa6932382 100644 --- a/shared/source/os_interface/linux/drm_memory_manager.cpp +++ b/shared/source/os_interface/linux/drm_memory_manager.cpp @@ -2221,7 +2221,7 @@ void DrmMemoryManager::waitOnCompletionFence(GraphicsAllocation *allocation) { if (allocation->isUsedByOsContext(osContextId)) { Drm &drm = getDrm(csr->getRootDeviceIndex()); - drm.waitOnUserFences(static_cast(*osContext), completionFenceAddress, allocationTaskCount, csr->getActivePartitions(), csr->getImmWritePostSyncWriteOffset()); + drm.waitOnUserFences(static_cast(*osContext), completionFenceAddress, allocationTaskCount, csr->getActivePartitions(), -1, csr->getImmWritePostSyncWriteOffset()); } } } else { diff --git a/shared/source/os_interface/linux/drm_neo.cpp b/shared/source/os_interface/linux/drm_neo.cpp index 68e64deb10..0045de4771 100644 --- a/shared/source/os_interface/linux/drm_neo.cpp +++ b/shared/source/os_interface/linux/drm_neo.cpp @@ -1557,12 +1557,11 @@ PhysicalDevicePciSpeedInfo Drm::getPciSpeedInfo() const { return pciSpeedInfo; } -void Drm::waitOnUserFences(const OsContextLinux &osContext, uint64_t address, uint64_t value, uint32_t numActiveTiles, uint32_t postSyncOffset) { +int Drm::waitOnUserFences(const OsContextLinux &osContext, uint64_t address, uint64_t value, uint32_t numActiveTiles, int64_t timeout, uint32_t postSyncOffset) { auto &drmContextIds = osContext.getDrmContextIds(); UNRECOVERABLE_IF(numActiveTiles > drmContextIds.size()); auto completionFenceCpuAddress = address; - static constexpr int64_t defaultTimeout = -1; - const auto selectedTimeout = osContext.isHangDetected() ? 1 : defaultTimeout; + const auto selectedTimeout = osContext.isHangDetected() ? 1 : timeout; for (auto drmIterator = 0u; drmIterator < numActiveTiles; drmIterator++) { if (*reinterpret_cast(completionFenceCpuAddress) < value) { @@ -1575,6 +1574,9 @@ void Drm::waitOnUserFences(const OsContextLinux &osContext, uint64_t address, ui << ", current value: " << *reinterpret_cast(completionFenceCpuAddress) << ", wait value: " << value << std::endl; } + if (retVal != 0) { + return retVal; + } } else if (debugManager.flags.PrintCompletionFenceUsage.get()) { std::cout << "Completion fence already completed." << " CPU address: " << std::hex << completionFenceCpuAddress << std::dec @@ -1583,6 +1585,8 @@ void Drm::waitOnUserFences(const OsContextLinux &osContext, uint64_t address, ui } completionFenceCpuAddress = ptrOffset(completionFenceCpuAddress, postSyncOffset); } + + return 0; } const HardwareInfo *Drm::getHardwareInfo() const { return rootDeviceEnvironment.getHardwareInfo(); } diff --git a/shared/source/os_interface/linux/drm_neo.h b/shared/source/os_interface/linux/drm_neo.h index 84c1769617..90dbf27602 100644 --- a/shared/source/os_interface/linux/drm_neo.h +++ b/shared/source/os_interface/linux/drm_neo.h @@ -222,7 +222,7 @@ class Drm : public DriverModel { }; MOCKABLE_VIRTUAL int waitUserFence(uint32_t ctxId, uint64_t address, uint64_t value, ValueWidth dataWidth, int64_t timeout, uint16_t flags); - void waitOnUserFences(const OsContextLinux &osContext, uint64_t address, uint64_t value, uint32_t numActiveTiles, uint32_t postSyncOffset); + int waitOnUserFences(const OsContextLinux &osContext, uint64_t address, uint64_t value, uint32_t numActiveTiles, int64_t timeout, uint32_t postSyncOffset); void setNewResourceBoundToVM(BufferObject *bo, uint32_t vmHandleId); diff --git a/shared/test/common/libult/linux/drm_mock.cpp b/shared/test/common/libult/linux/drm_mock.cpp index 68a8864c15..e32fcdf004 100644 --- a/shared/test/common/libult/linux/drm_mock.cpp +++ b/shared/test/common/libult/linux/drm_mock.cpp @@ -43,6 +43,10 @@ DrmMock::DrmMock(int fd, RootDeviceEnvironment &rootDeviceEnvironment) : Drm(std } int DrmMock::handleRemainingRequests(DrmIoctl request, void *arg) { + if (request == DrmIoctl::gemWaitUserFence && arg != nullptr) { + return 0; + } + ioctlCallsCount--; return -1; }; diff --git a/shared/test/common/mocks/linux/mock_drm_command_stream_receiver.h b/shared/test/common/mocks/linux/mock_drm_command_stream_receiver.h index c677a42302..f2351b31b9 100644 --- a/shared/test/common/mocks/linux/mock_drm_command_stream_receiver.h +++ b/shared/test/common/mocks/linux/mock_drm_command_stream_receiver.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2023 Intel Corporation + * Copyright (C) 2018-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -22,7 +22,6 @@ class TestedDrmCommandStreamReceiver : public DrmCommandStreamReceiveruseUserFenceWait); EXPECT_FALSE(testedCsr->isUsedNotifyEnableForPostSync()); - EXPECT_FALSE(testedCsr->useContextForUserFenceWait); device->resetCommandStreamReceiver(testedCsr); mock->ioctlCnt.gemWait = 0; @@ -1091,7 +1090,6 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, givenGemWaitUsedWhenKmdTimeoutU 1); EXPECT_FALSE(testedCsr->useUserFenceWait); EXPECT_FALSE(testedCsr->isUsedNotifyEnableForPostSync()); - EXPECT_FALSE(testedCsr->useContextForUserFenceWait); device->resetCommandStreamReceiver(testedCsr); mock->ioctlCnt.gemWait = 0; @@ -1107,7 +1105,6 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, givenWaitUserFenceFlagSetAndVmBindAvailableAndUseDrmCtxWhenDrmCsrWaitsForFlushStampThenExpectUseDrmWaitUserFenceCallWithNonZeroContext) { DebugManagerStateRestore restorer; debugManager.flags.EnableUserFenceForCompletionWait.set(1); - debugManager.flags.EnableUserFenceUseCtxId.set(1); mock->isVmBindAvailableCall.callParent = false; mock->isVmBindAvailableCall.returnValue = true; @@ -1118,7 +1115,6 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, 1); EXPECT_TRUE(testedCsr->useUserFenceWait); EXPECT_TRUE(testedCsr->isUsedNotifyEnableForPostSync()); - EXPECT_TRUE(testedCsr->useContextForUserFenceWait); device->resetCommandStreamReceiver(testedCsr); mock->ioctlCnt.gemWait = 0; mock->isVmBindAvailableCall.called = 0u; @@ -1131,6 +1127,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, } FlushStamp handleToWait = 123; + *testedCsr->getTagAddress() = 0; testedCsr->waitForFlushStamp(handleToWait); EXPECT_EQ(0, mock->ioctlCnt.gemWait); @@ -1159,7 +1156,6 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, 1); EXPECT_TRUE(testedCsr->useUserFenceWait); EXPECT_TRUE(testedCsr->isUsedNotifyEnableForPostSync()); - EXPECT_FALSE(testedCsr->useContextForUserFenceWait); device->resetCommandStreamReceiver(testedCsr); mock->ioctlCnt.gemWait = 0; mock->isVmBindAvailableCall.called = 0u; @@ -1188,7 +1184,6 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, 1); EXPECT_FALSE(testedCsr->useUserFenceWait); EXPECT_FALSE(testedCsr->isUsedNotifyEnableForPostSync()); - EXPECT_FALSE(testedCsr->useContextForUserFenceWait); device->resetCommandStreamReceiver(testedCsr); mock->ioctlCnt.gemWait = 0; mock->isVmBindAvailableCall.called = 0u; @@ -1207,7 +1202,6 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, givenWaitUserFenceSetAndUseCtxFlagsNotSetAndVmBindAvailableWhenDrmCsrWaitsForFlushStampThenExpectUseDrmWaitUserFenceCallWithZeroContext) { DebugManagerStateRestore restorer; debugManager.flags.EnableUserFenceForCompletionWait.set(1); - debugManager.flags.EnableUserFenceUseCtxId.set(0); debugManager.flags.SetKmdWaitTimeout.set(1000); mock->isVmBindAvailableCall.callParent = false; @@ -1219,12 +1213,12 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, 1); EXPECT_TRUE(testedCsr->useUserFenceWait); EXPECT_TRUE(testedCsr->isUsedNotifyEnableForPostSync()); - EXPECT_FALSE(testedCsr->useContextForUserFenceWait); device->resetCommandStreamReceiver(testedCsr); mock->ioctlCnt.gemWait = 0; mock->isVmBindAvailableCall.called = 0u; FlushStamp handleToWait = 123; + *testedCsr->getTagAddress() = 0; testedCsr->waitForFlushStamp(handleToWait); EXPECT_EQ(0, mock->ioctlCnt.gemWait); @@ -1234,7 +1228,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, EXPECT_EQ(1u, mock->waitUserFenceCall.called); EXPECT_EQ(1u, mock->isVmBindAvailableCall.called); - EXPECT_EQ(0u, mock->waitUserFenceCall.ctxId); + EXPECT_NE(0u, mock->waitUserFenceCall.ctxId); EXPECT_EQ(1000, mock->waitUserFenceCall.timeout); EXPECT_EQ(Drm::ValueWidth::u64, mock->waitUserFenceCall.dataWidth); } diff --git a/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_prelim_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_prelim_tests.cpp index 4e3639e038..ada327436c 100644 --- a/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_prelim_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_prelim_tests.cpp @@ -139,10 +139,11 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTestDrmPrelim, givenWaitUserFenceEnab auto testDrmCsr = static_cast *>(csr); testDrmCsr->useUserFenceWait = true; - testDrmCsr->useContextForUserFenceWait = true; testDrmCsr->activePartitions = static_cast(drmCtxSize); - uint64_t tagAddress = castToUint64(const_cast(testDrmCsr->getTagAddress())); + auto tagPtr = const_cast(testDrmCsr->getTagAddress()); + *tagPtr = 0; + uint64_t tagAddress = castToUint64(tagPtr); FlushStamp handleToWait = 123; testDrmCsr->waitForFlushStamp(handleToWait); @@ -159,39 +160,6 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTestDrmPrelim, givenWaitUserFenceEnab EXPECT_EQ(-1, mock->context.receivedGemWaitUserFence.timeout); } -HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTestDrmPrelim, givenWaitUserFenceEnabledWhenUseCtxIdNotSelectedThenExpectZeroContextId) { - if (!FamilyType::supportsCmdSet(IGFX_XE_HP_CORE)) { - GTEST_SKIP(); - } - - auto osContextLinux = static_cast(device->getDefaultEngine().osContext); - std::vector &drmCtxIds = const_cast &>(osContextLinux->getDrmContextIds()); - size_t drmCtxSize = drmCtxIds.size(); - for (uint32_t i = 0; i < drmCtxSize; i++) { - drmCtxIds[i] = 5u + i; - } - - auto testDrmCsr = static_cast *>(csr); - testDrmCsr->useUserFenceWait = true; - testDrmCsr->useContextForUserFenceWait = false; - - uint64_t tagAddress = castToUint64(const_cast(testDrmCsr->getTagAddress())); - FlushStamp handleToWait = 123; - testDrmCsr->waitForFlushStamp(handleToWait); - - EXPECT_EQ(1u, testDrmCsr->waitUserFenceResult.called); - EXPECT_EQ(123u, testDrmCsr->waitUserFenceResult.waitValue); - - EXPECT_EQ(1u, mock->context.gemWaitUserFenceCalled); - EXPECT_EQ(tagAddress, mock->context.receivedGemWaitUserFence.addr); - EXPECT_EQ(handleToWait, mock->context.receivedGemWaitUserFence.value); - EXPECT_EQ(0u, mock->context.receivedGemWaitUserFence.ctxId); - EXPECT_EQ(DrmPrelimHelper::getGTEWaitUserFenceFlag(), mock->context.receivedGemWaitUserFence.op); - EXPECT_EQ(0u, mock->context.receivedGemWaitUserFence.flags); - EXPECT_EQ(DrmPrelimHelper::getU64WaitUserFenceFlag(), mock->context.receivedGemWaitUserFence.mask); - EXPECT_EQ(-1, mock->context.receivedGemWaitUserFence.timeout); -} - HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTestDrmPrelim, givenWaitUserFenceEnabledWhenUseCtxIdNotSelectedAndMultiplePartitionsThenExpectZeroContextIdAndEqualWaitCalls) { if (!FamilyType::supportsCmdSet(IGFX_XE_HP_CORE)) { GTEST_SKIP(); @@ -206,10 +174,32 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTestDrmPrelim, givenWaitUserFenceEnab auto testDrmCsr = static_cast *>(csr); testDrmCsr->useUserFenceWait = true; - testDrmCsr->useContextForUserFenceWait = false; testDrmCsr->activePartitions = 2u; EXPECT_NE(0u, testDrmCsr->immWritePostSyncWriteOffset); + auto rootExecEnvironment = executionEnvironment->rootDeviceEnvironments[0].get(); + auto &gfxCoreHelper = rootExecEnvironment->getHelper(); + auto hwInfo = rootExecEnvironment->getHardwareInfo(); + + auto osContext = std::make_unique(*mock, rootDeviceIndex, 0, + EngineDescriptorHelper::getDefaultDescriptor(gfxCoreHelper.getGpgpuEngineInstances(*rootExecEnvironment)[0], + PreemptionHelper::getDefaultPreemptionMode(*hwInfo), DeviceBitfield(3))); + + osContext->ensureContextInitialized(); + osContext->incRefInternal(); + + device->getMemoryManager()->unregisterEngineForCsr(testDrmCsr); + + device->allEngines[0].osContext = osContext.get(); + + testDrmCsr->setupContext(*osContext); + + auto tagPtr = testDrmCsr->getTagAddress(); + *tagPtr = 0; + + tagPtr = ptrOffset(tagPtr, testDrmCsr->immWritePostSyncWriteOffset); + *tagPtr = 0; + uint64_t tagAddress = castToUint64(const_cast(testDrmCsr->getTagAddress())); FlushStamp handleToWait = 123; testDrmCsr->waitForFlushStamp(handleToWait); @@ -220,7 +210,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTestDrmPrelim, givenWaitUserFenceEnab EXPECT_EQ(2u, mock->context.gemWaitUserFenceCalled); EXPECT_EQ(tagAddress + testDrmCsr->immWritePostSyncWriteOffset, mock->context.receivedGemWaitUserFence.addr); EXPECT_EQ(handleToWait, mock->context.receivedGemWaitUserFence.value); - EXPECT_EQ(0u, mock->context.receivedGemWaitUserFence.ctxId); + EXPECT_NE(0u, mock->context.receivedGemWaitUserFence.ctxId); EXPECT_EQ(DrmPrelimHelper::getGTEWaitUserFenceFlag(), mock->context.receivedGemWaitUserFence.op); EXPECT_EQ(0u, mock->context.receivedGemWaitUserFence.flags); EXPECT_EQ(DrmPrelimHelper::getU64WaitUserFenceFlag(), mock->context.receivedGemWaitUserFence.mask); @@ -234,15 +224,40 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTestDrmPrelim, givenFailingIoctlWhenW auto testDrmCsr = static_cast *>(csr); testDrmCsr->useUserFenceWait = true; - testDrmCsr->useContextForUserFenceWait = false; testDrmCsr->activePartitions = 3u; + auto rootExecEnvironment = executionEnvironment->rootDeviceEnvironments[0].get(); + auto &gfxCoreHelper = rootExecEnvironment->getHelper(); + auto hwInfo = rootExecEnvironment->getHardwareInfo(); + + auto osContext = std::make_unique(*mock, rootDeviceIndex, 0, + EngineDescriptorHelper::getDefaultDescriptor(gfxCoreHelper.getGpgpuEngineInstances(*rootExecEnvironment)[0], + PreemptionHelper::getDefaultPreemptionMode(*hwInfo), DeviceBitfield(7))); + + osContext->ensureContextInitialized(); + osContext->incRefInternal(); + + device->getMemoryManager()->unregisterEngineForCsr(testDrmCsr); + + device->allEngines[0].osContext = osContext.get(); + + testDrmCsr->setupContext(*osContext); + mock->waitUserFenceCall.failSpecificCall = 2; FlushStamp handleToWait = 123; EXPECT_EQ(0u, mock->waitUserFenceCall.called); + auto tagPtr = testDrmCsr->getTagAddress(); + *tagPtr = 0; + + tagPtr = ptrOffset(tagPtr, testDrmCsr->immWritePostSyncWriteOffset); + *tagPtr = 0; + + tagPtr = ptrOffset(tagPtr, testDrmCsr->immWritePostSyncWriteOffset); + *tagPtr = 0; + testDrmCsr->waitForFlushStamp(handleToWait); EXPECT_EQ(2u, mock->waitUserFenceCall.called); diff --git a/shared/test/unit_test/os_interface/linux/drm_query_prelim_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_query_prelim_tests.cpp index 8321606d0a..3de7d5fde8 100644 --- a/shared/test/unit_test/os_interface/linux/drm_query_prelim_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_query_prelim_tests.cpp @@ -545,7 +545,7 @@ TEST(DrmTestPrelim, givenHungContextWhenCallingWaitUserFenceThenSmallTimeoutIsPa uint64_t memory = 0; uint64_t value = 20; - drm.waitOnUserFences(osContext, reinterpret_cast(&memory), value, 1, 0); + drm.waitOnUserFences(osContext, reinterpret_cast(&memory), value, 1, -1, 0); EXPECT_EQ(osContext.getDrmContextIds().size(), drm.context.waitUserFenceCalled); const auto &waitUserFence = drm.context.receivedWaitUserFence;