From 6f283d7bf5df49520a1b16353d56fbde420efb8d Mon Sep 17 00:00:00 2001 From: "Dunajski, Bartosz" Date: Thu, 1 Dec 2022 14:08:43 +0000 Subject: [PATCH] Debug flag to override fence start value Signed-off-by: Dunajski, Bartosz --- .../debug_settings/debug_variables_base.inl | 1 + .../linux/drm_direct_submission.inl | 4 ++++ shared/test/common/test_files/igdrcl.config | 3 ++- .../linux/drm_direct_submission_tests.cpp | 16 ++++++++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/shared/source/debug_settings/debug_variables_base.inl b/shared/source/debug_settings/debug_variables_base.inl index 886fbd2729..1b5ced172d 100644 --- a/shared/source/debug_settings/debug_variables_base.inl +++ b/shared/source/debug_settings/debug_variables_base.inl @@ -403,6 +403,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, GTPinAllocateBufferInSharedMemory, -1, "Force GT DECLARE_DEBUG_VARIABLE(int32_t, AlignLocalMemoryVaTo2MB, -1, "Allow 2MB pages for allocations with size>=2MB. On Linux it means aligned VA, on Windows it means aligned size. -1: default, 0: disabled, 1: enabled") DECLARE_DEBUG_VARIABLE(int32_t, EnableUserFenceForCompletionWait, -1, "-1: default (disabled), 0: disable, 1: enable : Use Wait User Fence instead Gem Wait") DECLARE_DEBUG_VARIABLE(int32_t, EnableUserFenceUseCtxId, -1, "-1: default (disabled), 0: disable, 1: enable : Use Context Id in Wait User Fence when waiting for completion tag") +DECLARE_DEBUG_VARIABLE(int32_t, OverrideUserFenceStartValue, -1, "-1: default (disabled), >1: Instead of starting from 0, use different start value.") DECLARE_DEBUG_VARIABLE(int32_t, SetKmdWaitTimeout, -1, "-1: default (infinity), >0: amount of time units for wait function timeout") DECLARE_DEBUG_VARIABLE(int32_t, OverrideNotifyEnableForTagUpdatePostSync, -1, "-1: default (usage determined by user fence wait call), 0: disable use of NotifyEnable flag, 1: enable use NotifyEnable flag") DECLARE_DEBUG_VARIABLE(int32_t, EnableCmdQRoundRobindEngineAssign, -1, "-1: default, 0: disable, 1: enable") diff --git a/shared/source/direct_submission/linux/drm_direct_submission.inl b/shared/source/direct_submission/linux/drm_direct_submission.inl index 3305f57f86..7820dfaedd 100644 --- a/shared/source/direct_submission/linux/drm_direct_submission.inl +++ b/shared/source/direct_submission/linux/drm_direct_submission.inl @@ -30,6 +30,10 @@ DrmDirectSubmission::DrmDirectSubmission(const DirectSubm this->disableMonitorFence = DebugManager.flags.DirectSubmissionDisableMonitorFence.get(); } + if (DebugManager.flags.OverrideUserFenceStartValue.get() != -1) { + this->completionFenceValue = static_cast(DebugManager.flags.OverrideUserFenceStartValue.get()); + } + auto osContextLinux = static_cast(&this->osContext); auto subDevices = osContextLinux->getDeviceBitfield(); diff --git a/shared/test/common/test_files/igdrcl.config b/shared/test/common/test_files/igdrcl.config index 136a345461..3a60856a8e 100644 --- a/shared/test/common/test_files/igdrcl.config +++ b/shared/test/common/test_files/igdrcl.config @@ -489,4 +489,5 @@ UseHighAlignmentForHeapExtended = -1 ForceAutoGrfCompilationMode = -1 ForceComputeWalkerPostSyncFlush = -1 DirectSubmissionRelaxedOrdering = -1 -DirectSubmissionRelaxedOrderingForBcs = -1 \ No newline at end of file +DirectSubmissionRelaxedOrderingForBcs = -1 +OverrideUserFenceStartValue = -1 \ No newline at end of file diff --git a/shared/test/unit_test/direct_submission/linux/drm_direct_submission_tests.cpp b/shared/test/unit_test/direct_submission/linux/drm_direct_submission_tests.cpp index 35ab99b12f..e74beb561e 100644 --- a/shared/test/unit_test/direct_submission/linux/drm_direct_submission_tests.cpp +++ b/shared/test/unit_test/direct_submission/linux/drm_direct_submission_tests.cpp @@ -173,6 +173,22 @@ HWTEST_F(DrmDirectSubmissionTest, givenCompletionFenceSupportWhenGettingCompleti EXPECT_EQ(&directSubmission.completionFenceValue, directSubmission.getCompletionValuePointer()); } +HWTEST_F(DrmDirectSubmissionTest, givenDebugFlagSetWhenInitializingThenOverrideFenceStartValue) { + DebugManagerStateRestore restorer; + + TaskCountType fenceStartValue = 1234; + + DebugManager.flags.EnableDrmCompletionFence.set(1); + DebugManager.flags.OverrideUserFenceStartValue.set(static_cast(fenceStartValue)); + auto &commandStreamReceiver = *device->getDefaultEngine().commandStreamReceiver; + auto drm = executionEnvironment.rootDeviceEnvironments[0]->osInterface->getDriverModel()->as(); + + ASSERT_TRUE(drm->completionFenceSupport()); + + MockDrmDirectSubmission> directSubmission(commandStreamReceiver); + EXPECT_EQ(fenceStartValue, directSubmission.completionFenceValue); +} + HWTEST_F(DrmDirectSubmissionTest, givenNoCompletionFenceSupportWhenGettingCompletionFencePointerThenNullptrIsReturned) { DebugManagerStateRestore restorer; DebugManager.flags.EnableDrmCompletionFence.set(0);