fix: Override prefer no cpu access for dc flush mitigation

Related-To: NEO-10556

Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:
Lukasz Jobczyk
2024-06-04 15:36:59 +00:00
committed by Compute-Runtime-Automation
parent f8330b1779
commit 9a2fa1dcb1
4 changed files with 23 additions and 0 deletions

View File

@@ -42,6 +42,8 @@ Gmm::Gmm(GmmHelper *gmmHelper, const void *alignedPtr, size_t alignedSize, size_
this->preferNoCpuAccess = CacheSettingsHelper::preferNoCpuAccess(gmmResourceUsage, gmmHelper->getRootDeviceEnvironment());
bool cacheable = !this->preferNoCpuAccess && !CacheSettingsHelper::isUncachedType(gmmResourceUsage);
gmmRequirements.overriderPreferNoCpuAccess.doOverride(this->preferNoCpuAccess);
gmmRequirements.overriderCacheable.doOverride(cacheable);
resourceParams.Flags.Info.Cacheable = cacheable;

View File

@@ -35,6 +35,7 @@ struct GmmRequirements {
bool preferCompressed;
bool allowLargePages;
Overrider<bool> overriderCacheable;
Overrider<bool> overriderPreferNoCpuAccess;
};
class Gmm {

View File

@@ -225,6 +225,10 @@ GraphicsAllocation *WddmMemoryManager::allocateGraphicsMemoryUsingKmdAndMapItToC
gmmRequirements.overriderCacheable.enableOverride = true;
gmmRequirements.overriderCacheable.value = true;
}
if (productHelper.overrideCacheableForDcFlushMitigation(allocationData.type)) {
gmmRequirements.overriderPreferNoCpuAccess.enableOverride = true;
gmmRequirements.overriderPreferNoCpuAccess.value = false;
}
auto gmm = new Gmm(executionEnvironment.rootDeviceEnvironments[allocationData.rootDeviceIndex]->getGmmHelper(), nullptr,
sizeAligned, 0u,
@@ -451,6 +455,10 @@ GraphicsAllocation *WddmMemoryManager::allocateGraphicsMemoryForNonSvmHostPtr(co
gmmRequirements.overriderCacheable.enableOverride = true;
gmmRequirements.overriderCacheable.value = true;
}
if (productHelper.overrideCacheableForDcFlushMitigation(allocationData.type)) {
gmmRequirements.overriderPreferNoCpuAccess.enableOverride = true;
gmmRequirements.overriderPreferNoCpuAccess.value = false;
}
auto gmm = new Gmm(executionEnvironment.rootDeviceEnvironments[allocationData.rootDeviceIndex]->getGmmHelper(), alignedPtr, alignedSize, 0u,
CacheSettingsHelper::getGmmUsageType(wddmAllocation->getAllocationType(), !!allocationData.flags.uncacheable, productHelper), {}, gmmRequirements);

View File

@@ -122,6 +122,18 @@ HWTEST_F(GmmTests, givenVariousResourceUsageTypeWhenCreateGmmThenFlagCacheableIs
auto gmm = std::make_unique<Gmm>(getGmmHelper(), nullptr, 0, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, storageInfo, gmmRequirements);
EXPECT_TRUE(gmm->resourceParams.Flags.Info.Cacheable);
}
{
gmmRequirements.overriderPreferNoCpuAccess.enableOverride = true;
gmmRequirements.overriderPreferNoCpuAccess.value = true;
auto gmm = std::make_unique<Gmm>(getGmmHelper(), nullptr, 0, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, storageInfo, gmmRequirements);
EXPECT_TRUE(gmm->getPreferNoCpuAccess());
}
{
gmmRequirements.overriderPreferNoCpuAccess.enableOverride = true;
gmmRequirements.overriderPreferNoCpuAccess.value = false;
auto gmm = std::make_unique<Gmm>(getGmmHelper(), nullptr, 0, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, storageInfo, gmmRequirements);
EXPECT_FALSE(gmm->getPreferNoCpuAccess());
}
}
} // namespace NEO