From 7b697b72e3c01d3dcdd86ab3639f53d35122b474 Mon Sep 17 00:00:00 2001 From: Zbigniew Zdanowicz Date: Wed, 11 Aug 2021 16:13:08 +0000 Subject: [PATCH] Enable new KMD wait function in Linux Related-To: NEO-5845 Signed-off-by: Zbigniew Zdanowicz --- .../os_interface/linux/drm_command_stream.h | 2 +- .../linux/drm_command_stream_tests_2.cpp | 28 +++++++++++++++++-- .../linux/hw_info_config_xe_hp_sdv.cpp | 4 +++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/opencl/source/os_interface/linux/drm_command_stream.h b/opencl/source/os_interface/linux/drm_command_stream.h index 222a886f43..2d7a6a1721 100644 --- a/opencl/source/os_interface/linux/drm_command_stream.h +++ b/opencl/source/os_interface/linux/drm_command_stream.h @@ -76,7 +76,7 @@ class DrmCommandStreamReceiver : public DeviceCommandStreamReceiver { int32_t kmdWaitTimeout = -1; - bool useUserFenceWait = false; + bool useUserFenceWait = true; bool useContextForUserFenceWait = true; }; } // namespace NEO diff --git a/opencl/test/unit_test/os_interface/linux/drm_command_stream_tests_2.cpp b/opencl/test/unit_test/os_interface/linux/drm_command_stream_tests_2.cpp index 72ee26433e..a8a6ef16c5 100644 --- a/opencl/test/unit_test/os_interface/linux/drm_command_stream_tests_2.cpp +++ b/opencl/test/unit_test/os_interface/linux/drm_command_stream_tests_2.cpp @@ -820,7 +820,10 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, } HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, - givenNoWaitUserFenceFlagAndVmBindAvailableSetWhenDrmCsrFlushedThenExpectCommandBufferBoHandleAsFlushStamp) { + givenWaitUserFenceFlagNotSetAndVmBindAvailableSetWhenDrmCsrFlushedThenExpectCommandBufferBoHandleAsFlushStamp) { + DebugManagerStateRestore restorer; + DebugManager.flags.EnableUserFenceForCompletionWait.set(0); + mock->isVmBindAvailableCall.callParent = false; mock->isVmBindAvailableCall.returnValue = true; @@ -885,6 +888,9 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, } HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, givenWaitUserFenceFlagNotSetWhenDrmCsrWaitsForFlushStampThenExpectUseDrmGemWaitCall) { + DebugManagerStateRestore restorer; + DebugManager.flags.EnableUserFenceForCompletionWait.set(0); + TestedDrmCommandStreamReceiver *testedCsr = new TestedDrmCommandStreamReceiver(gemCloseWorkerMode::gemCloseWorkerInactive, *this->executionEnvironment, @@ -906,6 +912,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, givenWaitUserFenceFlagNotSetWhe HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, givenGemWaitUsedWhenKmdTimeoutUsedWhenDrmCsrWaitsForFlushStampThenExpectUseDrmGemWaitCallAndOverrideTimeout) { DebugManagerStateRestore restorer; DebugManager.flags.SetKmdWaitTimeout.set(1000); + DebugManager.flags.EnableUserFenceForCompletionWait.set(0); TestedDrmCommandStreamReceiver *testedCsr = new TestedDrmCommandStreamReceiver(gemCloseWorkerMode::gemCloseWorkerInactive, @@ -996,7 +1003,10 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, } HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, - givenNoWaitUserFenceFlagSetAndVmBindAvailableWhenDrmCsrWaitsForFlushStampThenExpectUseDrmGemWaitCall) { + givenWaitUserFenceFlagNotSetAndVmBindAvailableWhenDrmCsrWaitsForFlushStampThenExpectUseDrmGemWaitCall) { + DebugManagerStateRestore restorer; + DebugManager.flags.EnableUserFenceForCompletionWait.set(0); + mock->isVmBindAvailableCall.callParent = false; mock->isVmBindAvailableCall.returnValue = true; @@ -1057,6 +1067,20 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, EXPECT_EQ(Drm::ValueWidth::U32, mock->waitUserFenceCall.dataWidth); } +HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, + givenNoDebugFlagWaitUserFenceSetWhenDrmCsrIsCreatedThenUseNotifyEnableFlagIsSet) { + mock->isVmBindAvailableCall.callParent = false; + mock->isVmBindAvailableCall.returnValue = true; + + std::unique_ptr> testedCsr = + std::make_unique>(gemCloseWorkerMode::gemCloseWorkerInactive, + *this->executionEnvironment, + 1); + + EXPECT_TRUE(testedCsr->useUserFenceWait); + EXPECT_TRUE(testedCsr->isUsedNotifyEnableForPostSync()); +} + HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, givenWaitUserFenceSetWhenDrmCsrIsCreatedThenUseNotifyEnableFlagIsSet) { DebugManagerStateRestore restorer; diff --git a/shared/source/xe_hp_core/linux/hw_info_config_xe_hp_sdv.cpp b/shared/source/xe_hp_core/linux/hw_info_config_xe_hp_sdv.cpp index 332261cc59..c70252cfe1 100644 --- a/shared/source/xe_hp_core/linux/hw_info_config_xe_hp_sdv.cpp +++ b/shared/source/xe_hp_core/linux/hw_info_config_xe_hp_sdv.cpp @@ -29,6 +29,10 @@ int HwInfoConfigHw::configureHardwareCustom(HardwareInfo *hwInfo enableBlitterOperationsSupport(hwInfo); + auto &kmdNotifyProperties = hwInfo->capabilityTable.kmdNotifyProperties; + kmdNotifyProperties.enableKmdNotify = true; + kmdNotifyProperties.delayKmdNotifyMicroseconds = 20; + return 0; }