diff --git a/shared/source/debug_settings/debug_variables_base.inl b/shared/source/debug_settings/debug_variables_base.inl index faebb819b1..9f04688e94 100644 --- a/shared/source/debug_settings/debug_variables_base.inl +++ b/shared/source/debug_settings/debug_variables_base.inl @@ -489,7 +489,7 @@ DECLARE_DEBUG_VARIABLE(bool, ForceSamplerLowFilteringPrecision, false, "Force Lo DECLARE_DEBUG_VARIABLE(bool, EnablePrivateBO, false, "Enable PRELIM_I915_GEM_CREATE_EXT_VM_PRIVATE extension creating VM_PRIVATE BOs") DECLARE_DEBUG_VARIABLE(bool, EnableAIL, true, "Enables AIL") DECLARE_DEBUG_VARIABLE(bool, EnableReservingInSvmRange, true, "Enables reserving virtual memory in the SVM range") -DECLARE_DEBUG_VARIABLE(bool, EnableDeferBacking, false, "Enables defer backing on xe kmd") +DECLARE_DEBUG_VARIABLE(int32_t, EnableDeferBacking, -1, "Enables defer backing on xe kmd, -1:default(enabled), 0:disable, 1:enable") DECLARE_DEBUG_VARIABLE(bool, DisableProgrammableMetricsSupport, false, "Disable Programmable Metrics support") DECLARE_DEBUG_VARIABLE(int64_t, VmBindWaitUserFenceTimeout, -1, "-1: default, >0: time in ns for wait function timeout") DECLARE_DEBUG_VARIABLE(int32_t, ForceRunAloneContext, -1, "Control creation of run-alone HW context, -1:default, 0:disable, 1:enable") diff --git a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp index 58ad633609..14eb232c1d 100644 --- a/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp +++ b/shared/source/os_interface/linux/xe/ioctl_helper_xe.cpp @@ -678,7 +678,12 @@ int IoctlHelperXe::createGemExt(const MemRegionsVec &memClassInstances, size_t a create.placement = static_cast(memoryInstances.to_ulong()); create.cpu_caching = this->getCpuCachingMode(isCoherent, isSysMemOnly); - if (debugManager.flags.EnableDeferBacking.get()) { + auto enableDeferBacking = true; + if (debugManager.flags.EnableDeferBacking.get() != -1) { + enableDeferBacking = debugManager.flags.EnableDeferBacking.get(); + } + + if (enableDeferBacking) { create.flags |= DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING; } @@ -724,7 +729,12 @@ uint32_t IoctlHelperXe::createGem(uint64_t size, uint32_t memoryBanks, std::opti create.placement = static_cast(memoryInstances.to_ulong()); create.cpu_caching = this->getCpuCachingMode(isCoherent, isSysMemOnly); - if (debugManager.flags.EnableDeferBacking.get()) { + auto enableDeferBacking = true; + if (debugManager.flags.EnableDeferBacking.get() != -1) { + enableDeferBacking = debugManager.flags.EnableDeferBacking.get(); + } + + if (enableDeferBacking) { create.flags |= DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING; } @@ -1575,9 +1585,9 @@ bool IoctlHelperXe::isImmediateVmBindRequired() const { } bool IoctlHelperXe::makeResidentBeforeLockNeeded() const { - auto makeResidentBeforeLockNeeded = false; - if (debugManager.flags.EnableDeferBacking.get()) { - makeResidentBeforeLockNeeded = true; + auto makeResidentBeforeLockNeeded = true; + if (debugManager.flags.EnableDeferBacking.get() != -1) { + makeResidentBeforeLockNeeded = debugManager.flags.EnableDeferBacking.get(); } return makeResidentBeforeLockNeeded; } diff --git a/shared/test/common/test_files/igdrcl.config b/shared/test/common/test_files/igdrcl.config index 3b65bfda60..d6d4928d78 100644 --- a/shared/test/common/test_files/igdrcl.config +++ b/shared/test/common/test_files/igdrcl.config @@ -663,6 +663,6 @@ ClearStandaloneInOrderTimestampAllocation = -1 PipelinedEuThreadArbitration = -1 ExperimentalUSMAllocationReuseCleaner = -1 DummyPageBackingEnabled = 0 -EnableDeferBacking = 0 +EnableDeferBacking = -1 GetSipBinaryFromExternalLib = -1 # Please don't edit below this line diff --git a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp index 2d419cfea8..0c5d484a80 100644 --- a/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_tests.cpp @@ -117,9 +117,6 @@ TEST_F(IoctlHelperXeGemCreateExtTests, givenIoctlHelperXeWhenCallingGemCreateExt } TEST_F(IoctlHelperXeGemCreateExtTests, givenIoctlHelperXeWhenCallingGemCreateExtWithOnlySystemRegionAndCoherencyThenWriteBackCPUCachingIsUsed) { - DebugManagerStateRestore restorer; - debugManager.flags.EnableDeferBacking.set(1); - MemRegionsVec memRegions = {systemMemory}; bool isCoherent = true; @@ -128,10 +125,20 @@ TEST_F(IoctlHelperXeGemCreateExtTests, givenIoctlHelperXeWhenCallingGemCreateExt EXPECT_EQ(static_cast(DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING), (drm->createParamsFlags & DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING)); } +TEST_F(IoctlHelperXeGemCreateExtTests, givenIoctlHelperXeAndDeferBackingIsDisabledWhenCallingGemCreateExtThenVerifyGemCreateFlagsAreNotSet) { + DebugManagerStateRestore restorer; + debugManager.flags.EnableDeferBacking.set(0); + MemRegionsVec memRegions = {systemMemory}; + bool isCoherent = true; + + EXPECT_NE(0, xeIoctlHelper->createGemExt(memRegions, allocSize, handle, patIndex, std::nullopt, pairHandle, isChunked, numOfChunks, std::nullopt, std::nullopt, isCoherent)); + EXPECT_EQ(0u, drm->createParamsFlags); +} + TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndNoLocalMemoryThenProperValuesSet) { DebugManagerStateRestore restorer; debugManager.flags.EnableLocalMemory.set(0); - debugManager.flags.EnableDeferBacking.set(1); + debugManager.flags.EnableDeferBacking.set(0); auto executionEnvironment = std::make_unique(); auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); @@ -150,7 +157,7 @@ TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndNoLocalMemoryThe EXPECT_TRUE(xeIoctlHelper->bindInfo.empty()); EXPECT_EQ(size, drm->createParamsSize); - EXPECT_EQ(static_cast(DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING), (drm->createParamsFlags & DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING)); + EXPECT_EQ(0u, drm->createParamsFlags); EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm->createParamsCpuCaching); EXPECT_EQ(1u, drm->createParamsPlacement); @@ -162,7 +169,6 @@ TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndNoLocalMemoryThe TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateWhenMemoryBanksZeroThenProperValuesSet) { DebugManagerStateRestore restorer; debugManager.flags.EnableLocalMemory.set(0); - debugManager.flags.EnableDeferBacking.set(1); auto executionEnvironment = std::make_unique(); auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); @@ -193,7 +199,6 @@ TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateWhenMemoryBanksZero TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndLocalMemoryThenProperValuesSet) { DebugManagerStateRestore restorer; debugManager.flags.EnableLocalMemory.set(1); - debugManager.flags.EnableDeferBacking.set(1); auto executionEnvironment = std::make_unique(); auto drm = DrmMockXe::create(*executionEnvironment->rootDeviceEnvironments[0]); auto xeIoctlHelper = static_cast(drm->getIoctlHelper()); @@ -2692,11 +2697,18 @@ TEST_F(IoctlHelperXeTest, whenQueryDeviceIdAndRevisionAndSharedSystemUsmSupportD EXPECT_FALSE(drm->isSharedSystemAllocEnabled()); } -TEST_F(IoctlHelperXeTest, givenXeIoctlHelperAndDeferBackingFlagSetToTrueWhenMakeResidentBeforeLockNeededIsCalledThenVerifyTrueIsReturned) { - DebugManagerStateRestore restorer; - debugManager.flags.EnableDeferBacking.set(1); +TEST_F(IoctlHelperXeTest, givenXeIoctlHelperWhenMakeResidentBeforeLockNeededIsCalledThenVerifyTrueIsReturned) { auto executionEnvironment = std::make_unique(); DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; auto xeIoctlHelper = std::make_unique(drm); EXPECT_TRUE(xeIoctlHelper->makeResidentBeforeLockNeeded()); } + +TEST_F(IoctlHelperXeTest, givenXeIoctlHelperAndDeferBackingFlagSetToFalseWhenMakeResidentBeforeLockNeededIsCalledThenVerifyTrueIsReturned) { + DebugManagerStateRestore restorer; + debugManager.flags.EnableDeferBacking.set(0); + auto executionEnvironment = std::make_unique(); + DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto xeIoctlHelper = std::make_unique(drm); + EXPECT_FALSE(xeIoctlHelper->makeResidentBeforeLockNeeded()); +} \ No newline at end of file