From 5aa5d409372efde8647470c57053fe3ad80cffdd Mon Sep 17 00:00:00 2001 From: Lukasz Jobczyk Date: Wed, 28 Aug 2024 10:11:54 +0000 Subject: [PATCH] performance: Mitigate dc flush on LNL Windows Signed-off-by: Lukasz Jobczyk --- opencl/source/dll/command_queue_dll.cpp | 4 ++++ opencl/source/mem_obj/buffer.cpp | 9 ++++++--- .../copy_engine_aub_tests_xehp_and_later.h | 2 +- .../context/driver_diagnostics_enqueue_tests.cpp | 8 ++++---- opencl/test/unit_test/libult/command_queue_ult.cpp | 4 ++++ opencl/test/unit_test/mem_obj/buffer_tests.cpp | 4 ++++ .../unit_test/mem_obj/buffer_tests_pvc_and_later.cpp | 4 ++++ .../mem_obj/windows/buffer_windows_tests.cpp | 4 ++++ shared/source/os_interface/product_helper.h | 1 + shared/source/os_interface/product_helper.inl | 7 ++++++- shared/source/os_interface/product_helper_hw.h | 1 + .../xe2_hpg_core/windows/product_helper_lnl.cpp | 5 +++++ shared/test/common/mocks/mock_product_helper.cpp | 5 +++++ .../test/unit_test/gmm_helper/gmm_helper_tests.cpp | 9 +++++++++ .../unit_test/os_interface/product_helper_tests.cpp | 8 +++++--- .../windows/wddm_memory_manager_tests.cpp | 12 ++++++++++-- .../xe2_hpg_core/lnl/gfx_core_helper_tests_lnl.cpp | 2 +- .../xe2_hpg_core/lnl/product_helper_tests_lnl.cpp | 5 ++++- .../lnl/windows/product_helper_tests_lnl_windows.cpp | 6 ++++++ 19 files changed, 84 insertions(+), 16 deletions(-) diff --git a/opencl/source/dll/command_queue_dll.cpp b/opencl/source/dll/command_queue_dll.cpp index e1e8e5253c..1d86c9ff3d 100644 --- a/opencl/source/dll/command_queue_dll.cpp +++ b/opencl/source/dll/command_queue_dll.cpp @@ -17,4 +17,8 @@ bool CommandQueue::isTimestampWaitEnabled() { return true; } +bool checkIsGpuCopyRequiredForDcFlushMitigation(AllocationType type) { + return type != AllocationType::bufferHostMemory; +} + } // namespace NEO diff --git a/opencl/source/mem_obj/buffer.cpp b/opencl/source/mem_obj/buffer.cpp index caa0c9c2b7..8bee0c6cdf 100644 --- a/opencl/source/mem_obj/buffer.cpp +++ b/opencl/source/mem_obj/buffer.cpp @@ -184,6 +184,8 @@ Buffer *Buffer::create(Context *context, flags, 0, size, hostPtr, bufferCreateArgs, errcodeRet); } +extern bool checkIsGpuCopyRequiredForDcFlushMitigation(AllocationType type); + bool inline copyHostPointer(Buffer *buffer, Device &device, size_t size, @@ -195,7 +197,8 @@ bool inline copyHostPointer(Buffer *buffer, auto memory = buffer->getGraphicsAllocation(rootDeviceIndex); auto isCompressionEnabled = memory->isCompressionEnabled(); const bool isLocalMemory = !MemoryPoolHelper::isSystemMemoryPool(memory->getMemoryPool()); - const bool gpuCopyRequired = isCompressionEnabled || isLocalMemory || productHelper.isDcFlushMitigated(); + const bool isGpuCopyRequiredForDcFlushMitigation = productHelper.isDcFlushMitigated() && checkIsGpuCopyRequiredForDcFlushMitigation(memory->getAllocationType()); + const bool gpuCopyRequired = isCompressionEnabled || isLocalMemory || isGpuCopyRequiredForDcFlushMitigation; if (gpuCopyRequired) { auto &hwInfo = device.getHardwareInfo(); @@ -210,7 +213,7 @@ bool inline copyHostPointer(Buffer *buffer, isCompressionEnabled == false && productHelper.getLocalMemoryAccessMode(hwInfo) != LocalMemoryAccessMode::cpuAccessDisallowed && isLockable && - !productHelper.isDcFlushMitigated(); + !isGpuCopyRequiredForDcFlushMitigation; if (debugManager.flags.CopyHostPtrOnCpu.get() != -1) { copyOnCpuAllowed = debugManager.flags.CopyHostPtrOnCpu.get() == 1; @@ -223,7 +226,7 @@ bool inline copyHostPointer(Buffer *buffer, } else { auto blitMemoryToAllocationResult = BlitOperationResult::unsupported; - if (productHelper.isBlitterFullySupported(hwInfo) && (isLocalMemory || productHelper.isDcFlushMitigated())) { + if (productHelper.isBlitterFullySupported(hwInfo) && (isLocalMemory || isGpuCopyRequiredForDcFlushMitigation)) { blitMemoryToAllocationResult = BlitHelperFunctions::blitMemoryToAllocation(device, memory, buffer->getOffset(), hostPtr, {size, 1, 1}); } diff --git a/opencl/test/unit_test/aub_tests/command_stream/copy_engine_aub_tests_xehp_and_later.h b/opencl/test/unit_test/aub_tests/command_stream/copy_engine_aub_tests_xehp_and_later.h index ad622a1247..e33c8b9604 100644 --- a/opencl/test/unit_test/aub_tests/command_stream/copy_engine_aub_tests_xehp_and_later.h +++ b/opencl/test/unit_test/aub_tests/command_stream/copy_engine_aub_tests_xehp_and_later.h @@ -403,7 +403,7 @@ void CopyEngineXeHPAndLater::givenSrcCompressedBuffer template template void CopyEngineXeHPAndLater::givenCompressedBufferWhenAuxTranslationCalledThenResolveAndCompressImpl() { - if (this->context->getDevice(0u)->areSharedSystemAllocationsAllowed() || !compressionSupported()) { + if (this->context->getDevice(0u)->areSharedSystemAllocationsAllowed() || !compressionSupported() || this->context->getDevice(0u)->getProductHelper().isDcFlushMitigated()) { // no support for scenarios where stateless is mixed with blitter compression GTEST_SKIP(); } diff --git a/opencl/test/unit_test/context/driver_diagnostics_enqueue_tests.cpp b/opencl/test/unit_test/context/driver_diagnostics_enqueue_tests.cpp index bbc25fa895..aacd398f8b 100644 --- a/opencl/test/unit_test/context/driver_diagnostics_enqueue_tests.cpp +++ b/opencl/test/unit_test/context/driver_diagnostics_enqueue_tests.cpp @@ -469,7 +469,7 @@ TEST_P(PerformanceHintEnqueueMapTest, GivenZeroCopyFlagWhenEnqueueMapBufferIsCal EXPECT_EQ(zeroCopyBuffer, containsHint(expectedHint, userData)); snprintf(expectedHint, DriverDiagnostics::maxHintStringSize, DriverDiagnostics::hintFormat[CL_ENQUEUE_MAP_BUFFER_REQUIRES_COPY_DATA], static_cast(buffer)); - EXPECT_EQ(!zeroCopyBuffer, containsHint(expectedHint, userData)); + EXPECT_EQ(!zeroCopyBuffer && !pCmdQ->getDevice().getProductHelper().isDcFlushMitigated(), containsHint(expectedHint, userData)); alignedFree(address); delete buffer; @@ -499,7 +499,7 @@ TEST_P(PerformanceHintEnqueueMapTest, GivenZeroCopyFlagAndBlockingEventWhenEnque EXPECT_EQ(zeroCopyBuffer, containsHint(expectedHint, userData)); snprintf(expectedHint, DriverDiagnostics::maxHintStringSize, DriverDiagnostics::hintFormat[CL_ENQUEUE_MAP_BUFFER_REQUIRES_COPY_DATA], static_cast(buffer.get())); - EXPECT_EQ(!zeroCopyBuffer, containsHint(expectedHint, userData)); + EXPECT_EQ(!zeroCopyBuffer && !pCmdQ->getDevice().getProductHelper().isDcFlushMitigated(), containsHint(expectedHint, userData)); alignedFree(address); } @@ -597,7 +597,7 @@ TEST_P(PerformanceHintEnqueueMapTest, GivenZeroCopyFlagWhenEnqueueUnmapIsCalling pCmdQ->enqueueUnmapMemObject(buffer, mapPtr, 0, nullptr, nullptr); snprintf(expectedHint, DriverDiagnostics::maxHintStringSize, DriverDiagnostics::hintFormat[CL_ENQUEUE_UNMAP_MEM_OBJ_REQUIRES_COPY_DATA], mapPtr, static_cast(buffer)); - EXPECT_EQ(!zeroCopyBuffer, containsHint(expectedHint, userData)); + EXPECT_EQ(!zeroCopyBuffer && !pCmdQ->getDevice().getProductHelper().isDcFlushMitigated(), containsHint(expectedHint, userData)); snprintf(expectedHint, DriverDiagnostics::maxHintStringSize, DriverDiagnostics::hintFormat[CL_ENQUEUE_UNMAP_MEM_OBJ_DOESNT_REQUIRE_COPY_DATA], mapPtr); EXPECT_EQ(zeroCopyBuffer, containsHint(expectedHint, userData)); @@ -629,7 +629,7 @@ TEST_P(PerformanceHintEnqueueMapTest, GivenZeroCopyAndBlockedEventFlagWhenEnqueu EXPECT_FALSE(pCmdQ->isQueueBlocked()); snprintf(expectedHint, DriverDiagnostics::maxHintStringSize, DriverDiagnostics::hintFormat[CL_ENQUEUE_UNMAP_MEM_OBJ_REQUIRES_COPY_DATA], mapPtr, static_cast(buffer.get())); - EXPECT_EQ(!zeroCopyBuffer, containsHint(expectedHint, userData)); + EXPECT_EQ(!zeroCopyBuffer && !pCmdQ->getDevice().getProductHelper().isDcFlushMitigated(), containsHint(expectedHint, userData)); snprintf(expectedHint, DriverDiagnostics::maxHintStringSize, DriverDiagnostics::hintFormat[CL_ENQUEUE_UNMAP_MEM_OBJ_DOESNT_REQUIRE_COPY_DATA], mapPtr); EXPECT_EQ(zeroCopyBuffer, containsHint(expectedHint, userData)); diff --git a/opencl/test/unit_test/libult/command_queue_ult.cpp b/opencl/test/unit_test/libult/command_queue_ult.cpp index 0dfa31d9be..9ca968afc1 100644 --- a/opencl/test/unit_test/libult/command_queue_ult.cpp +++ b/opencl/test/unit_test/libult/command_queue_ult.cpp @@ -19,4 +19,8 @@ bool CommandQueue::isTimestampWaitEnabled() { return ultHwConfig.useWaitForTimestamps; } +bool checkIsGpuCopyRequiredForDcFlushMitigation(AllocationType type) { + return false; +} + } // namespace NEO \ No newline at end of file diff --git a/opencl/test/unit_test/mem_obj/buffer_tests.cpp b/opencl/test/unit_test/mem_obj/buffer_tests.cpp index 6b213286f7..a872de6cbf 100644 --- a/opencl/test/unit_test/mem_obj/buffer_tests.cpp +++ b/opencl/test/unit_test/mem_obj/buffer_tests.cpp @@ -1893,6 +1893,10 @@ HWTEST_F(BufferCreateTests, givenClMemCopyHostPointerPassedToBufferCreateWhenAll auto memoryManager = new MockMemoryManager(true, *executionEnvironment); executionEnvironment->memoryManager.reset(memoryManager); + if (executionEnvironment->rootDeviceEnvironments[0]->getProductHelper().isDcFlushMitigated()) { + debugManager.flags.AllowDcFlush.set(1); + } + MockClDevice device(new MockDevice(executionEnvironment, mockRootDeviceIndex)); ASSERT_TRUE(device.createEngines()); DeviceFactory::prepareDeviceEnvironments(*device.getExecutionEnvironment()); diff --git a/opencl/test/unit_test/mem_obj/buffer_tests_pvc_and_later.cpp b/opencl/test/unit_test/mem_obj/buffer_tests_pvc_and_later.cpp index 458fc0013d..91d3d0ceb1 100644 --- a/opencl/test/unit_test/mem_obj/buffer_tests_pvc_and_later.cpp +++ b/opencl/test/unit_test/mem_obj/buffer_tests_pvc_and_later.cpp @@ -115,6 +115,10 @@ HWTEST2_F(PvcAndLaterBufferTests, givenCompressedBufferInSystemAndBlitterSupport auto pDevice = deviceFactory.rootDevices[0]; auto pMockContext = std::make_unique(pDevice); + if (pDevice->getProductHelper().isDcFlushMitigated()) { + debugManager.flags.AllowDcFlush.set(1); + } + static_cast(pDevice->getExecutionEnvironment()->memoryManager.get())->enable64kbpages[0] = true; static_cast(pDevice->getExecutionEnvironment()->memoryManager.get())->localMemorySupported[0] = false; diff --git a/opencl/test/unit_test/mem_obj/windows/buffer_windows_tests.cpp b/opencl/test/unit_test/mem_obj/windows/buffer_windows_tests.cpp index 2cd5461d87..8b750b93bb 100644 --- a/opencl/test/unit_test/mem_obj/windows/buffer_windows_tests.cpp +++ b/opencl/test/unit_test/mem_obj/windows/buffer_windows_tests.cpp @@ -152,6 +152,10 @@ HWTEST_F(BufferCreateWindowsTests, givenClMemCopyHostPointerPassedToBufferCreate auto memoryManager = new MockMemoryManager(true, *executionEnvironment); executionEnvironment->memoryManager.reset(memoryManager); + if (executionEnvironment->rootDeviceEnvironments[0]->getProductHelper().isDcFlushMitigated()) { + debugManager.flags.AllowDcFlush.set(1); + } + MockClDevice device(new MockDevice(executionEnvironment, mockRootDeviceIndex)); ASSERT_TRUE(device.createEngines()); DeviceFactory::prepareDeviceEnvironments(*device.getExecutionEnvironment()); diff --git a/shared/source/os_interface/product_helper.h b/shared/source/os_interface/product_helper.h index e9ba9597aa..b2c79347da 100644 --- a/shared/source/os_interface/product_helper.h +++ b/shared/source/os_interface/product_helper.h @@ -134,6 +134,7 @@ class ProductHelper { virtual bool isTile64With3DSurfaceOnBCSSupported(const HardwareInfo &hwInfo) const = 0; virtual bool isDcFlushAllowed() const = 0; virtual bool isDcFlushMitigated() const = 0; + virtual bool mitigateDcFlush() const = 0; virtual bool overridePatAndUsageForDcFlushMitigation(AllocationType allocationType) const = 0; virtual bool overrideCacheableForDcFlushMitigation(AllocationType allocationType) const = 0; virtual uint32_t computeMaxNeededSubSliceSpace(const HardwareInfo &hwInfo) const = 0; diff --git a/shared/source/os_interface/product_helper.inl b/shared/source/os_interface/product_helper.inl index 92c381779e..6435fae1b5 100644 --- a/shared/source/os_interface/product_helper.inl +++ b/shared/source/os_interface/product_helper.inl @@ -394,7 +394,7 @@ bool ProductHelperHw::isDisableScratchPagesSupported() const { template bool ProductHelperHw::isDcFlushAllowed() const { using GfxProduct = typename HwMapper::GfxProduct; - bool dcFlushAllowed = GfxProduct::isDcFlushAllowed; + bool dcFlushAllowed = GfxProduct::isDcFlushAllowed && !this->mitigateDcFlush(); if (debugManager.flags.AllowDcFlush.get() != -1) { dcFlushAllowed = debugManager.flags.AllowDcFlush.get(); @@ -403,6 +403,11 @@ bool ProductHelperHw::isDcFlushAllowed() const { return dcFlushAllowed; } +template +bool ProductHelperHw::mitigateDcFlush() const { + return false; +} + template bool ProductHelperHw::isDcFlushMitigated() const { using GfxProduct = typename HwMapper::GfxProduct; diff --git a/shared/source/os_interface/product_helper_hw.h b/shared/source/os_interface/product_helper_hw.h index 0e8ba8ae26..99eb5d1f25 100644 --- a/shared/source/os_interface/product_helper_hw.h +++ b/shared/source/os_interface/product_helper_hw.h @@ -76,6 +76,7 @@ class ProductHelperHw : public ProductHelper { bool isTile64With3DSurfaceOnBCSSupported(const HardwareInfo &hwInfo) const override; bool isDcFlushAllowed() const override; bool isDcFlushMitigated() const override; + bool mitigateDcFlush() const override; bool overridePatAndUsageForDcFlushMitigation(AllocationType allocationType) const override; bool overrideCacheableForDcFlushMitigation(AllocationType allocationType) const override; uint32_t computeMaxNeededSubSliceSpace(const HardwareInfo &hwInfo) const override; diff --git a/shared/source/xe2_hpg_core/windows/product_helper_lnl.cpp b/shared/source/xe2_hpg_core/windows/product_helper_lnl.cpp index c332e8919b..b9675e76f4 100644 --- a/shared/source/xe2_hpg_core/windows/product_helper_lnl.cpp +++ b/shared/source/xe2_hpg_core/windows/product_helper_lnl.cpp @@ -40,6 +40,11 @@ bool ProductHelperHw::isDirectSubmissionSupported(ReleaseHelper *rel return true; } +template <> +bool ProductHelperHw::mitigateDcFlush() const { + return true; +} + template <> bool ProductHelperHw::restartDirectSubmissionForHostptrFree() const { return true; diff --git a/shared/test/common/mocks/mock_product_helper.cpp b/shared/test/common/mocks/mock_product_helper.cpp index 869e2216cc..41c024dfe5 100644 --- a/shared/test/common/mocks/mock_product_helper.cpp +++ b/shared/test/common/mocks/mock_product_helper.cpp @@ -281,6 +281,11 @@ bool ProductHelperHw::isDcFlushMitigated() const { return false; } +template <> +bool ProductHelperHw::mitigateDcFlush() const { + return false; +} + template <> bool ProductHelperHw::overridePatAndUsageForDcFlushMitigation(AllocationType allocationType) const { return false; diff --git a/shared/test/unit_test/gmm_helper/gmm_helper_tests.cpp b/shared/test/unit_test/gmm_helper/gmm_helper_tests.cpp index bc61bfa4b6..b44da1033b 100644 --- a/shared/test/unit_test/gmm_helper/gmm_helper_tests.cpp +++ b/shared/test/unit_test/gmm_helper/gmm_helper_tests.cpp @@ -685,6 +685,11 @@ TEST(GmmTest, givenHwInfoWhenDeviceIsCreatedThenSetThisHwInfoToGmmHelper) { TEST(GmmTest, givenAllocationTypeWhenGettingUsageTypeThenReturnCorrectValue) { MockExecutionEnvironment mockExecutionEnvironment{}; const auto &productHelper = mockExecutionEnvironment.rootDeviceEnvironments[0]->getHelper(); + + if (productHelper.isDcFlushMitigated()) { + GTEST_SKIP(); + } + for (uint32_t i = 0; i < static_cast(AllocationType::count); i++) { auto allocationType = static_cast(i); auto uncachedGmmUsageType = productHelper.isNewCoherencyModelSupported() ? GMM_RESOURCE_USAGE_OCL_BUFFER_CSR_UC : GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED; @@ -883,6 +888,10 @@ TEST(GmmTest, givenUncachedDebugFlagMaskSetWhenAskingForUsageTypeThenReturnUncac MockExecutionEnvironment mockExecutionEnvironment{}; const auto &productHelper = mockExecutionEnvironment.rootDeviceEnvironments[0]->getHelper(); + if (productHelper.isDcFlushMitigated()) { + GTEST_SKIP(); + } + constexpr int64_t bufferMask = 1 << (static_cast(AllocationType::buffer) - 1); constexpr int64_t imageMask = 1 << (static_cast(AllocationType::image) - 1); diff --git a/shared/test/unit_test/os_interface/product_helper_tests.cpp b/shared/test/unit_test/os_interface/product_helper_tests.cpp index 1aa29c90ab..04e926a2a8 100644 --- a/shared/test/unit_test/os_interface/product_helper_tests.cpp +++ b/shared/test/unit_test/os_interface/product_helper_tests.cpp @@ -312,9 +312,11 @@ HWTEST_F(ProductHelperTest, givenVariousValuesWhenGettingAubStreamSteppingFromHw HWTEST_F(ProductHelperTest, givenDcFlushMitigationWhenOverridePatAndUsageForDcFlushMitigationThenReturnCorrectValue) { DebugManagerStateRestore restorer; - for (auto i = 0; i < static_cast(AllocationType::count); ++i) { - auto allocationType = static_cast(i); - EXPECT_FALSE(productHelper->overridePatAndUsageForDcFlushMitigation(allocationType)); + if (!productHelper->isDcFlushMitigated()) { + for (auto i = 0; i < static_cast(AllocationType::count); ++i) { + auto allocationType = static_cast(i); + EXPECT_FALSE(productHelper->overridePatAndUsageForDcFlushMitigation(allocationType)); + } } debugManager.flags.AllowDcFlush.set(0); for (auto i = 0; i < static_cast(AllocationType::count); ++i) { diff --git a/shared/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp b/shared/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp index bf398d693c..ade4155c07 100644 --- a/shared/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp +++ b/shared/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp @@ -2899,7 +2899,11 @@ HWTEST_F(WddmMemoryManagerTest, givenInternalHeapOrLinearStreamTypeWhenAllocatin ASSERT_NE(nullptr, allocation); - EXPECT_TRUE(allocation->getDefaultGmm()->resourceParams.Usage == GMM_RESOURCE_USAGE_TYPE::GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER); + if (rootDeviceEnvironment->getProductHelper().isDcFlushMitigated()) { + EXPECT_TRUE(allocation->getDefaultGmm()->resourceParams.Usage == GMM_RESOURCE_USAGE_TYPE::GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER_CACHELINE_MISALIGNED); + } else { + EXPECT_TRUE(allocation->getDefaultGmm()->resourceParams.Usage == GMM_RESOURCE_USAGE_TYPE::GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER); + } memoryManager->freeGraphicsMemory(allocation); } @@ -2911,7 +2915,11 @@ HWTEST_F(WddmMemoryManagerTest, givenInternalHeapOrLinearStreamTypeWhenAllocatin ASSERT_NE(nullptr, allocation); - EXPECT_TRUE(allocation->getDefaultGmm()->resourceParams.Usage == GMM_RESOURCE_USAGE_TYPE::GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER); + if (rootDeviceEnvironment->getProductHelper().isDcFlushMitigated()) { + EXPECT_TRUE(allocation->getDefaultGmm()->resourceParams.Usage == GMM_RESOURCE_USAGE_TYPE::GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER_CACHELINE_MISALIGNED); + } else { + EXPECT_TRUE(allocation->getDefaultGmm()->resourceParams.Usage == GMM_RESOURCE_USAGE_TYPE::GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER); + } memoryManager->freeGraphicsMemory(allocation); } diff --git a/shared/test/unit_test/xe2_hpg_core/lnl/gfx_core_helper_tests_lnl.cpp b/shared/test/unit_test/xe2_hpg_core/lnl/gfx_core_helper_tests_lnl.cpp index 42a019e1d0..7f4c23e9bf 100644 --- a/shared/test/unit_test/xe2_hpg_core/lnl/gfx_core_helper_tests_lnl.cpp +++ b/shared/test/unit_test/xe2_hpg_core/lnl/gfx_core_helper_tests_lnl.cpp @@ -29,5 +29,5 @@ LNLTEST_F(GfxCoreHelperTestsLnl, givenCommandBufferAllocationTypeWhenGetAllocati } LNLTEST_F(GfxCoreHelperTestsLnl, WhenAskingForDcFlushThenReturnTrue) { - EXPECT_TRUE(MemorySynchronizationCommands::getDcFlushEnable(true, this->pDevice->getRootDeviceEnvironment())); + EXPECT_NE(MemorySynchronizationCommands::getDcFlushEnable(true, this->pDevice->getRootDeviceEnvironment()), this->pDevice->getRootDeviceEnvironment().getProductHelper().isDcFlushMitigated()); } diff --git a/shared/test/unit_test/xe2_hpg_core/lnl/product_helper_tests_lnl.cpp b/shared/test/unit_test/xe2_hpg_core/lnl/product_helper_tests_lnl.cpp index 4746adc839..c82bdfa6f2 100644 --- a/shared/test/unit_test/xe2_hpg_core/lnl/product_helper_tests_lnl.cpp +++ b/shared/test/unit_test/xe2_hpg_core/lnl/product_helper_tests_lnl.cpp @@ -89,6 +89,7 @@ LNLTEST_F(LnlProductHelper, givenCompilerProductHelperWhenGetDefaultHwIpVersionT LNLTEST_F(LnlProductHelper, whenCheckPreferredAllocationMethodThenAllocateByKmdIsReturnedExceptTagBufferAndTimestampPacketTagBuffer) { DebugManagerStateRestore restorer; + debugManager.flags.AllowDcFlush.set(1); for (auto i = 0; i < static_cast(AllocationType::count); ++i) { auto allocationType = static_cast(i); auto preferredAllocationMethod = productHelper->getPreferredAllocationMethod(allocationType); @@ -126,11 +127,13 @@ LNLTEST_F(LnlProductHelper, givenProductHelperWhenCheckOverrideAllocationCacheab } LNLTEST_F(LnlProductHelper, givenExternalHostPtrWhenMitigateDcFlushThenOverrideCacheable) { + DebugManagerStateRestore restorer; + debugManager.flags.AllowDcFlush.set(1); + AllocationData allocationData{}; allocationData.type = AllocationType::externalHostPtr; EXPECT_FALSE(productHelper->overrideAllocationCacheable(allocationData)); - DebugManagerStateRestore restorer; debugManager.flags.AllowDcFlush.set(0); for (auto i = 0; i < static_cast(AllocationType::count); ++i) { diff --git a/shared/test/unit_test/xe2_hpg_core/lnl/windows/product_helper_tests_lnl_windows.cpp b/shared/test/unit_test/xe2_hpg_core/lnl/windows/product_helper_tests_lnl_windows.cpp index 91d5c16122..2792e1e42a 100644 --- a/shared/test/unit_test/xe2_hpg_core/lnl/windows/product_helper_tests_lnl_windows.cpp +++ b/shared/test/unit_test/xe2_hpg_core/lnl/windows/product_helper_tests_lnl_windows.cpp @@ -23,8 +23,14 @@ LNLTEST_F(LnlProductHelperWindows, givenProductHelperWhenCheckDirectSubmissionSu EXPECT_TRUE(productHelper->isDirectSubmissionSupported(releaseHelper)); } +LNLTEST_F(LnlProductHelperWindows, givenProductHelperWhenDcFlushMitigationThenReturnTrue) { + EXPECT_TRUE(productHelper->mitigateDcFlush()); + EXPECT_TRUE(productHelper->isDcFlushMitigated()); +} + LNLTEST_F(LnlProductHelperWindows, givenProductHelperWhenOverridePatIndexCalledThenCorrectValueIsReturned) { DebugManagerStateRestore restorer; + debugManager.flags.AllowDcFlush.set(1); uint64_t expectedPatIndex = 6u; EXPECT_EQ(expectedPatIndex, productHelper->overridePatIndex(0u, expectedPatIndex, AllocationType::bufferHostMemory));