From a168bf2f330e2cd5912f158909252357883ea937 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Fri, 26 Jul 2024 12:53:49 +0000 Subject: [PATCH] fix: ensure drm topology is queried only once Signed-off-by: Mateusz Jablonski --- shared/source/os_interface/linux/drm_neo.cpp | 3 ++- shared/source/os_interface/linux/drm_neo.h | 1 + shared/test/common/libult/linux/drm_mock.h | 1 + .../os_interface/linux/product_helper_linux_tests.cpp | 3 +++ 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/shared/source/os_interface/linux/drm_neo.cpp b/shared/source/os_interface/linux/drm_neo.cpp index 525dcc529c..bfe6d4ba2c 100644 --- a/shared/source/os_interface/linux/drm_neo.cpp +++ b/shared/source/os_interface/linux/drm_neo.cpp @@ -1072,7 +1072,8 @@ void Drm::setupIoctlHelper(const PRODUCT_FAMILY productFamily) { bool Drm::queryTopology(const HardwareInfo &hwInfo, DrmQueryTopologyData &topologyData) { UNRECOVERABLE_IF(!engineInfoQueried); - + UNRECOVERABLE_IF(topologyQueried); + topologyQueried = true; auto result = this->ioctlHelper->getTopologyDataAndMap(hwInfo, topologyData, topologyMap); return result; } diff --git a/shared/source/os_interface/linux/drm_neo.h b/shared/source/os_interface/linux/drm_neo.h index 634a179e33..8990379789 100644 --- a/shared/source/os_interface/linux/drm_neo.h +++ b/shared/source/os_interface/linux/drm_neo.h @@ -365,6 +365,7 @@ class Drm : public DriverModel { bool memoryInfoQueried = false; bool engineInfoQueried = false; bool systemInfoQueried = false; + bool topologyQueried = false; private: int getParamIoctl(DrmParam param, int *dstValue); diff --git a/shared/test/common/libult/linux/drm_mock.h b/shared/test/common/libult/linux/drm_mock.h index 64ec823c2b..221a4d1b3f 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::topologyQueried; using Drm::virtualMemoryIds; using Drm::vmBindPatIndexProgrammingSupported; 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 63f172c713..d9cf4b72ad 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 @@ -103,6 +103,7 @@ TEST_F(MockProductHelperTestLinux, givenInvalidTopologyDataWhenConfiguringThenRe drm->storedEUVal = 0; DrmQueryTopologyData topologyData = {}; + drm->topologyQueried = false; EXPECT_FALSE(drm->queryTopology(outHwInfo, topologyData)); } @@ -113,6 +114,7 @@ TEST_F(MockProductHelperTestLinux, givenInvalidTopologyDataWhenConfiguringThenRe drm->storedEUVal = storedEUVal; DrmQueryTopologyData topologyData = {}; + drm->topologyQueried = false; EXPECT_FALSE(drm->queryTopology(outHwInfo, topologyData)); } @@ -123,6 +125,7 @@ TEST_F(MockProductHelperTestLinux, givenInvalidTopologyDataWhenConfiguringThenRe drm->storedEUVal = storedEUVal; DrmQueryTopologyData topologyData = {}; + drm->topologyQueried = false; EXPECT_FALSE(drm->queryTopology(outHwInfo, topologyData)); } }