fix: ensure system info is queried before querying topology

Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2024-07-26 15:00:47 +00:00
committed by Compute-Runtime-Automation
parent 06457b942e
commit 85df385582
10 changed files with 27 additions and 12 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2023 Intel Corporation
* Copyright (C) 2023-2024 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -31,6 +31,7 @@ void DebugApiLinuxFixture::setUp(NEO::HardwareInfo *hwInfo) {
mockDrm->storedEUVal = hwInfo->gtSystemInfo.EUCount;
}
NEO::DrmQueryTopologyData topologyData = {};
mockDrm->systemInfoQueried = true;
mockDrm->queryTopology(neoDevice->getHardwareInfo(), topologyData);
auto &rootDeviceEnvironment = *neoDevice->executionEnvironment->rootDeviceEnvironments[0];
auto gtSystemInfo = &rootDeviceEnvironment.getMutableHardwareInfo()->gtSystemInfo;

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022-2023 Intel Corporation
* Copyright (C) 2022-2024 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -32,6 +32,7 @@ void DebugApiLinuxPrelimFixture::setUp(NEO::HardwareInfo *hwInfo) {
mockDrm->storedEUVal = hwInfo->gtSystemInfo.EUCount;
}
NEO::DrmQueryTopologyData topologyData = {};
mockDrm->systemInfoQueried = true;
mockDrm->queryTopology(neoDevice->getHardwareInfo(), topologyData);
auto &rootDeviceEnvironment = *neoDevice->executionEnvironment->rootDeviceEnvironments[0];
auto gtSystemInfo = &rootDeviceEnvironment.getMutableHardwareInfo()->gtSystemInfo;
@@ -63,6 +64,7 @@ void DebugApiLinuxMultiDeviceFixture::setUp() {
ASSERT_NE(nullptr, engineInfo->getEngineInstance(1, hwInfo.capabilityTable.defaultEngineType));
NEO::DrmQueryTopologyData topologyData = {};
mockDrm->systemInfoQueried = true;
mockDrm->queryTopology(neoDevice->getHardwareInfo(), topologyData);
auto &rootDeviceEnvironment = *neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[0];
auto gtSystemInfo = &rootDeviceEnvironment.getMutableHardwareInfo()->gtSystemInfo;

View File

@@ -146,6 +146,7 @@ TEST(DebugSessionLinuxi915Test, WhenConvertingThreadIDsForDeviceWithSingleSliceT
NEO::DrmQueryTopologyData topologyData = {};
mockDrm->engineInfoQueried = true;
mockDrm->systemInfoQueried = true;
mockDrm->queryTopology(neoDevice->getHardwareInfo(), topologyData);
neoDevice->executionEnvironment->rootDeviceEnvironments[0]->osInterface.reset(new NEO::OSInterface);
@@ -192,6 +193,7 @@ TEST(DebugSessionLinuxi915Test, WhenConvertingThreadIDsForDeviceWithMultipleSlic
NEO::DrmQueryTopologyData topologyData = {};
mockDrm->engineInfoQueried = true;
mockDrm->systemInfoQueried = true;
mockDrm->queryTopology(neoDevice->getHardwareInfo(), topologyData);
neoDevice->executionEnvironment->rootDeviceEnvironments[0]->osInterface.reset(new NEO::OSInterface);
@@ -236,6 +238,7 @@ TEST(DebugSessionLinuxi915Test, GivenDeviceWithSingleSliceWhenCallingAreRequeste
NEO::DrmQueryTopologyData topologyData = {};
mockDrm->engineInfoQueried = true;
mockDrm->systemInfoQueried = true;
mockDrm->queryTopology(neoDevice->getHardwareInfo(), topologyData);
neoDevice->executionEnvironment->rootDeviceEnvironments[0]->osInterface.reset(new NEO::OSInterface);
neoDevice->executionEnvironment->rootDeviceEnvironments[0]->osInterface->setDriverModel(std::unique_ptr<DriverModel>(mockDrm));

View File

@@ -1071,6 +1071,7 @@ void Drm::setupIoctlHelper(const PRODUCT_FAMILY productFamily) {
}
bool Drm::queryTopology(const HardwareInfo &hwInfo, DrmQueryTopologyData &topologyData) {
UNRECOVERABLE_IF(!systemInfoQueried);
UNRECOVERABLE_IF(!engineInfoQueried);
UNRECOVERABLE_IF(topologyQueried);
topologyQueried = true;

View File

@@ -54,6 +54,7 @@ class DrmMock : public Drm {
using Drm::setupIoctlHelper;
using Drm::sliceCountChangeSupported;
using Drm::systemInfo;
using Drm::systemInfoQueried;
using Drm::topologyQueried;
using Drm::virtualMemoryIds;
using Drm::vmBindPatIndexProgrammingSupported;

View File

@@ -27,6 +27,7 @@ TEST(DrmQueryTopologyTest, givenDrmWhenQueryTopologyCalledThenPassNoFlags) {
DrmQueryTopologyData topologyData = {};
drm.engineInfoQueried = true;
drm.systemInfoQueried = true;
EXPECT_TRUE(drm.queryTopology(*drm.context.hwInfo, topologyData));
constexpr uint32_t expectedFlag = 0;
@@ -111,6 +112,7 @@ struct QueryTopologyTests : ::testing::Test {
drmMock->memoryInfoQueried = false;
EXPECT_TRUE(drmMock->queryMemoryInfo());
EXPECT_TRUE(drmMock->queryEngineInfo());
drmMock->systemInfoQueried = true;
}
DebugManagerStateRestore stateRestorer;

View File

@@ -17,6 +17,7 @@ TEST(DrmQueryTopologyTest, GivenDrmWhenQueryingTopologyInfoCorrectMaxValuesAreSe
DrmQueryTopologyData topologyData = {};
drm.engineInfoQueried = true;
drm.systemInfoQueried = true;
EXPECT_TRUE(drm.queryTopology(*executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(), topologyData));
EXPECT_EQ(drm.storedSVal, topologyData.sliceCount);
@@ -34,6 +35,7 @@ TEST(DrmQueryTopologyTest, givenDrmWhenGettingSliceMappingsThenCorrectMappingRet
DrmQueryTopologyData topologyData = {};
drmMock.engineInfoQueried = true;
drmMock.systemInfoQueried = true;
EXPECT_TRUE(drmMock.queryTopology(*executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(), topologyData));
auto device0SliceMapping = drmMock.getSliceMappings(0);

View File

@@ -48,12 +48,15 @@ TEST(DrmSystemInfoTest, givenSystemInfoCreatedWhenQueryingSpecificAtrributesThen
EXPECT_EQ(0u, systemInfo.getCsrSizeInMb());
}
struct DrmMockToQuerySystemInfo : public DrmMock {
DrmMockToQuerySystemInfo(RootDeviceEnvironment &rootDeviceEnvironment)
: DrmMock(rootDeviceEnvironment) {}
bool querySystemInfo() override {
systemInfoQueried = true;
return false;
}
};
TEST(DrmSystemInfoTest, givenSetupHardwareInfoWhenQuerySystemInfoFalseThenSystemInfoIsNotCreated) {
struct DrmMockToQuerySystemInfo : public DrmMock {
DrmMockToQuerySystemInfo(RootDeviceEnvironment &rootDeviceEnvironment)
: DrmMock(rootDeviceEnvironment) {}
bool querySystemInfo() override { return false; }
};
class MyMockIoctlHelper : public IoctlHelperPrelim20 {
public:
@@ -88,11 +91,6 @@ TEST(DrmSystemInfoTest, givenSetupHardwareInfoWhenQuerySystemInfoFalseThenSystem
}
TEST(DrmSystemInfoTest, whenSetupHardwareInfoThenReleaseHelperContainsCorrectIpVersion) {
struct DrmMockToQuerySystemInfo : public DrmMock {
DrmMockToQuerySystemInfo(RootDeviceEnvironment &rootDeviceEnvironment)
: DrmMock(rootDeviceEnvironment) {}
bool querySystemInfo() override { return false; }
};
class MyMockIoctlHelper : public IoctlHelperPrelim20 {
public:

View File

@@ -983,6 +983,7 @@ TEST(DrmQueryTest, GivenLessAvailableSubSlicesThanMaxSubSlicesWhenQueryingTopolo
drm.storedEUVal = drm.storedSSVal * 4;
drm.engineInfoQueried = true;
drm.systemInfoQueried = true;
EXPECT_TRUE(drm.queryTopology(*executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(), topologyData));
EXPECT_EQ(2, topologyData.sliceCount);
@@ -1002,6 +1003,7 @@ TEST(DrmQueryTest, givenDrmWhenGettingTopologyMapThenCorrectMapIsReturned) {
DrmQueryTopologyData topologyData = {};
drmMock.engineInfoQueried = true;
drmMock.systemInfoQueried = true;
EXPECT_TRUE(drmMock.queryTopology(*executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(), topologyData));
auto topologyMap = drmMock.getTopologyMap();
@@ -1025,6 +1027,7 @@ TEST(DrmQueryTest, GivenSingleSliceConfigWhenQueryingTopologyInfoThenSubsliceInd
drm.storedEUVal = drm.storedSSVal * 4;
drm.engineInfoQueried = true;
drm.systemInfoQueried = true;
EXPECT_TRUE(drm.queryTopology(*executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(), topologyData));
EXPECT_EQ(1, topologyData.sliceCount);
@@ -1058,6 +1061,7 @@ TEST(DrmQueryTest, GivenMultiSliceConfigWhenQueryingTopologyInfoThenSubsliceIndi
drm.storedEUVal = drm.storedSSVal * 4;
drm.engineInfoQueried = true;
drm.systemInfoQueried = true;
EXPECT_TRUE(drm.queryTopology(*executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(), topologyData));
EXPECT_EQ(2, topologyData.sliceCount);

View File

@@ -96,6 +96,7 @@ TEST_F(MockProductHelperTestLinux, givenInvalidTopologyDataWhenConfiguringThenRe
auto storedSSVal = drm->storedSSVal;
auto storedEUVal = drm->storedEUVal;
drm->engineInfoQueried = true;
drm->systemInfoQueried = true;
{
// 0 euCount
drm->storedSVal = storedSVal;