From a1ec6bc243be6b7c86517d232a226f99ad265e16 Mon Sep 17 00:00:00 2001 From: Lukasz Jobczyk Date: Wed, 2 Jul 2025 13:39:43 +0000 Subject: [PATCH] fix: Do not update ulls tag when ring not started When ring is not started ulls tag update is not dispatched. Counter should reflect that. Resolves: GSD-11312 Signed-off-by: Lukasz Jobczyk --- .../linux/drm_direct_submission.inl | 4 +++- .../linux/drm_direct_submission_tests.cpp | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/shared/source/direct_submission/linux/drm_direct_submission.inl b/shared/source/direct_submission/linux/drm_direct_submission.inl index c022c72ceb..2a22707196 100644 --- a/shared/source/direct_submission/linux/drm_direct_submission.inl +++ b/shared/source/direct_submission/linux/drm_direct_submission.inl @@ -257,7 +257,9 @@ size_t DrmDirectSubmission::dispatchStopRingBufferSection template void DrmDirectSubmission::handleSwitchRingBuffers(ResidencyContainer *allocationsForResidency) { if (this->disableMonitorFence) { - this->currentTagData.tagValue++; + if (this->ringStart) { + this->currentTagData.tagValue++; + } bool updateCompletionFences = true; if (debugManager.flags.EnableRingSwitchTagUpdateWa.get() != -1) { 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 c6998ac250..d4bba7ac87 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 @@ -1146,15 +1146,28 @@ HWTEST_F(DrmDirectSubmissionTest, givenBlitterDispatcherAndMultiTileDeviceWhenCr bool ret = directSubmission.allocateResources(); EXPECT_TRUE(ret); } -HWTEST_F(DrmDirectSubmissionTest, givenDrmDirectSubmissionWhenHandleSwitchRingBufferCalledThenPrevRingBufferHasUpdatedFenceValue) { +HWTEST_F(DrmDirectSubmissionTest, givenDrmDirectSubmissionStartedWhenHandleSwitchRingBufferCalledThenPrevRingBufferHasUpdatedFenceValue) { MockDrmDirectSubmission> drmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver); auto prevCompletionFenceVal = 1u; auto prevRingBufferIndex = 0u; auto newCompletionFenceValue = 10u; + drmDirectSubmission.ringStart = true; drmDirectSubmission.currentTagData.tagValue = newCompletionFenceValue; drmDirectSubmission.ringBuffers[prevRingBufferIndex].completionFence = prevCompletionFenceVal; drmDirectSubmission.handleSwitchRingBuffers(nullptr); EXPECT_EQ(drmDirectSubmission.ringBuffers[prevRingBufferIndex].completionFence, newCompletionFenceValue + 1); + drmDirectSubmission.ringStart = false; +} +HWTEST_F(DrmDirectSubmissionTest, givenDrmDirectSubmissionNotStartedWhenHandleSwitchRingBufferCalledThenPrevRingBufferHasNotUpdatedFenceValue) { + MockDrmDirectSubmission> drmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver); + auto prevCompletionFenceVal = 1u; + auto prevRingBufferIndex = 0u; + auto newCompletionFenceValue = 10u; + drmDirectSubmission.ringStart = false; + drmDirectSubmission.currentTagData.tagValue = newCompletionFenceValue; + drmDirectSubmission.ringBuffers[prevRingBufferIndex].completionFence = prevCompletionFenceVal; + drmDirectSubmission.handleSwitchRingBuffers(nullptr); + EXPECT_EQ(drmDirectSubmission.ringBuffers[prevRingBufferIndex].completionFence, newCompletionFenceValue); } HWTEST_F(DrmDirectSubmissionTest, givenDrmDirectSubmissionWhenEnableRingSwitchTagUpdateWaEnabledAndRingNotStartedThenCompletionFenceIsNotUpdated) { DebugManagerStateRestore dbgRestorer; @@ -1195,10 +1208,12 @@ HWTEST_F(DrmDirectSubmissionTest, givenDrmDirectSubmissionWhenEnableRingSwitchTa auto prevRingBufferIndex = 0u; auto newCompletionFenceValue = 10u; + drmDirectSubmission.ringStart = true; drmDirectSubmission.currentTagData.tagValue = newCompletionFenceValue; drmDirectSubmission.ringBuffers[prevRingBufferIndex].completionFence = prevCompletionFenceVal; drmDirectSubmission.handleSwitchRingBuffers(nullptr); EXPECT_EQ(drmDirectSubmission.ringBuffers[prevRingBufferIndex].completionFence, newCompletionFenceValue + 1); + drmDirectSubmission.ringStart = false; } HWTEST_F(DrmDirectSubmissionTest, givenDrmDirectSubmissionWhenGettingDefaultInputMonitorFencePolicyThenDefaultIsTrue) {