mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-09 22:43:00 +08:00
fix: ignore unrecognized topology type in xe path
Related-To: NEO-11125 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
ff4a919004
commit
5b6acb4f3f
@@ -428,6 +428,8 @@ bool IoctlHelperXe::getTopologyDataAndMap(const HardwareInfo &hwInfo, DrmQueryTo
|
||||
geomDss.resize(numTiles);
|
||||
computeDss.resize(numTiles);
|
||||
euDss.resize(numTiles);
|
||||
bool receivedDssInfo = false;
|
||||
bool receivedEuPerDssInfo = false;
|
||||
while (topologySize >= sizeof(drm_xe_query_topology_mask)) {
|
||||
drm_xe_query_topology_mask *topo = reinterpret_cast<drm_xe_query_topology_mask *>(dataPtr);
|
||||
UNRECOVERABLE_IF(topo == nullptr);
|
||||
@@ -439,16 +441,18 @@ bool IoctlHelperXe::getTopologyDataAndMap(const HardwareInfo &hwInfo, DrmQueryTo
|
||||
switch (topo->type) {
|
||||
case DRM_XE_TOPO_DSS_GEOMETRY:
|
||||
fillMask(geomDss[tileId], topo);
|
||||
receivedDssInfo = true;
|
||||
break;
|
||||
case DRM_XE_TOPO_DSS_COMPUTE:
|
||||
fillMask(computeDss[tileId], topo);
|
||||
receivedDssInfo = true;
|
||||
break;
|
||||
case DRM_XE_TOPO_EU_PER_DSS:
|
||||
fillMask(euDss[tileId], topo);
|
||||
receivedEuPerDssInfo = true;
|
||||
break;
|
||||
default:
|
||||
xeLog("Unhandle GT Topo type: %d\n", topo->type);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -463,7 +467,7 @@ bool IoctlHelperXe::getTopologyDataAndMap(const HardwareInfo &hwInfo, DrmQueryTo
|
||||
auto &dssInfo = isComputeDssEmpty ? geomDss : computeDss;
|
||||
getTopologyMap(numTiles, dssInfo.begin(), topologyMap);
|
||||
|
||||
return true;
|
||||
return receivedDssInfo && receivedEuPerDssInfo;
|
||||
}
|
||||
|
||||
void IoctlHelperXe::updateBindInfo(uint32_t handle, uint64_t userPtr, uint64_t size) {
|
||||
|
||||
@@ -733,6 +733,57 @@ TEST(IoctlHelperXeTest, givenGeomDssWhenGetTopologyDataAndMapThenResultsAreCorre
|
||||
}
|
||||
}
|
||||
|
||||
TEST(IoctlHelperXeTest, givenUnknownTopologyTypeWhenGetTopologyDataAndMapThenNotRecognizedTopologyIsIgnored) {
|
||||
|
||||
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
|
||||
DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]};
|
||||
auto &hwInfo = *executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo();
|
||||
auto xeIoctlHelper = std::make_unique<MockIoctlHelperXe>(drm);
|
||||
xeIoctlHelper->initialize();
|
||||
|
||||
constexpr int16_t unknownTopology = -1;
|
||||
|
||||
uint16_t tileId = 0;
|
||||
for (auto gtId = 0u; gtId < 3u; gtId++) {
|
||||
drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0b11'1111, 0, 0, 0, 0, 0, 0, 0});
|
||||
drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0, 0, 0, 0, 0, 0, 0, 0});
|
||||
drm.addMockedQueryTopologyData(gtId, DRM_XE_TOPO_EU_PER_DSS, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0});
|
||||
drm.addMockedQueryTopologyData(gtId, unknownTopology, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0});
|
||||
}
|
||||
DrmQueryTopologyData topologyData{};
|
||||
TopologyMap topologyMap{};
|
||||
|
||||
auto result = xeIoctlHelper->getTopologyDataAndMap(hwInfo, topologyData, topologyMap);
|
||||
ASSERT_TRUE(result);
|
||||
|
||||
// verify topology data
|
||||
EXPECT_EQ(1, topologyData.sliceCount);
|
||||
EXPECT_EQ(1, topologyData.maxSliceCount);
|
||||
|
||||
EXPECT_EQ(6, topologyData.subSliceCount);
|
||||
EXPECT_EQ(6, topologyData.maxSubSliceCount);
|
||||
|
||||
EXPECT_EQ(96, topologyData.euCount);
|
||||
EXPECT_EQ(16, topologyData.maxEuPerSubSlice);
|
||||
|
||||
// verify topology map
|
||||
std::vector<int> expectedSliceIndices{0};
|
||||
ASSERT_EQ(expectedSliceIndices.size(), topologyMap[tileId].sliceIndices.size());
|
||||
ASSERT_TRUE(topologyMap[tileId].sliceIndices.size() > 0);
|
||||
|
||||
for (auto i = 0u; i < expectedSliceIndices.size(); i++) {
|
||||
EXPECT_EQ(expectedSliceIndices[i], topologyMap[tileId].sliceIndices[i]);
|
||||
}
|
||||
|
||||
std::vector<int> expectedSubSliceIndices{0, 1, 2, 3, 4, 5};
|
||||
ASSERT_EQ(expectedSubSliceIndices.size(), topologyMap[tileId].subsliceIndices.size());
|
||||
ASSERT_TRUE(topologyMap[tileId].subsliceIndices.size() > 0);
|
||||
|
||||
for (auto i = 0u; i < expectedSubSliceIndices.size(); i++) {
|
||||
EXPECT_EQ(expectedSubSliceIndices[i], topologyMap[tileId].subsliceIndices[i]);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(IoctlHelperXeTest, givenComputeDssWhenGetTopologyDataAndMapThenResultsAreCorrect) {
|
||||
|
||||
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
|
||||
@@ -817,7 +868,7 @@ TEST(IoctlHelperXeTest, givenOnlyMediaTypeWhenGetTopologyDataAndMapThenSubsliceI
|
||||
TopologyMap topologyMap{};
|
||||
|
||||
auto result = xeIoctlHelper->getTopologyDataAndMap(hwInfo, topologyData, topologyMap);
|
||||
ASSERT_TRUE(result);
|
||||
EXPECT_FALSE(result);
|
||||
|
||||
// verify topology data
|
||||
EXPECT_EQ(1, topologyData.sliceCount);
|
||||
@@ -1144,7 +1195,7 @@ TEST(IoctlHelperXeTest, given2TileWithDisabledEvenDssAndComputeDssWhenGetTopolog
|
||||
}
|
||||
}
|
||||
|
||||
TEST(IoctlHelperXeTest, givenInvalidTypeFlagGetTopologyDataAndMapThenReturnFalse) {
|
||||
TEST(IoctlHelperXeTest, givenMissingSupportedTopologiesWhenGetTopologyDataAndMapThenReturnFalse) {
|
||||
|
||||
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
|
||||
DrmMockXe drm{*executionEnvironment->rootDeviceEnvironments[0]};
|
||||
@@ -1158,12 +1209,25 @@ TEST(IoctlHelperXeTest, givenInvalidTypeFlagGetTopologyDataAndMapThenReturnFalse
|
||||
drm.addMockedQueryTopologyData(tileId, incorrectFlagType, 8, {0b11'1111, 0, 0, 0, 0, 0, 0, 0});
|
||||
drm.addMockedQueryTopologyData(tileId, incorrectFlagType, 8, {0, 0, 0, 0, 0, 0, 0, 0});
|
||||
drm.addMockedQueryTopologyData(tileId, incorrectFlagType, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0});
|
||||
drm.addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0});
|
||||
|
||||
DrmQueryTopologyData topologyData{};
|
||||
TopologyMap topologyMap{};
|
||||
|
||||
auto result = xeIoctlHelper->getTopologyDataAndMap(hwInfo, topologyData, topologyMap);
|
||||
EXPECT_FALSE(result);
|
||||
|
||||
drm.addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_GEOMETRY, 8, {0, 0, 0, 0, 0, 0, 0, 0});
|
||||
result = xeIoctlHelper->getTopologyDataAndMap(hwInfo, topologyData, topologyMap);
|
||||
EXPECT_FALSE(result);
|
||||
drm.addMockedQueryTopologyData(tileId, DRM_XE_TOPO_DSS_COMPUTE, 8, {0b1111'1111, 0b1111'1111, 0, 0, 0, 0, 0, 0});
|
||||
result = xeIoctlHelper->getTopologyDataAndMap(hwInfo, topologyData, topologyMap);
|
||||
EXPECT_FALSE(result);
|
||||
|
||||
drm.queryTopology.clear();
|
||||
drm.addMockedQueryTopologyData(tileId, DRM_XE_TOPO_EU_PER_DSS, 4, {0b1111'1111, 0, 0, 0});
|
||||
result = xeIoctlHelper->getTopologyDataAndMap(hwInfo, topologyData, topologyMap);
|
||||
EXPECT_FALSE(result);
|
||||
}
|
||||
|
||||
TEST(IoctlHelperXeTest, whenCreatingEngineInfoThenProperEnginesAreDiscovered) {
|
||||
|
||||
Reference in New Issue
Block a user