mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-21 01:04:57 +08:00
Fix storing VmIds in OsContextLinux
Related-To: NEO-5801 Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
352254416f
commit
27c28d275e
@@ -523,7 +523,7 @@ TEST(DrmTest, givenDrmWithPerContextVMRequiredWhenCreatingOsContextsThenImplicit
|
||||
EXPECT_EQ(0u, drmMock.receivedCreateContextId);
|
||||
}
|
||||
|
||||
TEST(DrmTest, givenDrmWithPerContextVMRequiredWhenCreatingOsContextsThenImplicitVmIdPerContextIsQueriedAndStored) {
|
||||
TEST(DrmTest, givenPerContextVMRequiredWhenCreatingOsContextsThenImplicitVmIdPerContextIsQueriedAndStored) {
|
||||
auto &rootEnv = *platform()->peekExecutionEnvironment()->rootDeviceEnvironments[0];
|
||||
rootEnv.executionEnvironment.setDebuggingEnabled();
|
||||
|
||||
@@ -538,11 +538,60 @@ TEST(DrmTest, givenDrmWithPerContextVMRequiredWhenCreatingOsContextsThenImplicit
|
||||
EXPECT_EQ(1u, drmMock.receivedContextParamRequestCount);
|
||||
|
||||
auto &drmVmIds = osContext.getDrmVmIds();
|
||||
EXPECT_EQ(1u, drmVmIds.size());
|
||||
EXPECT_EQ(32u, drmVmIds.size());
|
||||
|
||||
EXPECT_EQ(20u, drmVmIds[0]);
|
||||
}
|
||||
|
||||
TEST(DrmTest, givenPerContextVMRequiredWhenCreatingOsContextForSubDeviceThenImplicitVmIdPerContextIsQueriedAndStoredAtSubDeviceIndex) {
|
||||
auto &rootEnv = *platform()->peekExecutionEnvironment()->rootDeviceEnvironments[0];
|
||||
rootEnv.executionEnvironment.setDebuggingEnabled();
|
||||
|
||||
DrmMock drmMock(rootEnv);
|
||||
EXPECT_TRUE(drmMock.requirePerContextVM);
|
||||
|
||||
drmMock.StoredRetValForVmId = 20;
|
||||
DeviceBitfield deviceBitfield(1 << 3);
|
||||
|
||||
OsContextLinux osContext(drmMock, 0u, deviceBitfield, EngineTypeUsage{aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::Disabled, false);
|
||||
osContext.ensureContextInitialized();
|
||||
EXPECT_EQ(0u, drmMock.receivedCreateContextId);
|
||||
EXPECT_EQ(1u, drmMock.receivedContextParamRequestCount);
|
||||
|
||||
auto &drmVmIds = osContext.getDrmVmIds();
|
||||
EXPECT_EQ(32u, drmVmIds.size());
|
||||
|
||||
EXPECT_EQ(20u, drmVmIds[3]);
|
||||
|
||||
EXPECT_EQ(0u, drmVmIds[0]);
|
||||
EXPECT_EQ(0u, drmVmIds[2]);
|
||||
}
|
||||
|
||||
TEST(DrmTest, givenPerContextVMRequiredWhenCreatingOsContextsForRootDeviceThenImplicitVmIdsPerContextAreQueriedAndStoredAtSubDeviceIndices) {
|
||||
auto &rootEnv = *platform()->peekExecutionEnvironment()->rootDeviceEnvironments[0];
|
||||
rootEnv.executionEnvironment.setDebuggingEnabled();
|
||||
|
||||
DrmMock drmMock(rootEnv);
|
||||
EXPECT_TRUE(drmMock.requirePerContextVM);
|
||||
|
||||
drmMock.StoredRetValForVmId = 20;
|
||||
DeviceBitfield deviceBitfield(1 | 1 << 1);
|
||||
|
||||
OsContextLinux osContext(drmMock, 0u, deviceBitfield, EngineTypeUsage{aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::Disabled, false);
|
||||
osContext.ensureContextInitialized();
|
||||
EXPECT_EQ(0u, drmMock.receivedCreateContextId);
|
||||
EXPECT_EQ(2u, drmMock.receivedContextParamRequestCount);
|
||||
|
||||
auto &drmVmIds = osContext.getDrmVmIds();
|
||||
EXPECT_EQ(32u, drmVmIds.size());
|
||||
|
||||
EXPECT_EQ(20u, drmVmIds[0]);
|
||||
EXPECT_EQ(20u, drmVmIds[1]);
|
||||
|
||||
EXPECT_EQ(0u, drmVmIds[2]);
|
||||
EXPECT_EQ(0u, drmVmIds[31]);
|
||||
}
|
||||
|
||||
TEST(DrmTest, givenNoPerContextVmsDrmWhenCreatingOsContextsThenVmIdIsNotQueriedAndStored) {
|
||||
auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
|
||||
executionEnvironment->prepareRootDeviceEnvironments(1);
|
||||
|
||||
@@ -43,6 +43,10 @@ void OsContextLinux::initializeContext() {
|
||||
bool submitDirect = false;
|
||||
this->isDirectSubmissionAvailable(*drm.getRootDeviceEnvironment().getHardwareInfo(), submitDirect);
|
||||
|
||||
if (drm.isPerContextVMRequired()) {
|
||||
this->drmVmIds.resize(deviceBitfield.size(), 0);
|
||||
}
|
||||
|
||||
for (auto deviceIndex = 0u; deviceIndex < deviceBitfield.size(); deviceIndex++) {
|
||||
if (deviceBitfield.test(deviceIndex)) {
|
||||
auto drmVmId = drm.getVirtualMemoryAddressSpace(deviceIndex);
|
||||
@@ -74,7 +78,8 @@ void OsContextLinux::initializeContext() {
|
||||
DEBUG_BREAK_IF(drmVmId == 0);
|
||||
DEBUG_BREAK_IF(ret != 0);
|
||||
UNUSED_VARIABLE(ret);
|
||||
this->drmVmIds.push_back(drmVmId);
|
||||
UNRECOVERABLE_IF(this->drmVmIds.size() <= deviceIndex);
|
||||
this->drmVmIds[deviceIndex] = drmVmId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user