From 3414abe74ac9c93974dc34c476c5ff5ef4c97c75 Mon Sep 17 00:00:00 2001 From: Compute-Runtime-Validation Date: Wed, 5 Mar 2025 01:25:44 +0100 Subject: [PATCH] Revert "fix: make global fence always resident on linux" This reverts commit efb814d9795b0d7f3f4fe3f020bb8bbf13114042. Signed-off-by: Compute-Runtime-Validation --- .../direct_submission/direct_submission_hw.h | 1 + .../direct_submission/direct_submission_hw.inl | 4 +--- .../windows/wddm_direct_submission.h | 1 + .../windows/wddm_direct_submission.inl | 9 +++++++++ .../common/mocks/mock_direct_submission_hw.h | 1 - .../direct_submission_tests_1.cpp | 13 ++----------- .../direct_submission_tests_2.cpp | 4 ---- .../windows/wddm_direct_submission_tests.cpp | 18 ++++++------------ .../windows/mock_wddm_direct_submission.h | 2 -- 9 files changed, 20 insertions(+), 33 deletions(-) diff --git a/shared/source/direct_submission/direct_submission_hw.h b/shared/source/direct_submission/direct_submission_hw.h index fc33d51ebf..f867dc30eb 100644 --- a/shared/source/direct_submission/direct_submission_hw.h +++ b/shared/source/direct_submission/direct_submission_hw.h @@ -194,6 +194,7 @@ class DirectSubmissionHw { void updateRelaxedOrderingQueueSize(uint32_t newSize); + virtual void makeGlobalFenceAlwaysResident(){}; struct RingBufferUse { RingBufferUse() = default; RingBufferUse(FlushStamp completionFence, GraphicsAllocation *ringBuffer) : completionFence(completionFence), ringBuffer(ringBuffer){}; diff --git a/shared/source/direct_submission/direct_submission_hw.inl b/shared/source/direct_submission/direct_submission_hw.inl index 470ff862a4..253ed5d5fd 100644 --- a/shared/source/direct_submission/direct_submission_hw.inl +++ b/shared/source/direct_submission/direct_submission_hw.inl @@ -361,9 +361,6 @@ bool DirectSubmissionHw::allocateResources() { if (completionFenceAllocation != nullptr) { allocations.push_back(completionFenceAllocation); } - if (this->globalFenceAllocation != nullptr && this->miMemFenceRequired && !this->systemMemoryFenceAddressSet) { - allocations.push_back(globalFenceAllocation); - } if (this->relaxedOrderingEnabled) { const AllocationProperties allocationProperties(rootDeviceIndex, @@ -1242,6 +1239,7 @@ size_t DirectSubmissionHw::getDiagnosticModeSection() { template void DirectSubmissionHw::dispatchSystemMemoryFenceAddress() { + this->makeGlobalFenceAlwaysResident(); EncodeMemoryFence::encodeSystemMemoryFence(ringCommandStream, this->globalFenceAllocation); } diff --git a/shared/source/direct_submission/windows/wddm_direct_submission.h b/shared/source/direct_submission/windows/wddm_direct_submission.h index f2ab502e42..f8e1deed33 100644 --- a/shared/source/direct_submission/windows/wddm_direct_submission.h +++ b/shared/source/direct_submission/windows/wddm_direct_submission.h @@ -42,6 +42,7 @@ class WddmDirectSubmission : public DirectSubmissionHw { void getTagAddressValue(TagData &tagData) override; bool isCompleted(uint32_t ringBufferIndex) override; MOCKABLE_VIRTUAL void updateMonitorFenceValueForResidencyList(ResidencyContainer *allocationsForResidency); + void makeGlobalFenceAlwaysResident() override; OsContextWin *osContextWin; Wddm *wddm; diff --git a/shared/source/direct_submission/windows/wddm_direct_submission.inl b/shared/source/direct_submission/windows/wddm_direct_submission.inl index 47ca6e3c34..5a85698d87 100644 --- a/shared/source/direct_submission/windows/wddm_direct_submission.inl +++ b/shared/source/direct_submission/windows/wddm_direct_submission.inl @@ -219,4 +219,13 @@ inline void WddmDirectSubmission::unblockPagingFenceSemap this->semaphoreData->pagingFenceCounter = static_cast(*this->wddm->getPagingFenceAddress()); } +template +inline void WddmDirectSubmission::makeGlobalFenceAlwaysResident() { + if (this->globalFenceAllocation != nullptr) { + DirectSubmissionAllocations allocations; + allocations.push_back(this->globalFenceAllocation); + UNRECOVERABLE_IF(!this->makeResourcesResident(allocations)); + } +} + } // namespace NEO diff --git a/shared/test/common/mocks/mock_direct_submission_hw.h b/shared/test/common/mocks/mock_direct_submission_hw.h index 8ad9a72c5b..945f855525 100644 --- a/shared/test/common/mocks/mock_direct_submission_hw.h +++ b/shared/test/common/mocks/mock_direct_submission_hw.h @@ -54,7 +54,6 @@ struct MockDirectSubmissionHw : public DirectSubmissionHw using BaseClass::getSizeStartSection; using BaseClass::getSizeSwitchRingBufferSection; using BaseClass::getSizeSystemMemoryFenceAddress; - using BaseClass::globalFenceAllocation; using BaseClass::hwInfo; using BaseClass::immWritePostSyncOffset; using BaseClass::inputMonitorFenceDispatchRequirement; diff --git a/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp b/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp index 26b6b70399..3bf205b6c3 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp @@ -245,7 +245,6 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWithoutCompletionFenceAlloca pDevice->getRootDeviceEnvironmentRef().memoryOperationsInterface.reset(mockMemoryOperations.get()); MockDirectSubmissionHw> directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); - auto miMemFenceRequired = directSubmission.globalFenceAllocation && directSubmission.miMemFenceRequired && !directSubmission.systemMemoryFenceAddressSet; directSubmission.callBaseResident = true; bool ret = directSubmission.initialize(true); @@ -257,9 +256,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWithoutCompletionFenceAlloca if (gfxCoreHelper.isRelaxedOrderingSupported()) { expectedAllocationsCnt += 2; } - if (miMemFenceRequired) { - expectedAllocationsCnt++; - } + EXPECT_EQ(1, mockMemoryOperations->makeResidentCalledCount); ASSERT_EQ(expectedAllocationsCnt, mockMemoryOperations->gfxAllocationsForMakeResident.size()); EXPECT_EQ(directSubmission.ringBuffers[0].ringBuffer, mockMemoryOperations->gfxAllocationsForMakeResident[0]); @@ -276,7 +273,6 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWithCompletionFenceAllocatio pDevice->getRootDeviceEnvironmentRef().memoryOperationsInterface.reset(mockMemoryOperations.get()); MockDirectSubmissionHw> directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); - auto miMemFenceRequired = directSubmission.globalFenceAllocation && directSubmission.miMemFenceRequired && !directSubmission.systemMemoryFenceAddressSet; MockGraphicsAllocation completionFenceAllocation{}; @@ -292,18 +288,13 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWithCompletionFenceAllocatio if (gfxCoreHelper.isRelaxedOrderingSupported()) { expectedAllocationsCnt += 2; } - if (miMemFenceRequired) { - expectedAllocationsCnt++; - } + EXPECT_EQ(1, mockMemoryOperations->makeResidentCalledCount); ASSERT_EQ(expectedAllocationsCnt, mockMemoryOperations->gfxAllocationsForMakeResident.size()); EXPECT_EQ(directSubmission.ringBuffers[0].ringBuffer, mockMemoryOperations->gfxAllocationsForMakeResident[0]); EXPECT_EQ(directSubmission.ringBuffers[1].ringBuffer, mockMemoryOperations->gfxAllocationsForMakeResident[1]); EXPECT_EQ(directSubmission.semaphores, mockMemoryOperations->gfxAllocationsForMakeResident[2]); EXPECT_EQ(directSubmission.completionFenceAllocation, mockMemoryOperations->gfxAllocationsForMakeResident[3]); - if (miMemFenceRequired) { - EXPECT_EQ(directSubmission.globalFenceAllocation, mockMemoryOperations->gfxAllocationsForMakeResident[4]); - } pDevice->getRootDeviceEnvironmentRef().memoryOperationsInterface.release(); } diff --git a/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp b/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp index baa6149dd3..3c6fd6c298 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp @@ -839,7 +839,6 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DirectSubmissionDispatchBufferTest, MockDirectSubmissionHw> directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); EXPECT_TRUE(directSubmission.partitionConfigSet); - auto miMemFenceRequired = directSubmission.globalFenceAllocation && directSubmission.miMemFenceRequired && !directSubmission.systemMemoryFenceAddressSet; directSubmission.activeTiles = 2; directSubmission.partitionedMode = true; directSubmission.partitionConfigSet = false; @@ -865,9 +864,6 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DirectSubmissionDispatchBufferTest, submitSize += RelaxedOrderingHelper::getSizeRegistersInit(); } - if (miMemFenceRequired) { - expectedAllocationsCount += 1; - } EXPECT_EQ(submitSize, directSubmission.submitSize); EXPECT_EQ(1u, directSubmission.handleResidencyCount); EXPECT_EQ(expectedAllocationsCount, directSubmission.makeResourcesResidentVectorSize); diff --git a/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp b/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp index a0417234dd..07bb1d9cc9 100644 --- a/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp +++ b/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp @@ -136,6 +136,7 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenDirectIsInitializedWithMiMemFenc auto &compilerProductHelper = device->getCompilerProductHelper(); auto isHeaplessStateInit = compilerProductHelper.isHeaplessStateInitEnabled(compilerProductHelper.isHeaplessModeEnabled()); if (isFenceRequired && !isHeaplessStateInit) { + EXPECT_EQ(1u, wddm->makeResidentResult.handleCount); EXPECT_TRUE(device->getDefaultEngine().commandStreamReceiver->getGlobalFenceAllocation()->isExplicitlyMadeResident()); } *wddmDirectSubmission->ringFence.cpuAddress = 1ull; @@ -150,7 +151,7 @@ using WddmDirectSubmissionNoPreemptionTest = WddmDirectSubmissionFixture>> wddmDirectSubmission = std::make_unique>>(*device->getDefaultEngine().commandStreamReceiver); - auto miMemFenceRequired = wddmDirectSubmission->globalFenceAllocation && wddmDirectSubmission->miMemFenceRequired && !wddmDirectSubmission->systemMemoryFenceAddressSet; + EXPECT_EQ(0u, wddmDirectSubmission->commandBufferHeader->NeedsMidBatchPreEmptionSupport); bool ret = wddmDirectSubmission->initialize(false); @@ -165,9 +166,6 @@ HWTEST_F(WddmDirectSubmissionNoPreemptionTest, givenWddmWhenDirectIsInitializedA if (gfxCoreHelper.isRelaxedOrderingSupported()) { expectedAllocationsCnt += 2; } - if (miMemFenceRequired) { - expectedAllocationsCnt++; - } EXPECT_EQ(expectedAllocationsCnt, wddm->makeResidentResult.handleCount); EXPECT_EQ(1u, wddmMockInterface->createMonitoredFenceCalled); @@ -201,7 +199,7 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenSubmitingCmdBufferThenExpectPass HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenAllocateOsResourcesThenExpectRingMonitorFenceCreatedAndAllocationsResident) { MockWddmDirectSubmission> wddmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver); - auto miMemFenceRequired = wddmDirectSubmission.globalFenceAllocation && wddmDirectSubmission.miMemFenceRequired && !wddmDirectSubmission.systemMemoryFenceAddressSet; + bool ret = wddmDirectSubmission.allocateResources(); EXPECT_TRUE(ret); auto &gfxCoreHelper = device->getGfxCoreHelper(); @@ -209,9 +207,7 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenAllocateOsResourcesThenExpectRin if (gfxCoreHelper.isRelaxedOrderingSupported()) { expectedAllocationsCnt += 2; } - if (miMemFenceRequired) { - expectedAllocationsCnt++; - } + EXPECT_EQ(1u, wddmMockInterface->createMonitoredFenceCalled); EXPECT_EQ(expectedAllocationsCnt, wddm->makeResidentResult.handleCount); } @@ -241,7 +237,7 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenAllocateOsResourcesFenceCreation HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenAllocateOsResourcesResidencyFailsThenExpectRingMonitorFenceCreatedAndAllocationsNotResident) { MockWddmDirectSubmission> wddmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver); - auto miMemFenceRequired = wddmDirectSubmission.globalFenceAllocation && wddmDirectSubmission.miMemFenceRequired && !wddmDirectSubmission.systemMemoryFenceAddressSet; + wddm->callBaseMakeResident = false; wddm->makeResidentStatus = false; @@ -252,9 +248,7 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenAllocateOsResourcesResidencyFail if (gfxCoreHelper.isRelaxedOrderingSupported()) { expectedAllocationsCnt += 2; } - if (miMemFenceRequired) { - expectedAllocationsCnt++; - } + EXPECT_EQ(0u, wddmMockInterface->createMonitoredFenceCalled); EXPECT_EQ(expectedAllocationsCnt, wddm->makeResidentResult.handleCount); } diff --git a/shared/test/unit_test/mocks/windows/mock_wddm_direct_submission.h b/shared/test/unit_test/mocks/windows/mock_wddm_direct_submission.h index 5fdbb37220..7576b612ad 100644 --- a/shared/test/unit_test/mocks/windows/mock_wddm_direct_submission.h +++ b/shared/test/unit_test/mocks/windows/mock_wddm_direct_submission.h @@ -28,7 +28,6 @@ struct MockWddmDirectSubmission : public WddmDirectSubmission