From 7330f989ef7fae98a07720188b5b28297e6438d8 Mon Sep 17 00:00:00 2001 From: Mateusz Hoppe Date: Thu, 19 Nov 2020 20:43:01 +0000 Subject: [PATCH] Refactor bindAvailable Related-To: NEO-5316 Signed-off-by: Mateusz Hoppe --- .../os_interface/linux/device_command_stream_fixture.h | 2 ++ .../os_interface/linux/drm_memory_manager_tests.cpp | 7 +++++++ opencl/test/unit_test/os_interface/linux/drm_mock.h | 4 ++++ shared/source/os_interface/linux/drm_buffer_object.cpp | 2 +- shared/source/os_interface/linux/drm_neo.h | 10 +++------- shared/source/os_interface/linux/drm_query.cpp | 4 ++++ shared/source/os_interface/linux/drm_query_dg1.cpp | 4 ++++ 7 files changed, 25 insertions(+), 8 deletions(-) diff --git a/opencl/test/unit_test/os_interface/linux/device_command_stream_fixture.h b/opencl/test/unit_test/os_interface/linux/device_command_stream_fixture.h index 30a29bf01a..d635191f29 100644 --- a/opencl/test/unit_test/os_interface/linux/device_command_stream_fixture.h +++ b/opencl/test/unit_test/os_interface/linux/device_command_stream_fixture.h @@ -337,6 +337,8 @@ class DrmMockCustom : public Drm { ioctl_expected.contextCreate = static_cast(NEO::HwHelper::get(NEO::defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*NEO::defaultHwInfo).size()); ioctl_expected.contextDestroy = ioctl_expected.contextCreate.load(); createVirtualMemoryAddressSpace(NEO::HwHelper::getSubDevicesCount(rootDeviceEnvironment.getHardwareInfo())); + isVmBindAvailable(); + reset(); } int getErrno() override { return errnoValue; diff --git a/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp b/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp index f825076b1c..ed49624d44 100644 --- a/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp +++ b/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp @@ -1738,6 +1738,8 @@ TEST_F(DrmMemoryManagerTest, givenDrmMemoryManagerWhenNonTiledImgWithMipCountZer auto data = alignedMalloc(64u * 4 * 8, MemoryConstants::pageSize); auto retVal = CL_SUCCESS; + this->mock->createParamsHandle = 0; + this->mock->createParamsSize = 0; cl_mem_flags flags = CL_MEM_WRITE_ONLY | CL_MEM_USE_HOST_PTR; auto surfaceFormat = Image::getSurfaceFormatFromTable(flags, &imageFormat, context.getDevice(0)->getHardwareInfo().capabilityTable.supportsOcl21Features); @@ -1784,6 +1786,9 @@ TEST_F(DrmMemoryManagerTest, givenDrmMemoryManagerWhenNonTiledImgWithMipCountNon auto retVal = CL_SUCCESS; + this->mock->createParamsHandle = 0; + this->mock->createParamsSize = 0; + cl_mem_flags flags = CL_MEM_WRITE_ONLY; auto surfaceFormat = Image::getSurfaceFormatFromTable(flags, &imageFormat, context.getDevice(0)->getHardwareInfo().capabilityTable.supportsOcl21Features); std::unique_ptr dstImage(Image::create( @@ -1828,6 +1833,8 @@ TEST_F(DrmMemoryManagerTest, givenDrmMemoryManagerWhen1DarrayImageIsBeingCreated auto data = alignedMalloc(64u * 4 * 8, MemoryConstants::pageSize); auto retVal = CL_SUCCESS; + this->mock->createParamsHandle = 0; + this->mock->createParamsSize = 0; cl_mem_flags flags = CL_MEM_WRITE_ONLY | CL_MEM_USE_HOST_PTR; auto surfaceFormat = Image::getSurfaceFormatFromTable(flags, &imageFormat, context.getDevice(0)->getHardwareInfo().capabilityTable.supportsOcl21Features); diff --git a/opencl/test/unit_test/os_interface/linux/drm_mock.h b/opencl/test/unit_test/os_interface/linux/drm_mock.h index 45ce4f4072..7487318aa6 100644 --- a/opencl/test/unit_test/os_interface/linux/drm_mock.h +++ b/opencl/test/unit_test/os_interface/linux/drm_mock.h @@ -29,6 +29,7 @@ using namespace NEO; // Mock DRM class that responds to DRM_IOCTL_I915_GETPARAMs class DrmMock : public Drm { public: + using Drm::bindAvailable; using Drm::checkQueueSliceSupport; using Drm::classHandles; using Drm::engineInfo; @@ -86,6 +87,9 @@ class DrmMock : public Drm { void setDeviceID(int deviceId) { this->deviceId = deviceId; } void setDeviceRevID(int revisionId) { this->revisionId = revisionId; } + void setBindAvailable() { + this->bindAvailable = true; + } static const int mockFd = 33; diff --git a/shared/source/os_interface/linux/drm_buffer_object.cpp b/shared/source/os_interface/linux/drm_buffer_object.cpp index c6500ae12b..39eb134bdc 100644 --- a/shared/source/os_interface/linux/drm_buffer_object.cpp +++ b/shared/source/os_interface/linux/drm_buffer_object.cpp @@ -225,7 +225,7 @@ int bindBOsWithinContext(BufferObject *const boToPin[], size_t numberOfBos, OsCo int BufferObject::pin(BufferObject *const boToPin[], size_t numberOfBos, OsContext *osContext, uint32_t vmHandleId, uint32_t drmContextId) { auto retVal = 0; - if (this->drm->isBindAvailable()) { + if (this->drm->isVmBindAvailable()) { retVal = bindBOsWithinContext(boToPin, numberOfBos, osContext, vmHandleId); } else { StackVec execObject(numberOfBos + 1); diff --git a/shared/source/os_interface/linux/drm_neo.h b/shared/source/os_interface/linux/drm_neo.h index 09bffee7b0..e20299c8ec 100644 --- a/shared/source/os_interface/linux/drm_neo.h +++ b/shared/source/os_interface/linux/drm_neo.h @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -111,6 +112,7 @@ class Drm { return requirePerContextVM; } + bool isVmBindAvailable(); MOCKABLE_VIRTUAL bool registerResourceClasses(); MOCKABLE_VIRTUAL uint32_t registerResource(ResourceClass classType, void *data, size_t size); @@ -143,13 +145,6 @@ class Drm { static Drm *create(std::unique_ptr hwDeviceId, RootDeviceEnvironment &rootDeviceEnvironment); static void overrideBindSupport(bool &useVmBind); - bool isBindAvailable() { - return this->bindAvailable; - } - void setBindAvailable() { - this->bindAvailable = true; - } - protected: int getQueueSliceCount(drm_i915_gem_context_param_sseu *sseu); std::string generateUUID(); @@ -159,6 +154,7 @@ class Drm { bool nonPersistentContextsSupported = false; bool requirePerContextVM = false; bool bindAvailable = false; + std::once_flag checkBindOnce; std::unique_ptr hwDeviceId; int deviceId = 0; int revisionId = 0; diff --git a/shared/source/os_interface/linux/drm_query.cpp b/shared/source/os_interface/linux/drm_query.cpp index c0bfd8090c..2917048a7f 100644 --- a/shared/source/os_interface/linux/drm_query.cpp +++ b/shared/source/os_interface/linux/drm_query.cpp @@ -58,4 +58,8 @@ int Drm::unbindBufferObject(OsContext *osContext, uint32_t vmHandleId, BufferObj return 0; } +bool Drm::isVmBindAvailable() { + return this->bindAvailable; +} + } // namespace NEO diff --git a/shared/source/os_interface/linux/drm_query_dg1.cpp b/shared/source/os_interface/linux/drm_query_dg1.cpp index 0e810ed61e..c3be04240b 100644 --- a/shared/source/os_interface/linux/drm_query_dg1.cpp +++ b/shared/source/os_interface/linux/drm_query_dg1.cpp @@ -67,4 +67,8 @@ int Drm::unbindBufferObject(OsContext *osContext, uint32_t vmHandleId, BufferObj return 0; } +bool Drm::isVmBindAvailable() { + return this->bindAvailable; +} + } // namespace NEO