Refactor: Update Drm::createDrmContext

Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:
Filip Hazubski
2021-11-30 14:38:41 +00:00
committed by Compute-Runtime-Automation
parent ce5f9c2214
commit fe08216102
8 changed files with 23 additions and 9 deletions

View File

@@ -561,7 +561,7 @@ TEST_F(DrmTests, GivenFailOnContextCreateWhenCreatingDrmThenDrmIsCreated) {
auto drm = DrmWrap::createDrm(*rootDeviceEnvironment);
EXPECT_NE(drm, nullptr);
failOnContextCreate = -1;
EXPECT_THROW(drm->createDrmContext(1, false), std::exception);
EXPECT_THROW(drm->createDrmContext(1, false, false), std::exception);
EXPECT_FALSE(drm->isPreemptionSupported());
failOnContextCreate = 0;
}
@@ -572,7 +572,7 @@ TEST_F(DrmTests, GivenFailOnSetPriorityWhenCreatingDrmThenDrmIsCreated) {
auto drm = DrmWrap::createDrm(*rootDeviceEnvironment);
EXPECT_NE(drm, nullptr);
failOnSetPriority = -1;
auto drmContext = drm->createDrmContext(1, false);
auto drmContext = drm->createDrmContext(1, false, false);
EXPECT_THROW(drm->setLowPriorityContextParam(drmContext), std::exception);
EXPECT_FALSE(drm->isPreemptionSupported());
failOnSetPriority = 0;

View File

@@ -181,7 +181,7 @@ TEST(DrmTest, GivenDrmWhenAskedForContextThatFailsThenFalseIsReturned) {
executionEnvironment->prepareRootDeviceEnvironments(1);
DrmMock *pDrm = new DrmMock(*executionEnvironment->rootDeviceEnvironments[0]);
pDrm->storedRetVal = -1;
EXPECT_THROW(pDrm->createDrmContext(1, false), std::exception);
EXPECT_THROW(pDrm->createDrmContext(1, false, false), std::exception);
pDrm->storedRetVal = 0;
delete pDrm;
}

View File

@@ -54,6 +54,17 @@ TEST(OSContext, givenOsContextCreatedDefaultIsFalseWhenSettingTrueThenFlagTrueRe
delete osContext;
}
TEST(OSContext, givenCooperativeEngineWhenIsCooperativeEngineIsCalledThenReturnTrue) {
auto engineDescriptor = EngineDescriptorHelper::getDefaultDescriptor();
engineDescriptor.engineTypeUsage.second = EngineUsage::Cooperative;
auto pOsContext = OsContext::create(nullptr, 0, engineDescriptor);
EXPECT_FALSE(pOsContext->isRegular());
EXPECT_FALSE(pOsContext->isLowPriority());
EXPECT_FALSE(pOsContext->isInternalEngine());
EXPECT_TRUE(pOsContext->isCooperativeEngine());
delete pOsContext;
}
struct DeferredOsContextCreationTests : ::testing::Test {
void SetUp() override {
device = std::unique_ptr<MockDevice>{MockDevice::createWithNewExecutionEnvironment<MockDevice>(defaultHwInfo.get())};

View File

@@ -391,12 +391,12 @@ void Drm::setUnrecoverableContext(uint32_t drmContextId) {
ioctl(DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &contextParam);
}
uint32_t Drm::createDrmContext(uint32_t drmVmId, bool isSpecialContextRequested) {
uint32_t Drm::createDrmContext(uint32_t drmVmId, bool isSpecialContextRequested, bool isCooperativeContextRequested) {
drm_i915_gem_context_create_ext gcc = {};
this->appendDrmContextFlags(gcc, isSpecialContextRequested);
auto retVal = this->createDrmContextExt(gcc, drmVmId, isSpecialContextRequested);
auto retVal = this->createDrmContextExt(gcc, drmVmId, isSpecialContextRequested, isCooperativeContextRequested);
UNRECOVERABLE_IF(retVal != 0);
if (drmVmId > 0) {

View File

@@ -119,7 +119,7 @@ class Drm : public DriverModel {
int queryAdapterBDF();
int createDrmVirtualMemory(uint32_t &drmVmId);
void destroyDrmVirtualMemory(uint32_t drmVmId);
uint32_t createDrmContext(uint32_t drmVmId, bool isSpecialContextRequested);
uint32_t createDrmContext(uint32_t drmVmId, bool isSpecialContextRequested, bool isCooperativeContextRequested);
void appendDrmContextFlags(drm_i915_gem_context_create_ext &gcc, bool isSpecialContextRequested);
void destroyDrmContext(uint32_t drmContextId);
int queryVmId(uint32_t drmContextId, uint32_t &vmId);
@@ -253,7 +253,8 @@ class Drm : public DriverModel {
protected:
Drm(std::unique_ptr<HwDeviceIdDrm> &&hwDeviceIdIn, RootDeviceEnvironment &rootDeviceEnvironment);
uint32_t createDrmContextExt(drm_i915_gem_context_create_ext &gcc, uint32_t drmVmId, bool isSpecialContextRequested);
uint32_t createDrmContextExt(drm_i915_gem_context_create_ext &gcc, uint32_t drmVmId, bool isSpecialContextRequested,
bool isCooperativeContextRequested);
int getQueueSliceCount(drm_i915_gem_context_param_sseu *sseu);
bool translateTopologyInfo(const drm_i915_query_topology_info *queryTopologyInfo, QueryTopologyData &data, TopologyMapping &mapping);
std::string generateUUID();

View File

@@ -144,7 +144,8 @@ bool Drm::isVmBindAvailable() {
return this->bindAvailable;
}
uint32_t Drm::createDrmContextExt(drm_i915_gem_context_create_ext &gcc, uint32_t drmVmId, bool isSpecialContextRequested) {
uint32_t Drm::createDrmContextExt(drm_i915_gem_context_create_ext &gcc, uint32_t drmVmId, bool isSpecialContextRequested,
bool isCooperativeContextRequested) {
return ioctl(DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT, &gcc);
}

View File

@@ -48,7 +48,7 @@ void OsContextLinux::initializeContext() {
for (auto deviceIndex = 0u; deviceIndex < deviceBitfield.size(); deviceIndex++) {
if (deviceBitfield.test(deviceIndex)) {
auto drmVmId = drm.getVirtualMemoryAddressSpace(deviceIndex);
auto drmContextId = drm.createDrmContext(drmVmId, drm.isVmBindAvailable());
auto drmContextId = drm.createDrmContext(drmVmId, drm.isVmBindAvailable(), isCooperativeEngine());
if (drm.areNonPersistentContextsSupported()) {
drm.setNonPersistentContext(drmContextId);
}

View File

@@ -40,6 +40,7 @@ class OsContext : public ReferenceTrackedObject<OsContext> {
bool isRegular() const { return engineUsage == EngineUsage::Regular; }
bool isLowPriority() const { return engineUsage == EngineUsage::LowPriority; }
bool isInternalEngine() const { return engineUsage == EngineUsage::Internal; }
bool isCooperativeEngine() const { return engineUsage == EngineUsage::Cooperative; }
bool isRootDevice() const { return rootDevice; }
bool isEngineInstanced() const { return engineInstancedDevice; }
virtual bool isDirectSubmissionSupported(const HardwareInfo &hwInfo) const { return false; }