Create a wrapper for drm_i915_gem_context_param_sseu

Related-To: NEO-6852
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2022-05-19 12:30:26 +00:00
committed by Compute-Runtime-Automation
parent cbd73d2d9c
commit e7e1e64cca
9 changed files with 45 additions and 26 deletions

View File

@ -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;

View File

@ -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 {

View File

@ -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);

View File

@ -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<uint64_t>(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<uint64_t>(&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;

View File

@ -256,7 +256,7 @@ class Drm : public DriverModel {
protected:
Drm(std::unique_ptr<HwDeviceIdDrm> &&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;

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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<drm_i915_gem_context_param_sseu *>(reinterpret_cast<void *>(receivedContextParamRequest.value))).slice_mask;
storedParamSseu = (*static_cast<GemContextParamSseu *>(reinterpret_cast<void *>(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<drm_i915_gem_context_param_sseu *>(reinterpret_cast<void *>(receivedContextParamRequest.value))).slice_mask = storedParamSseu;
(*static_cast<GemContextParamSseu *>(reinterpret_cast<void *>(receivedContextParamRequest.value))).sliceMask = storedParamSseu;
}
return this->storedRetValForGetSSEU;
}