fix: add missing gt_id when creating XE context

Related-To: GSD-8046

Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:
Dunajski, Bartosz
2024-02-23 13:37:28 +00:00
committed by Compute-Runtime-Automation
parent 2c10f5639e
commit 6cdd2d5dca
3 changed files with 32 additions and 0 deletions

View File

@@ -1209,6 +1209,7 @@ int IoctlHelperXe::createDrmContext(Drm &drm, OsContextLinux &osContext, uint32_
UNRECOVERABLE_IF(true);
return 0;
}
currentEngine->gt_id = static_cast<uint16_t>(deviceIndex);
engine.push_back(*currentEngine);
} else {
for (size_t i = 0; i < n; i++) {
@@ -1221,6 +1222,7 @@ int IoctlHelperXe::createDrmContext(Drm &drm, OsContextLinux &osContext, uint32_
UNRECOVERABLE_IF(true);
return 0;
}
currentEngine->gt_id = static_cast<uint16_t>(deviceIndex);
engine.push_back(*currentEngine);
}
}

View File

@@ -84,9 +84,14 @@ class DrmMockXeDebug : public DrmMockCustom {
} break;
case DrmIoctl::gemContextCreateExt: {
auto create = static_cast<struct drm_xe_exec_queue_create *>(arg);
execQueueCreateParams = *create;
if (create->extensions) {
receivedContextCreateSetParam = *reinterpret_cast<struct drm_xe_ext_set_property *>(create->extensions);
}
execQueueEngineInstances.clear();
for (uint16_t i = 0; i < create->num_placements; i++) {
execQueueEngineInstances.push_back(reinterpret_cast<drm_xe_engine_class_instance *>(create->instances)[i]);
}
ret = 0;
} break;
case DrmIoctl::gemVmCreate: {
@@ -184,6 +189,8 @@ class DrmMockXeDebug : public DrmMockCustom {
alignas(64) std::vector<uint8_t> queryTopology;
std::vector<drm_xe_ext_vm_set_debug_metadata> vmCreateMetadata;
std::vector<drm_xe_engine_class_instance> execQueueEngineInstances;
drm_xe_exec_queue_create execQueueCreateParams = {};
// Debugger ioctls
int debuggerOpenRetval = 10; // debugFd

View File

@@ -204,6 +204,29 @@ HWTEST_F(IoctlHelperXeTestFixture, GivenRunaloneModeRequiredReturnFalseWhenCreat
EXPECT_NE(ext.property, static_cast<uint32_t>(DRM_XE_EXEC_QUEUE_SET_PROPERTY_EU_DEBUG));
}
HWTEST_F(IoctlHelperXeTestFixture, givenDeviceIndexWhenCreatingContextThenSetCorrectGtId) {
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
auto &rootDeviceEnvironment = *executionEnvironment->rootDeviceEnvironments[0];
rootDeviceEnvironment.osInterface = std::make_unique<OSInterface>();
rootDeviceEnvironment.osInterface->setDriverModel(std::make_unique<DrmMockTime>(mockFd, rootDeviceEnvironment));
DrmMockXeDebug drm{*executionEnvironment->rootDeviceEnvironments[0]};
auto xeIoctlHelper = std::make_unique<MockIoctlHelperXeDebug>(drm);
auto engineInfo = xeIoctlHelper->createEngineInfo(false);
ASSERT_NE(nullptr, engineInfo);
OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor());
uint16_t deviceIndex = 2;
xeIoctlHelper->createDrmContext(drm, osContext, 0, deviceIndex);
EXPECT_EQ(1u, drm.execQueueCreateParams.num_placements);
ASSERT_EQ(1u, drm.execQueueEngineInstances.size());
EXPECT_EQ(deviceIndex, drm.execQueueEngineInstances[0].gt_id);
}
HWTEST_F(IoctlHelperXeTestFixture, GivenRunaloneModeRequiredReturnTrueWhenCreateDrmContextThenRunAloneContextIsRequested) {
DebugManagerStateRestore restorer;
struct MockGfxCoreHelperHw : NEO::GfxCoreHelperHw<FamilyType> {