diff --git a/level_zero/tools/source/sysman/frequency/frequency.cpp b/level_zero/tools/source/sysman/frequency/frequency.cpp index 524394fb06..b61021e851 100644 --- a/level_zero/tools/source/sysman/frequency/frequency.cpp +++ b/level_zero/tools/source/sysman/frequency/frequency.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2021 Intel Corporation + * Copyright (C) 2020-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -11,6 +11,7 @@ #include "level_zero/tools/source/sysman/frequency/frequency_imp.h" #include "level_zero/tools/source/sysman/frequency/os_frequency.h" +#include "level_zero/tools/source/sysman/os_sysman.h" namespace L0 { @@ -37,6 +38,9 @@ ze_result_t FrequencyHandleContext::init(std::vector &device } ze_result_t FrequencyHandleContext::frequencyGet(uint32_t *pCount, zes_freq_handle_t *phFrequency) { + std::call_once(initFrequencyOnce, [this]() { + this->init(pOsSysman->getDeviceHandles()); + }); 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/frequency/frequency.h b/level_zero/tools/source/sysman/frequency/frequency.h index 6a8b048443..f38e43cb13 100644 --- a/level_zero/tools/source/sysman/frequency/frequency.h +++ b/level_zero/tools/source/sysman/frequency/frequency.h @@ -9,6 +9,7 @@ #include "level_zero/core/source/device/device.h" #include +#include #include struct _zes_freq_handle_t { @@ -64,6 +65,7 @@ struct FrequencyHandleContext { private: void createHandle(ze_device_handle_t deviceHandle, zes_freq_domain_t frequencyDomain); + std::once_flag initFrequencyOnce; }; } // namespace L0 diff --git a/level_zero/tools/source/sysman/sysman_imp.cpp b/level_zero/tools/source/sysman/sysman_imp.cpp index 978c7a01bf..7c9c76f2bd 100644 --- a/level_zero/tools/source/sysman/sysman_imp.cpp +++ b/level_zero/tools/source/sysman/sysman_imp.cpp @@ -100,9 +100,6 @@ ze_result_t SysmanDeviceImp::init() { if (pPowerHandleContext) { pPowerHandleContext->init(deviceHandles, hCoreDevice); } - if (pFrequencyHandleContext) { - pFrequencyHandleContext->init(deviceHandles); - } if (pFabricPortHandleContext) { pFabricPortHandleContext->init(); } diff --git a/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/test_zes_frequency.cpp b/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/test_zes_frequency.cpp index 8c457025c5..b1c4ad7ab6 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/test_zes_frequency.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/test_zes_frequency.cpp @@ -78,7 +78,7 @@ class SysmanDeviceFrequencyFixture : public SysmanDeviceFixture { deviceHandles.resize(subDeviceCount, nullptr); Device::fromHandle(device->toHandle())->getSubDevices(&subDeviceCount, deviceHandles.data()); } - pSysmanDeviceImp->pFrequencyHandleContext->init(deviceHandles); + getFreqHandles(0); } void TearDown() override { diff --git a/level_zero/tools/test/unit_tests/sources/sysman/frequency/windows/test_zes_frequency.cpp b/level_zero/tools/test/unit_tests/sources/sysman/frequency/windows/test_zes_frequency.cpp index f28321c52e..1158da8ba9 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/frequency/windows/test_zes_frequency.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/frequency/windows/test_zes_frequency.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2021 Intel Corporation + * Copyright (C) 2020-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -57,7 +57,7 @@ class SysmanDeviceFrequencyFixture : public SysmanDeviceFixture { deviceHandles.resize(subDeviceCount, nullptr); Device::fromHandle(device->toHandle())->getSubDevices(&subDeviceCount, deviceHandles.data()); } - pSysmanDeviceImp->pFrequencyHandleContext->init(deviceHandles); + get_frequency_handles(0); } void TearDown() override {