mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 23:03:02 +08:00
Create a wrapper for drm_i915_gem_context_create_ext
Related-To: NEO-6852 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
bd5dc1524c
commit
51d1752a68
@@ -432,7 +432,7 @@ void Drm::setUnrecoverableContext(uint32_t drmContextId) {
|
||||
}
|
||||
|
||||
uint32_t Drm::createDrmContext(uint32_t drmVmId, bool isDirectSubmissionRequested, bool isCooperativeContextRequested) {
|
||||
drm_i915_gem_context_create_ext gcc = {};
|
||||
GemContextCreateExt gcc{};
|
||||
|
||||
if (DebugManager.flags.DirectSubmissionDrmContext.get() != -1) {
|
||||
isDirectSubmissionRequested = DebugManager.flags.DirectSubmissionDrmContext.get();
|
||||
@@ -464,7 +464,7 @@ uint32_t Drm::createDrmContext(uint32_t drmVmId, bool isDirectSubmissionRequeste
|
||||
auto ioctlResult = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT, &gcc);
|
||||
|
||||
UNRECOVERABLE_IF(ioctlResult != 0);
|
||||
return gcc.ctx_id;
|
||||
return gcc.contextId;
|
||||
}
|
||||
|
||||
void Drm::destroyDrmContext(uint32_t drmContextId) {
|
||||
|
||||
@@ -114,4 +114,9 @@ static_assert(sizeof(GemContextCreateExtSetParam) == sizeof(drm_i915_gem_context
|
||||
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));
|
||||
|
||||
static_assert(sizeof(GemContextCreateExt) == sizeof(drm_i915_gem_context_create_ext));
|
||||
static_assert(offsetof(GemContextCreateExt, contextId) == offsetof(drm_i915_gem_context_create_ext, ctx_id));
|
||||
static_assert(offsetof(GemContextCreateExt, flags) == offsetof(drm_i915_gem_context_create_ext, flags));
|
||||
static_assert(offsetof(GemContextCreateExt, extensions) == offsetof(drm_i915_gem_context_create_ext, extensions));
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -130,4 +130,10 @@ struct GemContextCreateExtSetParam {
|
||||
GemContextParam param;
|
||||
};
|
||||
|
||||
struct GemContextCreateExt {
|
||||
uint32_t contextId;
|
||||
uint32_t flags;
|
||||
uint64_t extensions;
|
||||
};
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
struct drm_i915_gem_context_create_ext;
|
||||
|
||||
namespace NEO {
|
||||
class Drm;
|
||||
class IoctlHelper;
|
||||
@@ -99,8 +97,8 @@ class IoctlHelper {
|
||||
virtual std::optional<int> getHasPageFaultParamId() = 0;
|
||||
virtual std::unique_ptr<uint8_t[]> createVmControlExtRegion(const std::optional<MemoryClassInstance> ®ionInstanceClass) = 0;
|
||||
virtual uint32_t getFlagsForVmCreate(bool disableScratch, bool enablePageFault, bool useVmBind) = 0;
|
||||
virtual uint32_t createContextWithAccessCounters(Drm *drm, drm_i915_gem_context_create_ext &gcc) = 0;
|
||||
virtual uint32_t createCooperativeContext(Drm *drm, drm_i915_gem_context_create_ext &gcc) = 0;
|
||||
virtual uint32_t createContextWithAccessCounters(Drm *drm, GemContextCreateExt &gcc) = 0;
|
||||
virtual uint32_t createCooperativeContext(Drm *drm, GemContextCreateExt &gcc) = 0;
|
||||
virtual void fillVmBindExtSetPat(VmBindExtSetPatT &vmBindExtSetPat, uint64_t patIndex, uint64_t nextExtension) = 0;
|
||||
virtual void fillVmBindExtUserFence(VmBindExtUserFenceT &vmBindExtUserFence, uint64_t fenceAddress, uint64_t fenceValue, uint64_t nextExtension) = 0;
|
||||
virtual std::optional<uint64_t> getCopyClassSaturatePCIECapability() = 0;
|
||||
@@ -156,8 +154,8 @@ class IoctlHelperUpstream : public IoctlHelper {
|
||||
std::optional<int> getHasPageFaultParamId() override;
|
||||
std::unique_ptr<uint8_t[]> createVmControlExtRegion(const std::optional<MemoryClassInstance> ®ionInstanceClass) override;
|
||||
uint32_t getFlagsForVmCreate(bool disableScratch, bool enablePageFault, bool useVmBind) override;
|
||||
uint32_t createContextWithAccessCounters(Drm *drm, drm_i915_gem_context_create_ext &gcc) override;
|
||||
uint32_t createCooperativeContext(Drm *drm, drm_i915_gem_context_create_ext &gcc) override;
|
||||
uint32_t createContextWithAccessCounters(Drm *drm, GemContextCreateExt &gcc) override;
|
||||
uint32_t createCooperativeContext(Drm *drm, GemContextCreateExt &gcc) override;
|
||||
void fillVmBindExtSetPat(VmBindExtSetPatT &vmBindExtSetPat, uint64_t patIndex, uint64_t nextExtension) override;
|
||||
void fillVmBindExtUserFence(VmBindExtUserFenceT &vmBindExtUserFence, uint64_t fenceAddress, uint64_t fenceValue, uint64_t nextExtension) override;
|
||||
std::optional<uint64_t> getCopyClassSaturatePCIECapability() override;
|
||||
@@ -220,8 +218,8 @@ class IoctlHelperPrelim20 : public IoctlHelper {
|
||||
std::optional<int> getHasPageFaultParamId() override;
|
||||
std::unique_ptr<uint8_t[]> createVmControlExtRegion(const std::optional<MemoryClassInstance> ®ionInstanceClass) override;
|
||||
uint32_t getFlagsForVmCreate(bool disableScratch, bool enablePageFault, bool useVmBind) override;
|
||||
uint32_t createContextWithAccessCounters(Drm *drm, drm_i915_gem_context_create_ext &gcc) override;
|
||||
uint32_t createCooperativeContext(Drm *drm, drm_i915_gem_context_create_ext &gcc) override;
|
||||
uint32_t createContextWithAccessCounters(Drm *drm, GemContextCreateExt &gcc) override;
|
||||
uint32_t createCooperativeContext(Drm *drm, GemContextCreateExt &gcc) override;
|
||||
void fillVmBindExtSetPat(VmBindExtSetPatT &vmBindExtSetPat, uint64_t patIndex, uint64_t nextExtension) override;
|
||||
void fillVmBindExtUserFence(VmBindExtUserFenceT &vmBindExtUserFence, uint64_t fenceAddress, uint64_t fenceValue, uint64_t nextExtension) override;
|
||||
std::optional<uint64_t> getCopyClassSaturatePCIECapability() override;
|
||||
|
||||
@@ -393,17 +393,17 @@ uint32_t IoctlHelperPrelim20::getFlagsForVmCreate(bool disableScratch, bool enab
|
||||
return flags;
|
||||
}
|
||||
|
||||
uint32_t gemCreateContextExt(Drm *drm, drm_i915_gem_context_create_ext &gcc, GemContextCreateExtSetParam &extSetparam) {
|
||||
uint32_t gemCreateContextExt(Drm *drm, GemContextCreateExt &gcc, GemContextCreateExtSetParam &extSetparam) {
|
||||
gcc.flags |= I915_CONTEXT_CREATE_FLAGS_USE_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);
|
||||
UNRECOVERABLE_IF(ioctlResult != 0);
|
||||
return gcc.ctx_id;
|
||||
return gcc.contextId;
|
||||
}
|
||||
|
||||
uint32_t gemCreateContextAcc(Drm *drm, drm_i915_gem_context_create_ext &gcc, uint16_t trigger, uint8_t granularity) {
|
||||
uint32_t gemCreateContextAcc(Drm *drm, GemContextCreateExt &gcc, uint16_t trigger, uint8_t granularity) {
|
||||
prelim_drm_i915_gem_context_param_acc paramAcc = {};
|
||||
paramAcc.trigger = trigger;
|
||||
paramAcc.notify = 1;
|
||||
@@ -424,7 +424,7 @@ uint32_t gemCreateContextAcc(Drm *drm, drm_i915_gem_context_create_ext &gcc, uin
|
||||
|
||||
return gemCreateContextExt(drm, gcc, extSetparam);
|
||||
}
|
||||
uint32_t IoctlHelperPrelim20::createContextWithAccessCounters(Drm *drm, drm_i915_gem_context_create_ext &gcc) {
|
||||
uint32_t IoctlHelperPrelim20::createContextWithAccessCounters(Drm *drm, GemContextCreateExt &gcc) {
|
||||
uint16_t trigger = 0;
|
||||
if (DebugManager.flags.AccessCountersTrigger.get() != -1) {
|
||||
trigger = static_cast<uint16_t>(DebugManager.flags.AccessCountersTrigger.get());
|
||||
@@ -436,7 +436,7 @@ uint32_t IoctlHelperPrelim20::createContextWithAccessCounters(Drm *drm, drm_i915
|
||||
return gemCreateContextAcc(drm, gcc, trigger, granularity);
|
||||
}
|
||||
|
||||
uint32_t IoctlHelperPrelim20::createCooperativeContext(Drm *drm, drm_i915_gem_context_create_ext &gcc) {
|
||||
uint32_t IoctlHelperPrelim20::createCooperativeContext(Drm *drm, GemContextCreateExt &gcc) {
|
||||
GemContextCreateExtSetParam extSetparam{};
|
||||
extSetparam.base.name = I915_CONTEXT_CREATE_EXT_SETPARAM;
|
||||
extSetparam.param.param = PRELIM_I915_CONTEXT_PARAM_RUNALONE;
|
||||
|
||||
@@ -188,11 +188,11 @@ uint32_t IoctlHelperUpstream::getFlagsForVmCreate(bool disableScratch, bool enab
|
||||
return 0u;
|
||||
}
|
||||
|
||||
uint32_t IoctlHelperUpstream::createContextWithAccessCounters(Drm *drm, drm_i915_gem_context_create_ext &gcc) {
|
||||
uint32_t IoctlHelperUpstream::createContextWithAccessCounters(Drm *drm, GemContextCreateExt &gcc) {
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
uint32_t IoctlHelperUpstream::createCooperativeContext(Drm *drm, drm_i915_gem_context_create_ext &gcc) {
|
||||
uint32_t IoctlHelperUpstream::createCooperativeContext(Drm *drm, GemContextCreateExt &gcc) {
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
|
||||
@@ -76,9 +76,8 @@ int DrmMock::ioctl(unsigned long request, void *arg) {
|
||||
|
||||
if ((request == DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT) && (arg != nullptr)) {
|
||||
ioctlCount.contextCreate++;
|
||||
auto create = static_cast<drm_i915_gem_context_create_ext *>(arg);
|
||||
auto contextCreate = static_cast<drm_i915_gem_context_create *>(arg);
|
||||
contextCreate->ctx_id = this->storedDrmContextId;
|
||||
auto create = static_cast<GemContextCreateExt *>(arg);
|
||||
create->contextId = this->storedDrmContextId;
|
||||
this->receivedContextCreateFlags = create->flags;
|
||||
if (create->extensions == 0) {
|
||||
return this->storedRetVal;
|
||||
|
||||
@@ -58,7 +58,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 create = static_cast<GemContextCreateExt *>(arg);
|
||||
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);
|
||||
|
||||
@@ -171,8 +171,8 @@ int DrmMockCustom::ioctl(unsigned long request, void *arg) {
|
||||
} break;
|
||||
|
||||
case DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT: {
|
||||
auto contextCreateParam = reinterpret_cast<drm_i915_gem_context_create_ext *>(arg);
|
||||
contextCreateParam->ctx_id = ++ioctl_cnt.contextCreate;
|
||||
auto contextCreateParam = static_cast<NEO::GemContextCreateExt *>(arg);
|
||||
contextCreateParam->contextId = ++ioctl_cnt.contextCreate;
|
||||
} break;
|
||||
case DRM_IOCTL_I915_GEM_CONTEXT_DESTROY: {
|
||||
ioctl_cnt.contextDestroy++;
|
||||
|
||||
@@ -134,7 +134,7 @@ TEST_F(IoctlHelperPrelimFixture, givenPrelimsWhenCreateGemExtWithDebugFlagThenPr
|
||||
}
|
||||
|
||||
TEST_F(IoctlHelperPrelimFixture, givenPrelimsWhenCallIoctlThenProperIoctlRegistered) {
|
||||
drm_i915_gem_context_create_ext arg{};
|
||||
GemContextCreateExt arg{};
|
||||
auto ret = IoctlHelper::ioctl(drm.get(), DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT, &arg);
|
||||
EXPECT_EQ(0u, ret);
|
||||
EXPECT_EQ(1u, drm->ioctlCallsCount);
|
||||
@@ -398,7 +398,7 @@ TEST_F(IoctlHelperPrelimFixture, givenIoctlFailureWhenCreateContextWithAccessCou
|
||||
drm->ioctlRetVal = EINVAL;
|
||||
|
||||
auto ioctlHelper = drm->getIoctlHelper();
|
||||
drm_i915_gem_context_create_ext gcc{};
|
||||
GemContextCreateExt gcc{};
|
||||
EXPECT_THROW(ioctlHelper->createContextWithAccessCounters(drm.get(), gcc), std::runtime_error);
|
||||
EXPECT_EQ(1u, drm->ioctlCallsCount);
|
||||
}
|
||||
@@ -407,7 +407,7 @@ TEST_F(IoctlHelperPrelimFixture, givenIoctlSuccessWhenCreateContextWithAccessCou
|
||||
drm->ioctlRetVal = 0;
|
||||
|
||||
auto ioctlHelper = drm->getIoctlHelper();
|
||||
drm_i915_gem_context_create_ext gcc{};
|
||||
GemContextCreateExt gcc{};
|
||||
EXPECT_EQ(0u, ioctlHelper->createContextWithAccessCounters(drm.get(), gcc));
|
||||
EXPECT_EQ(1u, drm->ioctlCallsCount);
|
||||
}
|
||||
@@ -416,7 +416,7 @@ TEST_F(IoctlHelperPrelimFixture, givenIoctlFailureWhenCreateCooperativeContexIsC
|
||||
drm->ioctlRetVal = EINVAL;
|
||||
|
||||
auto ioctlHelper = drm->getIoctlHelper();
|
||||
drm_i915_gem_context_create_ext gcc{};
|
||||
GemContextCreateExt gcc{};
|
||||
EXPECT_THROW(ioctlHelper->createCooperativeContext(drm.get(), gcc), std::runtime_error);
|
||||
EXPECT_EQ(1u, drm->ioctlCallsCount);
|
||||
}
|
||||
@@ -425,7 +425,7 @@ TEST_F(IoctlHelperPrelimFixture, givenIoctlSuccessWhenCreateCooperativeContexIsC
|
||||
drm->ioctlRetVal = 0u;
|
||||
|
||||
auto ioctlHelper = drm->getIoctlHelper();
|
||||
drm_i915_gem_context_create_ext gcc{};
|
||||
GemContextCreateExt gcc{};
|
||||
EXPECT_EQ(0u, ioctlHelper->createCooperativeContext(drm.get(), gcc));
|
||||
EXPECT_EQ(1u, drm->ioctlCallsCount);
|
||||
}
|
||||
|
||||
@@ -269,7 +269,7 @@ TEST(IoctlHelperTestsUpstream, whenCreateContextWithAccessCountersIsCalledThenEr
|
||||
auto drm = std::make_unique<DrmTipMock>(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
ASSERT_NE(nullptr, drm);
|
||||
|
||||
drm_i915_gem_context_create_ext gcc{};
|
||||
GemContextCreateExt gcc{};
|
||||
IoctlHelperUpstream ioctlHelper{};
|
||||
|
||||
EXPECT_EQ(static_cast<uint32_t>(EINVAL), ioctlHelper.createContextWithAccessCounters(drm.get(), gcc));
|
||||
@@ -280,7 +280,7 @@ TEST(IoctlHelperTestsUpstream, whenCreateCooperativeContexIsCalledThenErrorIsRet
|
||||
auto drm = std::make_unique<DrmTipMock>(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
ASSERT_NE(nullptr, drm);
|
||||
|
||||
drm_i915_gem_context_create_ext gcc{};
|
||||
GemContextCreateExt gcc{};
|
||||
IoctlHelperUpstream ioctlHelper{};
|
||||
|
||||
EXPECT_EQ(static_cast<uint32_t>(EINVAL), ioctlHelper.createCooperativeContext(drm.get(), gcc));
|
||||
|
||||
Reference in New Issue
Block a user