From 772dec81e4c189b667faec79262775d4289b9537 Mon Sep 17 00:00:00 2001 From: Kamil Kopryk Date: Tue, 20 Dec 2022 02:54:11 +0000 Subject: [PATCH] Don't use global productHelper in isBankOverrideRequired function Related-To: NEO-6853 Signed-off-by: Kamil Kopryk --- .../xe_hp_core/xehp/hw_helper_tests_xehp.inl | 15 ++++++++------- shared/source/helpers/hw_helper.h | 4 ++-- shared/source/helpers/hw_helper_base.inl | 2 +- shared/source/os_interface/linux/memory_info.cpp | 16 ++++++++++------ shared/source/os_interface/linux/memory_info.h | 2 +- .../source/xe_hp_core/hw_helper_xe_hp_core.cpp | 4 ++-- .../source/xe_hpg_core/hw_helper_xe_hpg_core.cpp | 2 +- .../test/unit_test/helpers/hw_helper_tests.cpp | 5 +++-- .../linux/drm_memory_info_prelim_tests.cpp | 16 +++++++++------- .../os_interface/linux/drm_memory_info_tests.cpp | 6 ++++-- 10 files changed, 41 insertions(+), 31 deletions(-) diff --git a/opencl/test/unit_test/xe_hp_core/xehp/hw_helper_tests_xehp.inl b/opencl/test/unit_test/xe_hp_core/xehp/hw_helper_tests_xehp.inl index 1e3130b89c..f31cbb1d0a 100644 --- a/opencl/test/unit_test/xe_hp_core/xehp/hw_helper_tests_xehp.inl +++ b/opencl/test/unit_test/xe_hp_core/xehp/hw_helper_tests_xehp.inl @@ -11,37 +11,38 @@ using GfxCoreHelperTestsXeHP = GfxCoreHelperTest; XEHPTEST_F(GfxCoreHelperTestsXeHP, givenXEHPWhenIsBankOverrideRequiredIsCalledThenCorrectValueIsReturned) { DebugManagerStateRestore restore; - auto &helper = GfxCoreHelper::get(renderCoreFamily); - const auto &productHelper = *ProductHelper::get(productFamily); + auto &gfxCoreHelper = getHelper(); + auto &productHelper = getHelper(); + auto hwInfo = *defaultHwInfo; hwInfo.gtSystemInfo.MultiTileArchInfo.IsValid = true; { hwInfo.gtSystemInfo.MultiTileArchInfo.TileCount = 4; hwInfo.platform.usRevId = productHelper.getHwRevIdFromStepping(REVISION_A0, hwInfo); - EXPECT_TRUE(helper.isBankOverrideRequired(hwInfo)); + EXPECT_TRUE(gfxCoreHelper.isBankOverrideRequired(hwInfo, productHelper)); } { hwInfo.gtSystemInfo.MultiTileArchInfo.TileCount = 4; hwInfo.platform.usRevId = productHelper.getHwRevIdFromStepping(REVISION_B, hwInfo); - EXPECT_FALSE(helper.isBankOverrideRequired(hwInfo)); + EXPECT_FALSE(gfxCoreHelper.isBankOverrideRequired(hwInfo, productHelper)); } { hwInfo.gtSystemInfo.MultiTileArchInfo.TileCount = 2; hwInfo.platform.usRevId = productHelper.getHwRevIdFromStepping(REVISION_A0, hwInfo); - EXPECT_FALSE(helper.isBankOverrideRequired(hwInfo)); + EXPECT_FALSE(gfxCoreHelper.isBankOverrideRequired(hwInfo, productHelper)); } { DebugManager.flags.ForceMemoryBankIndexOverride.set(1); hwInfo.gtSystemInfo.MultiTileArchInfo.TileCount = 1; hwInfo.platform.usRevId = productHelper.getHwRevIdFromStepping(REVISION_A0, hwInfo); - EXPECT_TRUE(helper.isBankOverrideRequired(hwInfo)); + EXPECT_TRUE(gfxCoreHelper.isBankOverrideRequired(hwInfo, productHelper)); } { DebugManager.flags.ForceMemoryBankIndexOverride.set(0); hwInfo.gtSystemInfo.MultiTileArchInfo.TileCount = 4; hwInfo.platform.usRevId = productHelper.getHwRevIdFromStepping(REVISION_A0, hwInfo); - EXPECT_FALSE(helper.isBankOverrideRequired(hwInfo)); + EXPECT_FALSE(gfxCoreHelper.isBankOverrideRequired(hwInfo, productHelper)); } } diff --git a/shared/source/helpers/hw_helper.h b/shared/source/helpers/hw_helper.h index a5e879066d..5aa81a9265 100644 --- a/shared/source/helpers/hw_helper.h +++ b/shared/source/helpers/hw_helper.h @@ -103,7 +103,7 @@ class GfxCoreHelper { virtual uint64_t getGpuTimeStampInNS(uint64_t timeStamp, double frequency) const = 0; virtual uint32_t getBindlessSurfaceExtendedMessageDescriptorValue(uint32_t surfStateOffset) const = 0; virtual void setExtraAllocationData(AllocationData &allocationData, const AllocationProperties &properties, const HardwareInfo &hwInfo) const = 0; - virtual bool isBankOverrideRequired(const HardwareInfo &hwInfo) const = 0; + virtual bool isBankOverrideRequired(const HardwareInfo &hwInfo, const ProductHelper &productHelper) const = 0; virtual uint32_t getGlobalTimeStampBits() const = 0; virtual int32_t getDefaultThreadArbitrationPolicy() const = 0; virtual bool useOnlyGlobalTimestamps() const = 0; @@ -297,7 +297,7 @@ class GfxCoreHelperHw : public GfxCoreHelper { void setExtraAllocationData(AllocationData &allocationData, const AllocationProperties &properties, const HardwareInfo &hwInfo) const override; - bool isBankOverrideRequired(const HardwareInfo &hwInfo) const override; + bool isBankOverrideRequired(const HardwareInfo &hwInfo, const ProductHelper &productHelper) const override; int32_t getDefaultThreadArbitrationPolicy() const override; diff --git a/shared/source/helpers/hw_helper_base.inl b/shared/source/helpers/hw_helper_base.inl index ccf4a52a83..4195d1da7c 100644 --- a/shared/source/helpers/hw_helper_base.inl +++ b/shared/source/helpers/hw_helper_base.inl @@ -559,7 +559,7 @@ template void GfxCoreHelperHw::setExtraAllocationData(AllocationData &allocationData, const AllocationProperties &properties, const HardwareInfo &hwInfo) const {} template -bool GfxCoreHelperHw::isBankOverrideRequired(const HardwareInfo &hwInfo) const { +bool GfxCoreHelperHw::isBankOverrideRequired(const HardwareInfo &hwInfo, const ProductHelper &productHelper) const { return false; } diff --git a/shared/source/os_interface/linux/memory_info.cpp b/shared/source/os_interface/linux/memory_info.cpp index 8f512efadc..00801fa528 100644 --- a/shared/source/os_interface/linux/memory_info.cpp +++ b/shared/source/os_interface/linux/memory_info.cpp @@ -60,10 +60,13 @@ uint32_t MemoryInfo::createGemExt(const MemRegionsVec &memClassInstances, size_t return this->drm.getIoctlHelper()->createGemExt(memClassInstances, allocSize, handle, vmId, pairHandle); } -uint32_t MemoryInfo::getTileIndex(uint32_t memoryBank, const HardwareInfo &hwInfo) { - auto &gfxCoreHelper = GfxCoreHelper::get(hwInfo.platform.eRenderCoreFamily); +uint32_t MemoryInfo::getTileIndex(uint32_t memoryBank) { + auto &hwInfo = *this->drm.getRootDeviceEnvironment().getHardwareInfo(); + auto &gfxCoreHelper = this->drm.getRootDeviceEnvironment().getHelper(); + auto &productHelper = this->drm.getRootDeviceEnvironment().getHelper(); + auto tileIndex = Math::log2(memoryBank); - tileIndex = gfxCoreHelper.isBankOverrideRequired(hwInfo) ? 0 : tileIndex; + tileIndex = gfxCoreHelper.isBankOverrideRequired(hwInfo, productHelper) ? 0 : tileIndex; if (DebugManager.flags.OverrideDrmRegion.get() != -1) { tileIndex = DebugManager.flags.OverrideDrmRegion.get(); } @@ -71,12 +74,13 @@ uint32_t MemoryInfo::getTileIndex(uint32_t memoryBank, const HardwareInfo &hwInf } MemoryClassInstance MemoryInfo::getMemoryRegionClassAndInstance(uint32_t memoryBank, const HardwareInfo &hwInfo) { - auto &gfxCoreHelper = GfxCoreHelper::get(hwInfo.platform.eRenderCoreFamily); + + auto &gfxCoreHelper = this->drm.getRootDeviceEnvironment().getHelper(); if (!gfxCoreHelper.getEnableLocalMemory(hwInfo) || memoryBank == 0) { return systemMemoryRegion.region; } - auto index = getTileIndex(memoryBank, hwInfo); + auto index = getTileIndex(memoryBank); UNRECOVERABLE_IF(index >= localMemoryRegions.size()); @@ -115,7 +119,7 @@ uint32_t MemoryInfo::createGemExtWithSingleRegion(uint32_t memoryBanks, size_t a std::optional vmId; if (!this->drm.isPerContextVMRequired()) { if (memoryBanks != 0 && DebugManager.flags.EnablePrivateBO.get()) { - auto tileIndex = getTileIndex(memoryBanks, *pHwInfo); + auto tileIndex = getTileIndex(memoryBanks); vmId = this->drm.getVirtualMemoryAddressSpace(tileIndex); } } diff --git a/shared/source/os_interface/linux/memory_info.h b/shared/source/os_interface/linux/memory_info.h index b6904484bf..6d93d7dbfa 100644 --- a/shared/source/os_interface/linux/memory_info.h +++ b/shared/source/os_interface/linux/memory_info.h @@ -34,7 +34,7 @@ class MemoryInfo { void printRegionSizes(); - uint32_t getTileIndex(uint32_t memoryBank, const HardwareInfo &hwInfo); + uint32_t getTileIndex(uint32_t memoryBank); MOCKABLE_VIRTUAL uint32_t createGemExtWithSingleRegion(uint32_t memoryBanks, size_t allocSize, uint32_t &handle, int32_t pairHandle); MOCKABLE_VIRTUAL uint32_t createGemExtWithMultipleRegions(uint32_t memoryBanks, size_t allocSize, uint32_t &handle); diff --git a/shared/source/xe_hp_core/hw_helper_xe_hp_core.cpp b/shared/source/xe_hp_core/hw_helper_xe_hp_core.cpp index 04953d6bdf..9ab116cc13 100644 --- a/shared/source/xe_hp_core/hw_helper_xe_hp_core.cpp +++ b/shared/source/xe_hp_core/hw_helper_xe_hp_core.cpp @@ -59,10 +59,10 @@ void GfxCoreHelperHw::setL1CachePolicy(bool useL1Cache, typename Family: } template <> -bool GfxCoreHelperHw::isBankOverrideRequired(const HardwareInfo &hwInfo) const { +bool GfxCoreHelperHw::isBankOverrideRequired(const HardwareInfo &hwInfo, const ProductHelper &productHelper) const { bool forceOverrideMemoryBankIndex = (GfxCoreHelper::getSubDevicesCount(&hwInfo) == 4 && - isWorkaroundRequired(REVISION_A0, REVISION_B, hwInfo)); + GfxCoreHelper::isWorkaroundRequired(REVISION_A0, REVISION_B, hwInfo, productHelper)); if (DebugManager.flags.ForceMemoryBankIndexOverride.get() != -1) { forceOverrideMemoryBankIndex = static_cast(DebugManager.flags.ForceMemoryBankIndexOverride.get()); diff --git a/shared/source/xe_hpg_core/hw_helper_xe_hpg_core.cpp b/shared/source/xe_hpg_core/hw_helper_xe_hpg_core.cpp index 26671363d8..dee03813c7 100644 --- a/shared/source/xe_hpg_core/hw_helper_xe_hpg_core.cpp +++ b/shared/source/xe_hpg_core/hw_helper_xe_hpg_core.cpp @@ -68,7 +68,7 @@ void GfxCoreHelperHw::setL1CachePolicy(bool useL1Cache, typename Family: } template <> -bool GfxCoreHelperHw::isBankOverrideRequired(const HardwareInfo &hwInfo) const { +bool GfxCoreHelperHw::isBankOverrideRequired(const HardwareInfo &hwInfo, const ProductHelper &productHelper) const { bool forceOverrideMemoryBankIndex = false; diff --git a/shared/test/unit_test/helpers/hw_helper_tests.cpp b/shared/test/unit_test/helpers/hw_helper_tests.cpp index 11964bfdaf..431d9bcc1a 100644 --- a/shared/test/unit_test/helpers/hw_helper_tests.cpp +++ b/shared/test/unit_test/helpers/hw_helper_tests.cpp @@ -868,8 +868,9 @@ HWTEST_F(GfxCoreHelperTest, givenDebugFlagWhenCheckingIfBufferIsSuitableForCompr } HWTEST_F(GfxCoreHelperTest, WhenIsBankOverrideRequiredIsCalledThenFalseIsReturned) { - auto &gfxCoreHelper = GfxCoreHelper::get(hardwareInfo.platform.eRenderCoreFamily); - EXPECT_FALSE(gfxCoreHelper.isBankOverrideRequired(hardwareInfo)); + auto &gfxCoreHelper = getHelper(); + auto &productHelper = getHelper(); + EXPECT_FALSE(gfxCoreHelper.isBankOverrideRequired(hardwareInfo, productHelper)); } HWCMDTEST_F(IGFX_GEN8_CORE, GfxCoreHelperTest, GivenBarrierEncodingWhenCallingGetBarriersCountFromHasBarrierThenNumberOfBarriersIsReturned) { diff --git a/shared/test/unit_test/os_interface/linux/drm_memory_info_prelim_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_memory_info_prelim_tests.cpp index 8a7d1c9e28..190e2057ed 100644 --- a/shared/test/unit_test/os_interface/linux/drm_memory_info_prelim_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_memory_info_prelim_tests.cpp @@ -278,24 +278,24 @@ TEST_F(MultiTileMemoryInfoPrelimTest, givenMemoryInfoWithRegionsWhenGettingMemor regionInfo[2].probedSize = 32 * GB; setupMemoryInfo(regionInfo, 2); - //route to tile1 banks + // route to tile1 banks DebugManager.flags.OverrideDrmRegion.set(1); - //system memory not affected + // system memory not affected auto regionClassAndInstance = memoryInfo->getMemoryRegionClassAndInstance(MemoryBanks::MainBank, *pHwInfo); EXPECT_EQ(regionInfo[0].region.memoryClass, regionClassAndInstance.memoryClass); EXPECT_EQ(regionInfo[0].region.memoryInstance, regionClassAndInstance.memoryInstance); auto regionSize = memoryInfo->getMemoryRegionSize(MemoryBanks::MainBank); EXPECT_EQ(8 * GB, regionSize); - //overrite route to tile 1 + // overrite route to tile 1 regionClassAndInstance = memoryInfo->getMemoryRegionClassAndInstance(MemoryBanks::getBankForLocalMemory(0), *pHwInfo); EXPECT_EQ(regionInfo[2].region.memoryClass, regionClassAndInstance.memoryClass); EXPECT_EQ(regionInfo[2].region.memoryInstance, regionClassAndInstance.memoryInstance); regionSize = memoryInfo->getMemoryRegionSize(MemoryBanks::getBankForLocalMemory(0)); EXPECT_EQ(16 * GB, regionSize); - //route to tile 0 banks + // route to tile 0 banks DebugManager.flags.OverrideDrmRegion.set(0); regionClassAndInstance = memoryInfo->getMemoryRegionClassAndInstance(MemoryBanks::getBankForLocalMemory(1), *pHwInfo); @@ -308,15 +308,17 @@ TEST_F(MultiTileMemoryInfoPrelimTest, givenMemoryInfoWithRegionsWhenGettingMemor DebugManager.flags.OverrideDrmRegion.set(-1); DebugManager.flags.ForceMemoryBankIndexOverride.set(1); - auto &helper = GfxCoreHelper::get(pHwInfo->platform.eRenderCoreFamily); + auto &gfxCoreHelper = executionEnvironment->rootDeviceEnvironments[0]->getHelper(); + auto &productHelper = executionEnvironment->rootDeviceEnvironments[0]->getHelper(); + regionClassAndInstance = memoryInfo->getMemoryRegionClassAndInstance(MemoryBanks::getBankForLocalMemory(1), *pHwInfo); - if (helper.isBankOverrideRequired(*pHwInfo)) { + if (gfxCoreHelper.isBankOverrideRequired(*pHwInfo, productHelper)) { EXPECT_EQ(regionInfo[1].region.memoryInstance, regionClassAndInstance.memoryInstance); } else { EXPECT_EQ(regionInfo[2].region.memoryInstance, regionClassAndInstance.memoryInstance); } - //system memory not affected + // system memory not affected DebugManager.flags.OverrideDrmRegion.set(-1); DebugManager.flags.ForceMemoryBankIndexOverride.set(1); regionClassAndInstance = memoryInfo->getMemoryRegionClassAndInstance(MemoryBanks::MainBank, *pHwInfo); diff --git a/shared/test/unit_test/os_interface/linux/drm_memory_info_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_memory_info_tests.cpp index 08aac2c1ad..7993403ab8 100644 --- a/shared/test/unit_test/os_interface/linux/drm_memory_info_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_memory_info_tests.cpp @@ -203,9 +203,11 @@ TEST(MemoryInfo, givenMemoryInfoWithRegionsWhenGettingMemoryRegionClassAndInstan DebugManager.flags.OverrideDrmRegion.set(-1); DebugManager.flags.ForceMemoryBankIndexOverride.set(1); - auto &helper = GfxCoreHelper::get(defaultHwInfo->platform.eRenderCoreFamily); + auto &gfxCoreHelper = executionEnvironment->rootDeviceEnvironments[0]->getHelper(); + auto &productHelper = executionEnvironment->rootDeviceEnvironments[0]->getHelper(); + regionClassAndInstance = memoryInfo->getMemoryRegionClassAndInstance(MemoryBanks::getBankForLocalMemory(1), *defaultHwInfo); - if (helper.isBankOverrideRequired(*defaultHwInfo)) { + if (gfxCoreHelper.isBankOverrideRequired(*defaultHwInfo, productHelper)) { EXPECT_EQ(regionInfo[1].region.memoryClass, regionClassAndInstance.memoryClass); EXPECT_EQ(regionInfo[1].region.memoryInstance, regionClassAndInstance.memoryInstance); } else {