diff --git a/opencl/source/dll/linux/drm_neo_create.cpp b/opencl/source/dll/linux/drm_neo_create.cpp index 0c1ba64641..3e5fb5cdd0 100644 --- a/opencl/source/dll/linux/drm_neo_create.cpp +++ b/opencl/source/dll/linux/drm_neo_create.cpp @@ -110,4 +110,11 @@ Drm *Drm::create(std::unique_ptr hwDeviceId, RootDeviceEnvironment & } return drmObject.release(); } + +void Drm::overrideBindSupport(bool &useVmBind) { + if (DebugManager.flags.UseVmBind.get() != -1) { + useVmBind = DebugManager.flags.UseVmBind.get(); + } +} + } // namespace NEO diff --git a/opencl/test/unit_test/linux/main_linux_dll.cpp b/opencl/test/unit_test/linux/main_linux_dll.cpp index d45dad905c..8765904252 100644 --- a/opencl/test/unit_test/linux/main_linux_dll.cpp +++ b/opencl/test/unit_test/linux/main_linux_dll.cpp @@ -215,6 +215,23 @@ TEST(DrmTest, GivenSelectedIncorectDeviceWhenGetDeviceFdThenFail) { EXPECT_TRUE(hwDeviceIds.empty()); } +TEST(DrmTest, givenUseVmBindFlagWhenOverrideBindSupportThenReturnProperValue) { + DebugManagerStateRestore dbgRestorer; + bool useVmBind = false; + + DebugManager.flags.UseVmBind.set(1); + Drm::overrideBindSupport(useVmBind); + EXPECT_TRUE(useVmBind); + + DebugManager.flags.UseVmBind.set(0); + Drm::overrideBindSupport(useVmBind); + EXPECT_FALSE(useVmBind); + + DebugManager.flags.UseVmBind.set(-1); + Drm::overrideBindSupport(useVmBind); + EXPECT_FALSE(useVmBind); +} + TEST_F(DrmTests, createReturnsDrm) { auto drm = DrmWrap::createDrm(*rootDeviceEnvironment); EXPECT_NE(drm, nullptr); diff --git a/opencl/test/unit_test/os_interface/linux/drm_neo_create.cpp b/opencl/test/unit_test/os_interface/linux/drm_neo_create.cpp index 3f96af658b..d52c594a65 100644 --- a/opencl/test/unit_test/os_interface/linux/drm_neo_create.cpp +++ b/opencl/test/unit_test/os_interface/linux/drm_neo_create.cpp @@ -40,4 +40,12 @@ Drm *Drm::create(std::unique_ptr hwDeviceId, RootDeviceEnvironment & } return drm; } + +void Drm::overrideBindSupport(bool &useVmBind) { + useVmBind = false; + if (DebugManager.flags.UseVmBind.get() == 1) { + useVmBind = true; + } +} + } // namespace NEO diff --git a/opencl/test/unit_test/test_files/igdrcl.config b/opencl/test/unit_test/test_files/igdrcl.config index 88709e6dcf..a210d156cc 100644 --- a/opencl/test/unit_test/test_files/igdrcl.config +++ b/opencl/test/unit_test/test_files/igdrcl.config @@ -86,6 +86,7 @@ DirectSubmissionDiagnosticExecutionCount = 30 DirectSubmissionDisableCacheFlush = 0 DirectSubmissionDisableMonitorFence = 0 USMEvictAfterMigration = 1 +UseVmBind = -1 EnableNullHardware = 0 ForceLinearImages = 0 ForceSLML3Config = 0 diff --git a/shared/source/debug_settings/debug_variables_base.inl b/shared/source/debug_settings/debug_variables_base.inl index 28f9de8756..1b097a3407 100644 --- a/shared/source/debug_settings/debug_variables_base.inl +++ b/shared/source/debug_settings/debug_variables_base.inl @@ -203,6 +203,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, ForceUserptrAlignment, -1, "-1: no force (4kb), DECLARE_DEBUG_VARIABLE(int64_t, ForceSystemMemoryPlacement, 0, "0: default, >0: (bitmask) for given Graphics Allocation Type, force system memory placement") DECLARE_DEBUG_VARIABLE(int64_t, ForceNonSystemMemoryPlacement, 0, "0: default, >0: (bitmask) for given Graphics Allocation Type, force non-system memory placement") DECLARE_DEBUG_VARIABLE(int64_t, DisableIndirectAccess, -1, "0: default, 0: Indirect access for L0 kernels is enabled, 1: Indirect is disabled") +DECLARE_DEBUG_VARIABLE(int32_t, UseVmBind, -1, "Use new residency model on Linux (requires kernel support), -1: default, 0: disabled, 1: enabled") DECLARE_DEBUG_VARIABLE(bool, UseMaxSimdSizeToDeduceMaxWorkgroupSize, false, "With this flag on, max workgroup size is deduced using SIMD32 instead of SIMD8, this causes the max wkg size to be 4 times bigger") DECLARE_DEBUG_VARIABLE(bool, ReturnRawGpuTimestamps, false, "Driver returns raw GPU tiemstamps instead of calculated ones.") DECLARE_DEBUG_VARIABLE(bool, ForcePerDssBackedBufferProgramming, false, "Always program per-DSS memory backed buffer in preamble") diff --git a/shared/source/os_interface/linux/drm_neo.h b/shared/source/os_interface/linux/drm_neo.h index 9ea58ac96c..328c269710 100644 --- a/shared/source/os_interface/linux/drm_neo.h +++ b/shared/source/os_interface/linux/drm_neo.h @@ -141,6 +141,7 @@ class Drm { static bool isi915Version(int fd); static Drm *create(std::unique_ptr hwDeviceId, RootDeviceEnvironment &rootDeviceEnvironment); + static void overrideBindSupport(bool &useVmBind); protected: int getQueueSliceCount(drm_i915_gem_context_param_sseu *sseu);