From 85df385582106d8f44ea1b6f0ccd70d5159ec5f2 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Fri, 26 Jul 2024 15:00:47 +0000 Subject: [PATCH] fix: ensure system info is queried before querying topology Signed-off-by: Mateusz Jablonski --- .../linux/debug_session_fixtures_linux.cpp | 3 ++- .../prelim/debug_session_fixtures_linux.cpp | 4 +++- .../linux/prelim/test_debug_api_linux.cpp | 3 +++ shared/source/os_interface/linux/drm_neo.cpp | 1 + shared/test/common/libult/linux/drm_mock.h | 1 + .../linux/drm_query_topology_prelim_tests.cpp | 2 ++ .../drm_query_topology_upstream_tests.cpp | 2 ++ .../linux/drm_system_info_tests.cpp | 18 ++++++++---------- .../unit_test/os_interface/linux/drm_tests.cpp | 4 ++++ .../linux/product_helper_linux_tests.cpp | 1 + 10 files changed, 27 insertions(+), 12 deletions(-) diff --git a/level_zero/tools/test/unit_tests/sources/debug/linux/debug_session_fixtures_linux.cpp b/level_zero/tools/test/unit_tests/sources/debug/linux/debug_session_fixtures_linux.cpp index c8790d65b6..390239e5df 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/linux/debug_session_fixtures_linux.cpp +++ b/level_zero/tools/test/unit_tests/sources/debug/linux/debug_session_fixtures_linux.cpp @@ -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; diff --git a/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/debug_session_fixtures_linux.cpp b/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/debug_session_fixtures_linux.cpp index 9f5f88ede3..15b5d45b68 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/debug_session_fixtures_linux.cpp +++ b/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/debug_session_fixtures_linux.cpp @@ -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; diff --git a/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/test_debug_api_linux.cpp b/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/test_debug_api_linux.cpp index 6c6bde7f07..ad10e24c4d 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/test_debug_api_linux.cpp +++ b/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/test_debug_api_linux.cpp @@ -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(mockDrm)); diff --git a/shared/source/os_interface/linux/drm_neo.cpp b/shared/source/os_interface/linux/drm_neo.cpp index bfe6d4ba2c..5be4e60caf 100644 --- a/shared/source/os_interface/linux/drm_neo.cpp +++ b/shared/source/os_interface/linux/drm_neo.cpp @@ -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; diff --git a/shared/test/common/libult/linux/drm_mock.h b/shared/test/common/libult/linux/drm_mock.h index 221a4d1b3f..13957c3a48 100644 --- a/shared/test/common/libult/linux/drm_mock.h +++ b/shared/test/common/libult/linux/drm_mock.h @@ -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; diff --git a/shared/test/unit_test/os_interface/linux/drm_query_topology_prelim_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_query_topology_prelim_tests.cpp index af88bcf2db..a1c362fdfe 100644 --- a/shared/test/unit_test/os_interface/linux/drm_query_topology_prelim_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_query_topology_prelim_tests.cpp @@ -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; diff --git a/shared/test/unit_test/os_interface/linux/drm_query_topology_upstream_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_query_topology_upstream_tests.cpp index 8832651018..beda6590e0 100644 --- a/shared/test/unit_test/os_interface/linux/drm_query_topology_upstream_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_query_topology_upstream_tests.cpp @@ -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); diff --git a/shared/test/unit_test/os_interface/linux/drm_system_info_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_system_info_tests.cpp index 552bb1aa4b..2d006cb4ce 100644 --- a/shared/test/unit_test/os_interface/linux/drm_system_info_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_system_info_tests.cpp @@ -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: diff --git a/shared/test/unit_test/os_interface/linux/drm_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_tests.cpp index 43a7fad8aa..a5f59e36bc 100644 --- a/shared/test/unit_test/os_interface/linux/drm_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_tests.cpp @@ -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); diff --git a/shared/test/unit_test/os_interface/linux/product_helper_linux_tests.cpp b/shared/test/unit_test/os_interface/linux/product_helper_linux_tests.cpp index d9cf4b72ad..641086356e 100644 --- a/shared/test/unit_test/os_interface/linux/product_helper_linux_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/product_helper_linux_tests.cpp @@ -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;