Create a wrapper for drm_i915_gem_context_create_ext_setparam

Related-To: NEO-6852, NEO-6999
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski 2022-05-23 15:05:47 +00:00 committed by Compute-Runtime-Automation
parent b934a3f5cb
commit b0e75b18fd
9 changed files with 46 additions and 24 deletions

View File

@ -52,7 +52,7 @@ void DrmMockCustomPrelimContext::execBufferExtensions(void *arg) {
const auto execbuf = reinterpret_cast<NEO::MockExecBuffer *>(arg);
if ((execbuf->hasUseExtensionsFlag()) &&
(execbuf->getCliprectsPtr() != 0)) {
i915_user_extension *base = reinterpret_cast<i915_user_extension *>(execbuf->getCliprectsPtr());
DrmUserExtension *base = reinterpret_cast<DrmUserExtension *>(execbuf->getCliprectsPtr());
if (base->name == PRELIM_DRM_I915_GEM_EXECBUFFER_EXT_USER_FENCE) {
prelim_drm_i915_gem_execbuffer_ext_user_fence *userFenceExt =
reinterpret_cast<prelim_drm_i915_gem_execbuffer_ext_user_fence *>(execbuf->getCliprectsPtr());

View File

@ -441,7 +441,7 @@ uint32_t Drm::createDrmContext(uint32_t drmVmId, bool isDirectSubmissionRequeste
gcc.flags |= ioctlHelper->getDirectSubmissionFlag();
}
drm_i915_gem_context_create_ext_setparam extSetparam = {};
GemContextCreateExtSetParam extSetparam = {};
if (drmVmId > 0) {
extSetparam.base.name = I915_CONTEXT_CREATE_EXT_SETPARAM;

View File

@ -104,4 +104,14 @@ static_assert(offsetof(GemContextParam, size) == offsetof(drm_i915_gem_context_p
static_assert(offsetof(GemContextParam, param) == offsetof(drm_i915_gem_context_param, param));
static_assert(offsetof(GemContextParam, value) == offsetof(drm_i915_gem_context_param, value));
static_assert(sizeof(DrmUserExtension) == sizeof(i915_user_extension));
static_assert(offsetof(DrmUserExtension, nextExtension) == offsetof(i915_user_extension, next_extension));
static_assert(offsetof(DrmUserExtension, name) == offsetof(i915_user_extension, name));
static_assert(offsetof(DrmUserExtension, flags) == offsetof(i915_user_extension, flags));
static_assert(offsetof(DrmUserExtension, reserved) == offsetof(i915_user_extension, rsvd));
static_assert(sizeof(GemContextCreateExtSetParam) == sizeof(drm_i915_gem_context_create_ext_setparam));
static_assert(offsetof(GemContextCreateExtSetParam, base) == offsetof(drm_i915_gem_context_create_ext_setparam, base));
static_assert(offsetof(GemContextCreateExtSetParam, param) == offsetof(drm_i915_gem_context_create_ext_setparam, param));
} // namespace NEO

View File

@ -118,4 +118,16 @@ struct GemContextParam {
uint64_t value;
};
struct DrmUserExtension {
uint64_t nextExtension;
uint32_t name;
uint32_t flags;
uint32_t reserved[4];
};
struct GemContextCreateExtSetParam {
DrmUserExtension base;
GemContextParam param;
};
} // namespace NEO

View File

@ -393,9 +393,9 @@ uint32_t IoctlHelperPrelim20::getFlagsForVmCreate(bool disableScratch, bool enab
return flags;
}
uint32_t gemCreateContextExt(Drm *drm, drm_i915_gem_context_create_ext &gcc, drm_i915_gem_context_create_ext_setparam &extSetparam) {
uint32_t gemCreateContextExt(Drm *drm, drm_i915_gem_context_create_ext &gcc, GemContextCreateExtSetParam &extSetparam) {
gcc.flags |= I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS;
extSetparam.base.next_extension = gcc.extensions;
extSetparam.base.nextExtension = gcc.extensions;
gcc.extensions = reinterpret_cast<uint64_t>(&extSetparam);
auto ioctlResult = IoctlHelper::ioctl(drm, DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT, &gcc);
@ -409,16 +409,16 @@ uint32_t gemCreateContextAcc(Drm *drm, drm_i915_gem_context_create_ext &gcc, uin
paramAcc.notify = 1;
paramAcc.granularity = granularity;
i915_user_extension userExt = {};
DrmUserExtension userExt{};
userExt.name = I915_CONTEXT_CREATE_EXT_SETPARAM;
drm_i915_gem_context_param ctxParam = {};
GemContextParam ctxParam = {};
ctxParam.param = PRELIM_I915_CONTEXT_PARAM_ACC;
ctxParam.ctx_id = 0;
ctxParam.contextId = 0;
ctxParam.size = sizeof(paramAcc);
ctxParam.value = reinterpret_cast<uint64_t>(&paramAcc);
drm_i915_gem_context_create_ext_setparam extSetparam = {};
GemContextCreateExtSetParam extSetparam{};
extSetparam.base = userExt;
extSetparam.param = ctxParam;
@ -437,7 +437,7 @@ uint32_t IoctlHelperPrelim20::createContextWithAccessCounters(Drm *drm, drm_i915
}
uint32_t IoctlHelperPrelim20::createCooperativeContext(Drm *drm, drm_i915_gem_context_create_ext &gcc) {
struct drm_i915_gem_context_create_ext_setparam extSetparam = {};
GemContextCreateExtSetParam extSetparam{};
extSetparam.base.name = I915_CONTEXT_CREATE_EXT_SETPARAM;
extSetparam.param.param = PRELIM_I915_CONTEXT_PARAM_RUNALONE;
return gemCreateContextExt(drm, gcc, extSetparam);

View File

@ -83,7 +83,7 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
if (create->extensions == 0) {
return this->storedRetVal;
}
receivedContextCreateSetParam = *reinterpret_cast<drm_i915_gem_context_create_ext_setparam *>(create->extensions);
receivedContextCreateSetParam = *reinterpret_cast<GemContextCreateExtSetParam *>(create->extensions);
if (receivedContextCreateSetParam.base.name == I915_CONTEXT_CREATE_EXT_SETPARAM) {
receivedContextParamRequestCount++;
receivedContextParamRequest = *reinterpret_cast<GemContextParam *>(&receivedContextCreateSetParam.param);

View File

@ -198,7 +198,7 @@ class DrmMock : public Drm {
uint32_t passedContextDebugId = std::numeric_limits<uint32_t>::max();
std::vector<drm_i915_reset_stats> resetStatsToReturn{};
drm_i915_gem_context_create_ext_setparam receivedContextCreateSetParam = {};
GemContextCreateExtSetParam receivedContextCreateSetParam = {};
uint32_t receivedContextCreateFlags = 0;
uint32_t receivedDestroyContextId = 0;
uint32_t ioctlCallsCount = 0;

View File

@ -59,7 +59,7 @@ int DrmMockPrelimContext::handlePrelimRequest(unsigned long request, void *arg)
} break;
case DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT: {
auto create = static_cast<drm_i915_gem_context_create_ext *>(arg);
auto setParam = reinterpret_cast<drm_i915_gem_context_create_ext_setparam *>(create->extensions);
auto setParam = reinterpret_cast<GemContextCreateExtSetParam *>(create->extensions);
if (setParam->param.param == PRELIM_I915_CONTEXT_PARAM_ACC) {
const auto paramAcc = reinterpret_cast<prelim_drm_i915_gem_context_param_acc *>(setParam->param.value);
receivedContextParamAcc = GemContextParamAcc{paramAcc->trigger, paramAcc->notify, paramAcc->granularity};
@ -422,7 +422,7 @@ void DrmMockPrelimContext::storeVmBindExtensions(uint64_t ptr, bool bind) {
}
size_t uuidIndex{0};
auto baseExt = reinterpret_cast<i915_user_extension *>(ptr);
auto baseExt = reinterpret_cast<DrmUserExtension *>(ptr);
while (baseExt) {
if (baseExt->name == PRELIM_I915_VM_BIND_EXT_USER_FENCE) {
const auto *ext = reinterpret_cast<prelim_drm_i915_vm_bind_ext_user_fence *>(baseExt);
@ -439,7 +439,7 @@ void DrmMockPrelimContext::storeVmBindExtensions(uint64_t ptr, bool bind) {
}
}
baseExt = reinterpret_cast<i915_user_extension *>(baseExt->next_extension);
baseExt = reinterpret_cast<DrmUserExtension *>(baseExt->nextExtension);
}
}

View File

@ -70,12 +70,12 @@ TEST(DrmQueryTest, givenCooperativeEngineWhenCreateDrmContextThenRunAloneContext
const auto &extSetparam = drm.receivedContextCreateSetParam;
EXPECT_EQ(static_cast<uint32_t>(I915_CONTEXT_CREATE_EXT_SETPARAM), extSetparam.base.name);
EXPECT_EQ(0u, extSetparam.base.next_extension);
EXPECT_EQ(0u, extSetparam.base.nextExtension);
EXPECT_EQ(0u, extSetparam.base.flags);
EXPECT_EQ(static_cast<uint64_t>(DrmPrelimHelper::getRunAloneContextParam()), extSetparam.param.param);
EXPECT_EQ(0u, extSetparam.param.size);
EXPECT_EQ(0u, extSetparam.param.ctx_id);
EXPECT_EQ(0u, extSetparam.param.contextId);
EXPECT_EQ(0u, extSetparam.param.value);
}
@ -98,12 +98,12 @@ TEST(DrmQueryTest, givenForceRunAloneContextFlagSetWhenCreateDrmContextThenRunAl
auto extSetparam = drm.receivedContextCreateSetParam;
EXPECT_EQ(static_cast<uint32_t>(I915_CONTEXT_CREATE_EXT_SETPARAM), extSetparam.base.name);
EXPECT_EQ(0u, extSetparam.base.next_extension);
EXPECT_EQ(0u, extSetparam.base.nextExtension);
EXPECT_EQ(0u, extSetparam.base.flags);
EXPECT_EQ(static_cast<uint64_t>(DrmPrelimHelper::getRunAloneContextParam()), extSetparam.param.param);
EXPECT_EQ(0u, extSetparam.param.size);
EXPECT_EQ(0u, extSetparam.param.ctx_id);
EXPECT_EQ(0u, extSetparam.param.contextId);
EXPECT_EQ(0u, extSetparam.param.value);
}
}
@ -124,12 +124,12 @@ TEST(DrmQueryTest, givenCreateContextWithAccessCountersWhenDrmContextIsCreatedTh
auto extSetparam = drm.receivedContextCreateSetParam;
EXPECT_EQ(static_cast<uint32_t>(I915_CONTEXT_CREATE_EXT_SETPARAM), extSetparam.base.name);
EXPECT_EQ(0u, extSetparam.base.next_extension);
EXPECT_EQ(0u, extSetparam.base.nextExtension);
EXPECT_EQ(0u, extSetparam.base.flags);
EXPECT_EQ(static_cast<uint64_t>(DrmPrelimHelper::getAccContextParam()), extSetparam.param.param);
EXPECT_EQ(DrmPrelimHelper::getAccContextParamSize(), extSetparam.param.size);
EXPECT_EQ(0u, extSetparam.param.ctx_id);
EXPECT_EQ(0u, extSetparam.param.contextId);
EXPECT_NE(0u, extSetparam.param.value);
auto paramAcc = drm.context.receivedContextParamAcc;
@ -158,12 +158,12 @@ TEST(DrmQueryTest, givenCreateContextWithAccessCounterWhenDrmContextIsCreatedThe
auto extSetparam = drm.receivedContextCreateSetParam;
EXPECT_EQ(static_cast<uint32_t>(I915_CONTEXT_CREATE_EXT_SETPARAM), extSetparam.base.name);
EXPECT_EQ(0u, extSetparam.base.next_extension);
EXPECT_EQ(0u, extSetparam.base.nextExtension);
EXPECT_EQ(0u, extSetparam.base.flags);
EXPECT_EQ(static_cast<uint64_t>(DrmPrelimHelper::getAccContextParam()), extSetparam.param.param);
EXPECT_EQ(DrmPrelimHelper::getAccContextParamSize(), extSetparam.param.size);
EXPECT_EQ(0u, extSetparam.param.ctx_id);
EXPECT_EQ(0u, extSetparam.param.contextId);
EXPECT_NE(0u, extSetparam.param.value);
auto paramAcc = drm.context.receivedContextParamAcc;
@ -193,12 +193,12 @@ TEST(DrmQueryTest, givenCreateContextWithAccessCounterWhenDrmContextIsCreatedThe
auto extSetparam = drm.receivedContextCreateSetParam;
EXPECT_EQ(static_cast<uint32_t>(I915_CONTEXT_CREATE_EXT_SETPARAM), extSetparam.base.name);
EXPECT_EQ(0u, extSetparam.base.next_extension);
EXPECT_EQ(0u, extSetparam.base.nextExtension);
EXPECT_EQ(0u, extSetparam.base.flags);
EXPECT_EQ(static_cast<uint64_t>(DrmPrelimHelper::getAccContextParam()), extSetparam.param.param);
EXPECT_EQ(DrmPrelimHelper::getAccContextParamSize(), extSetparam.param.size);
EXPECT_EQ(0u, extSetparam.param.ctx_id);
EXPECT_EQ(0u, extSetparam.param.contextId);
EXPECT_NE(0u, extSetparam.param.value);
auto paramAcc = drm.context.receivedContextParamAcc;