From e7e1e64ccabe39b4cd0e099052fdb1ad10d1c0f4 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Thu, 19 May 2022 12:30:26 +0000 Subject: [PATCH] Create a wrapper for drm_i915_gem_context_param_sseu Related-To: NEO-6852 Signed-off-by: Mateusz Jablonski --- opencl/test/unit_test/linux/mock_os_layer.cpp | 4 ++-- .../unit_test/os_interface/linux/drm_tests.cpp | 4 ++-- ..._create_command_queue_with_properties_tests.cpp | 8 ++++---- shared/source/os_interface/linux/drm_neo.cpp | 12 ++++++------ shared/source/os_interface/linux/drm_neo.h | 4 ++-- shared/source/os_interface/linux/drm_wrappers.cpp | 12 ++++++++++++ shared/source/os_interface/linux/drm_wrappers.h | 14 ++++++++++++++ shared/source/os_interface/linux/ioctl_helper.h | 9 +-------- shared/test/common/libult/linux/drm_mock.cpp | 4 ++-- 9 files changed, 45 insertions(+), 26 deletions(-) diff --git a/opencl/test/unit_test/linux/mock_os_layer.cpp b/opencl/test/unit_test/linux/mock_os_layer.cpp index 9876905c5b..d447fea6eb 100644 --- a/opencl/test/unit_test/linux/mock_os_layer.cpp +++ b/opencl/test/unit_test/linux/mock_os_layer.cpp @@ -186,7 +186,7 @@ int drmSetContextParam(drm_i915_gem_context_param *param) { break; #endif case I915_CONTEXT_PARAM_SSEU: - if (param->size == sizeof(struct drm_i915_gem_context_param_sseu) && param->value != 0 && param->ctx_id == 0) { + if (param->size == sizeof(NEO::GemContextParamSseu) && param->value != 0 && param->ctx_id == 0) { ret = failOnSetParamSseu; } else { ret = -1; @@ -203,7 +203,7 @@ int drmGetContextParam(drm_i915_gem_context_param *param) { switch (param->param) { case I915_CONTEXT_PARAM_SSEU: - if (param->size == sizeof(struct drm_i915_gem_context_param_sseu) && param->value != 0 && param->ctx_id == 0) { + if (param->size == sizeof(NEO::GemContextParamSseu) && param->value != 0 && param->ctx_id == 0) { ret = failOnGetParamSseu; } else { ret = -1; diff --git a/opencl/test/unit_test/os_interface/linux/drm_tests.cpp b/opencl/test/unit_test/os_interface/linux/drm_tests.cpp index 055ba36e62..6f6e43e0a8 100644 --- a/opencl/test/unit_test/os_interface/linux/drm_tests.cpp +++ b/opencl/test/unit_test/os_interface/linux/drm_tests.cpp @@ -456,9 +456,9 @@ TEST(DrmTest, givenPlatformWithSupportToChangeSliceCountWhenCallSetQueueSliceCou EXPECT_TRUE(drm->sliceCountChangeSupported); EXPECT_TRUE(drm->setQueueSliceCount(newSliceCount)); - drm_i915_gem_context_param_sseu sseu = {}; + GemContextParamSseu sseu = {}; EXPECT_EQ(0, drm->getQueueSliceCount(&sseu)); - EXPECT_EQ(drm->getSliceMask(newSliceCount), sseu.slice_mask); + EXPECT_EQ(drm->getSliceMask(newSliceCount), sseu.sliceMask); } namespace NEO { diff --git a/opencl/test/unit_test/os_interface/linux/linux_create_command_queue_with_properties_tests.cpp b/opencl/test/unit_test/os_interface/linux/linux_create_command_queue_with_properties_tests.cpp index 1c0bbdf24a..ccea91210a 100644 --- a/opencl/test/unit_test/os_interface/linux/linux_create_command_queue_with_properties_tests.cpp +++ b/opencl/test/unit_test/os_interface/linux/linux_create_command_queue_with_properties_tests.cpp @@ -141,9 +141,9 @@ HWTEST_F(clCreateCommandQueueWithPropertiesLinux, givenPropertiesWithClQueueSlic mdevice->getDevice()); auto expectedSliceMask = drm->getSliceMask(newSliceCount); EXPECT_EQ(expectedSliceMask, drm->storedParamSseu); - drm_i915_gem_context_param_sseu sseu = {}; + GemContextParamSseu sseu = {}; EXPECT_EQ(0, drm->getQueueSliceCount(&sseu)); - EXPECT_EQ(expectedSliceMask, sseu.slice_mask); + EXPECT_EQ(expectedSliceMask, sseu.sliceMask); EXPECT_EQ(newSliceCount, mockCsr->lastSentSliceCount); retVal = clReleaseCommandQueue(cmdQ); @@ -188,9 +188,9 @@ HWTEST_F(clCreateCommandQueueWithPropertiesLinux, givenSameSliceCountAsRecentlyS mdevice->getDevice()); auto expectedSliceMask = drm->getSliceMask(newSliceCount); EXPECT_NE(expectedSliceMask, drm->storedParamSseu); - drm_i915_gem_context_param_sseu sseu = {}; + GemContextParamSseu sseu = {}; EXPECT_EQ(0, drm->getQueueSliceCount(&sseu)); - EXPECT_NE(expectedSliceMask, sseu.slice_mask); + EXPECT_NE(expectedSliceMask, sseu.sliceMask); retVal = clReleaseCommandQueue(cmdQ); EXPECT_EQ(CL_SUCCESS, retVal); diff --git a/shared/source/os_interface/linux/drm_neo.cpp b/shared/source/os_interface/linux/drm_neo.cpp index 109f98a03c..ea7d65ddd2 100644 --- a/shared/source/os_interface/linux/drm_neo.cpp +++ b/shared/source/os_interface/linux/drm_neo.cpp @@ -370,13 +370,13 @@ void Drm::setLowPriorityContextParam(uint32_t drmContextId) { UNRECOVERABLE_IF(retVal != 0); } -int Drm::getQueueSliceCount(drm_i915_gem_context_param_sseu *sseu) { +int Drm::getQueueSliceCount(GemContextParamSseu *sseu) { drm_i915_gem_context_param contextParam = {}; contextParam.param = I915_CONTEXT_PARAM_SSEU; - sseu->engine.engine_class = I915_ENGINE_CLASS_RENDER; - sseu->engine.engine_instance = I915_EXEC_DEFAULT; + sseu->engine.engineClass = I915_ENGINE_CLASS_RENDER; + sseu->engine.engineInstance = I915_EXEC_DEFAULT; contextParam.value = reinterpret_cast(sseu); - contextParam.size = sizeof(struct drm_i915_gem_context_param_sseu); + contextParam.size = sizeof(struct GemContextParamSseu); return ioctl(DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM, &contextParam); } @@ -387,12 +387,12 @@ uint64_t Drm::getSliceMask(uint64_t sliceCount) { bool Drm::setQueueSliceCount(uint64_t sliceCount) { if (sliceCountChangeSupported) { drm_i915_gem_context_param contextParam = {}; - sseu.slice_mask = getSliceMask(sliceCount); + sseu.sliceMask = getSliceMask(sliceCount); contextParam.param = I915_CONTEXT_PARAM_SSEU; contextParam.ctx_id = 0; contextParam.value = reinterpret_cast(&sseu); - contextParam.size = sizeof(struct drm_i915_gem_context_param_sseu); + contextParam.size = sizeof(struct GemContextParamSseu); int retVal = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &contextParam); if (retVal == 0) { return true; diff --git a/shared/source/os_interface/linux/drm_neo.h b/shared/source/os_interface/linux/drm_neo.h index 233d0a0bf5..8e817609fc 100644 --- a/shared/source/os_interface/linux/drm_neo.h +++ b/shared/source/os_interface/linux/drm_neo.h @@ -256,7 +256,7 @@ class Drm : public DriverModel { protected: Drm(std::unique_ptr &&hwDeviceIdIn, RootDeviceEnvironment &rootDeviceEnvironment); - int getQueueSliceCount(drm_i915_gem_context_param_sseu *sseu); + int getQueueSliceCount(GemContextParamSseu *sseu); bool translateTopologyInfo(const drm_i915_query_topology_info *queryTopologyInfo, QueryTopologyData &data, TopologyMapping &mapping); std::string generateUUID(); std::string generateElfUUID(const void *data); @@ -294,7 +294,7 @@ class Drm : public DriverModel { }; #pragma pack() - drm_i915_gem_context_param_sseu sseu{}; + GemContextParamSseu sseu{}; ADAPTER_BDF adapterBDF{}; uint32_t pciDomain = 0; diff --git a/shared/source/os_interface/linux/drm_wrappers.cpp b/shared/source/os_interface/linux/drm_wrappers.cpp index d7045d5b29..42cae5b2c8 100644 --- a/shared/source/os_interface/linux/drm_wrappers.cpp +++ b/shared/source/os_interface/linux/drm_wrappers.cpp @@ -51,4 +51,16 @@ static_assert(offsetof(QueryItem, length) == offsetof(drm_i915_query_item, lengt static_assert(offsetof(QueryItem, flags) == offsetof(drm_i915_query_item, flags)); static_assert(offsetof(QueryItem, dataPtr) == offsetof(drm_i915_query_item, data_ptr)); +static_assert(sizeof(EngineClassInstance) == sizeof(i915_engine_class_instance)); +static_assert(offsetof(EngineClassInstance, engineClass) == offsetof(i915_engine_class_instance, engine_class)); +static_assert(offsetof(EngineClassInstance, engineInstance) == offsetof(i915_engine_class_instance, engine_instance)); + +static_assert(sizeof(GemContextParamSseu) == sizeof(drm_i915_gem_context_param_sseu)); +static_assert(offsetof(GemContextParamSseu, engine) == offsetof(drm_i915_gem_context_param_sseu, engine)); +static_assert(offsetof(GemContextParamSseu, flags) == offsetof(drm_i915_gem_context_param_sseu, flags)); +static_assert(offsetof(GemContextParamSseu, sliceMask) == offsetof(drm_i915_gem_context_param_sseu, slice_mask)); +static_assert(offsetof(GemContextParamSseu, subsliceMask) == offsetof(drm_i915_gem_context_param_sseu, subslice_mask)); +static_assert(offsetof(GemContextParamSseu, minEusPerSubslice) == offsetof(drm_i915_gem_context_param_sseu, min_eus_per_subslice)); +static_assert(offsetof(GemContextParamSseu, maxEusPerSubslice) == offsetof(drm_i915_gem_context_param_sseu, max_eus_per_subslice)); + } // namespace NEO diff --git a/shared/source/os_interface/linux/drm_wrappers.h b/shared/source/os_interface/linux/drm_wrappers.h index 5026308544..8cf838ce70 100644 --- a/shared/source/os_interface/linux/drm_wrappers.h +++ b/shared/source/os_interface/linux/drm_wrappers.h @@ -57,4 +57,18 @@ struct QueryItem { uint64_t dataPtr; }; +struct EngineClassInstance { + uint16_t engineClass; + uint16_t engineInstance; +}; + +struct GemContextParamSseu { + EngineClassInstance engine; + uint32_t flags; + uint64_t sliceMask; + uint64_t subsliceMask; + uint16_t minEusPerSubslice; + uint16_t maxEusPerSubslice; +}; + } // namespace NEO diff --git a/shared/source/os_interface/linux/ioctl_helper.h b/shared/source/os_interface/linux/ioctl_helper.h index 3bc7a802be..cec6870b57 100644 --- a/shared/source/os_interface/linux/ioctl_helper.h +++ b/shared/source/os_interface/linux/ioctl_helper.h @@ -6,6 +6,7 @@ */ #pragma once +#include "shared/source/os_interface/linux/drm_wrappers.h" #include "shared/source/utilities/stackvec.h" #include "igfxfmid.h" @@ -24,9 +25,6 @@ class Drm; class IoctlHelper; enum class CacheRegion : uint16_t; struct HardwareInfo; -struct ExecBuffer; -struct ExecObject; -struct QueryItem; extern IoctlHelper *ioctlHelperFactory[IGFX_MAX_PRODUCT]; @@ -35,11 +33,6 @@ struct MemoryClassInstance { uint16_t memoryInstance; }; -struct EngineClassInstance { - uint16_t engineClass; - uint16_t engineInstance; -}; - struct MemoryRegion { MemoryClassInstance region; uint64_t probedSize; diff --git a/shared/test/common/libult/linux/drm_mock.cpp b/shared/test/common/libult/linux/drm_mock.cpp index 4b8bb8d30c..1fb71d6bc2 100644 --- a/shared/test/common/libult/linux/drm_mock.cpp +++ b/shared/test/common/libult/linux/drm_mock.cpp @@ -112,7 +112,7 @@ int DrmMock::ioctl(unsigned long request, void *arg) { } if (receivedContextParamRequest.param == I915_CONTEXT_PARAM_SSEU) { if (storedRetValForSetSSEU == 0) { - storedParamSseu = (*static_cast(reinterpret_cast(receivedContextParamRequest.value))).slice_mask; + storedParamSseu = (*static_cast(reinterpret_cast(receivedContextParamRequest.value))).sliceMask; } return this->storedRetValForSetSSEU; } @@ -138,7 +138,7 @@ int DrmMock::ioctl(unsigned long request, void *arg) { } if (receivedContextParamRequest.param == I915_CONTEXT_PARAM_SSEU) { if (storedRetValForGetSSEU == 0) { - (*static_cast(reinterpret_cast(receivedContextParamRequest.value))).slice_mask = storedParamSseu; + (*static_cast(reinterpret_cast(receivedContextParamRequest.value))).sliceMask = storedParamSseu; } return this->storedRetValForGetSSEU; }