diff --git a/shared/source/os_interface/linux/drm_memory_manager.cpp b/shared/source/os_interface/linux/drm_memory_manager.cpp index 6b28f3620f..1cabbb8a24 100644 --- a/shared/source/os_interface/linux/drm_memory_manager.cpp +++ b/shared/source/os_interface/linux/drm_memory_manager.cpp @@ -1406,7 +1406,19 @@ void DrmMemoryManager::handleFenceCompletion(GraphicsAllocation *allocation) { waitForEnginesCompletion(*allocation); } } else { - static_cast(allocation)->getBO()->wait(-1); + bool callBoWait = true; + + const auto &engines = this->getRegisteredEngines(allocation->getRootDeviceIndex()); + for (const auto &engine : engines) { + if (engine.osContext->isDirectSubmissionLightActive() && !allocationTypeForCompletionFence(allocation->getAllocationType())) { + callBoWait = false; + break; + } + } + + if (callBoWait) { + static_cast(allocation)->getBO()->wait(-1); + } } } diff --git a/shared/source/os_interface/linux/drm_memory_operations_handler_default.cpp b/shared/source/os_interface/linux/drm_memory_operations_handler_default.cpp index 0de3cacfaa..6f020697f9 100644 --- a/shared/source/os_interface/linux/drm_memory_operations_handler_default.cpp +++ b/shared/source/os_interface/linux/drm_memory_operations_handler_default.cpp @@ -68,7 +68,6 @@ MemoryOperationsStatus DrmMemoryOperationsHandlerDefault::evictWithinOsContext(O auto ret = std::find(this->residency.begin(), this->residency.end(), &gfxAllocation); if (ret != this->residency.end()) { this->residency.erase(ret); - this->newResourcesSinceLastRingSubmit = true; } return MemoryOperationsStatus::success; } 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 7ccdbd1cd5..de5b134ec4 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 @@ -852,7 +852,7 @@ HWTEST_F(DrmDirectSubmissionTest, givenDirectSubmissionLightWhenExecTimeoutReach ResidencyContainer residencyContainer{}; batchBuffer.allocationsForResidency = &residencyContainer; drmDirectSubmission.ringStart = true; - static_cast(executionEnvironment.rootDeviceEnvironments[device->getRootDeviceIndex()]->memoryOperationsInterface.get())->obtainAndResetNewResourcesSinceLastRingSubmit(); + EXPECT_TRUE(static_cast(executionEnvironment.rootDeviceEnvironments[device->getRootDeviceIndex()]->memoryOperationsInterface.get())->obtainAndResetNewResourcesSinceLastRingSubmit()); drmDirectSubmission.lastUllsLightExecTimestamp = std::chrono::steady_clock::time_point{}; drmDirectSubmission.cpuTimePointReturnValue = std::chrono::time_point::max(); @@ -871,6 +871,7 @@ HWTEST_F(DrmDirectSubmissionTest, givenDirectSubmissionLightWhenExecTimeoutReach drmDirectSubmission.ringStart = false; executionEnvironment.memoryManager->freeGraphicsMemory(commandBuffer); + EXPECT_FALSE(static_cast(executionEnvironment.rootDeviceEnvironments[device->getRootDeviceIndex()]->memoryOperationsInterface.get())->obtainAndResetNewResourcesSinceLastRingSubmit()); } HWTEST_F(DrmDirectSubmissionTest, givenDirectSubmissionLightWhenNoRegisteredResourcesThenNoRestart) {