diff --git a/level_zero/tools/source/sysman/diagnostics/diagnostics.cpp b/level_zero/tools/source/sysman/diagnostics/diagnostics.cpp index f6406ca408..6e6421ceae 100644 --- a/level_zero/tools/source/sysman/diagnostics/diagnostics.cpp +++ b/level_zero/tools/source/sysman/diagnostics/diagnostics.cpp @@ -34,6 +34,9 @@ void DiagnosticsHandleContext::init() { } ze_result_t DiagnosticsHandleContext::diagnosticsGet(uint32_t *pCount, zes_diag_handle_t *phDiagnostics) { + std::call_once(initDiagnosticsOnce, [this]() { + this->init(); + }); uint32_t handleListSize = static_cast(handleList.size()); uint32_t numToCopy = std::min(*pCount, handleListSize); if (0 == *pCount || *pCount > handleListSize) { diff --git a/level_zero/tools/source/sysman/diagnostics/diagnostics.h b/level_zero/tools/source/sysman/diagnostics/diagnostics.h index dba8a12203..b5b746c5c1 100644 --- a/level_zero/tools/source/sysman/diagnostics/diagnostics.h +++ b/level_zero/tools/source/sysman/diagnostics/diagnostics.h @@ -9,6 +9,7 @@ #include "level_zero/core/source/device/device.h" #include +#include #include #include @@ -47,6 +48,7 @@ struct DiagnosticsHandleContext { private: void createHandle(const std::string &diagTests); + std::once_flag initDiagnosticsOnce; }; } // namespace L0 diff --git a/level_zero/tools/source/sysman/sysman_imp.cpp b/level_zero/tools/source/sysman/sysman_imp.cpp index a407749182..978c7a01bf 100644 --- a/level_zero/tools/source/sysman/sysman_imp.cpp +++ b/level_zero/tools/source/sysman/sysman_imp.cpp @@ -133,9 +133,6 @@ ze_result_t SysmanDeviceImp::init() { if (pFanHandleContext) { pFanHandleContext->init(); } - if (pDiagnosticsHandleContext) { - pDiagnosticsHandleContext->init(); - } if (pPerformanceHandleContext) { pPerformanceHandleContext->init(deviceHandles, hCoreDevice); } diff --git a/level_zero/tools/test/unit_tests/sources/sysman/diagnostics/linux/test_zes_sysman_diagnostics.cpp b/level_zero/tools/test/unit_tests/sources/sysman/diagnostics/linux/test_zes_sysman_diagnostics.cpp index 98cd164a28..44e05ce858 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/diagnostics/linux/test_zes_sysman_diagnostics.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/diagnostics/linux/test_zes_sysman_diagnostics.cpp @@ -98,7 +98,6 @@ class ZesDiagnosticsFixture : public SysmanDeviceFixture { } pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.clear(); productFamily = pLinuxSysmanImp->getDeviceHandle()->getNEODevice()->getHardwareInfo().platform.eProductFamily; - pSysmanDeviceImp->pDiagnosticsHandleContext->init(); } void TearDown() override {