From 9d3b759d2989bb156a0b22b206067a88e9da2ec2 Mon Sep 17 00:00:00 2001 From: Lukasz Jobczyk Date: Tue, 16 Feb 2021 15:25:26 +0000 Subject: [PATCH] Do not call GEM_WAIT while direct submission active Signed-off-by: Lukasz Jobczyk --- .../os_interface/linux/drm_buffer_object_tests.cpp | 7 +++++++ shared/source/os_interface/linux/drm_buffer_object.cpp | 4 ++++ .../linux/drm_direct_submission_tests.cpp | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/opencl/test/unit_test/os_interface/linux/drm_buffer_object_tests.cpp b/opencl/test/unit_test/os_interface/linux/drm_buffer_object_tests.cpp index 2190461063..ed8f157cde 100644 --- a/opencl/test/unit_test/os_interface/linux/drm_buffer_object_tests.cpp +++ b/opencl/test/unit_test/os_interface/linux/drm_buffer_object_tests.cpp @@ -111,6 +111,13 @@ TEST_F(DrmBufferObjectTest, GivenInvalidTilingWhenSettingTilingThenCallFails) { EXPECT_FALSE(ret); } +TEST_F(DrmBufferObjectTest, givenDirectSubmissionActiveWhenCallWaitThenNoIoctlIsCalled) { + mock->setDirectSubmissionActive(true); + mock->ioctl_expected.total = 0; + auto ret = bo->wait(-1); + EXPECT_FALSE(ret); +} + TEST_F(DrmBufferObjectTest, givenAddressThatWhenSizeIsAddedCrosses32BitBoundaryWhenExecIsCalledThen48BitFlagIsSet) { drm_i915_gem_exec_object2 execObject; diff --git a/shared/source/os_interface/linux/drm_buffer_object.cpp b/shared/source/os_interface/linux/drm_buffer_object.cpp index d9db5bbe0c..002b804369 100644 --- a/shared/source/os_interface/linux/drm_buffer_object.cpp +++ b/shared/source/os_interface/linux/drm_buffer_object.cpp @@ -71,6 +71,10 @@ bool BufferObject::close() { } int BufferObject::wait(int64_t timeoutNs) { + if (this->drm->isDirectSubmissionActive()) { + return 0; + } + drm_i915_gem_wait wait = {}; wait.bo_handle = this->handle; wait.timeout_ns = -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 d7f22f3827..71922722be 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 @@ -92,5 +92,5 @@ HWTEST_F(DrmDirectSubmissionTest, givenDrmDirectSubmissionWhenDestructObjectThen drm->ioctlCallsCount = 0u; drmDirectSubmission.reset(); - EXPECT_EQ(drm->ioctlCallsCount, 7u); + EXPECT_EQ(drm->ioctlCallsCount, 3u); }