From 97a3368aad88a8a0999cda787717cce3c5e5827a Mon Sep 17 00:00:00 2001 From: "Kulkarni, Ashwin Kumar" Date: Wed, 6 Jul 2022 12:07:17 +0000 Subject: [PATCH] Defer Sysman Frequency Initialization With this change, init for sysman Frequency API would not be done during zeInit. Rather init and thereby Frequency API handle creation would be done only when user explicitly requests to enumerate handles using zesDeviceEnumFrequencyDomains. Related-To: LOCI-3127 Signed-off-by: Kulkarni, Ashwin Kumar --- level_zero/tools/source/sysman/frequency/frequency.cpp | 6 +++++- level_zero/tools/source/sysman/frequency/frequency.h | 2 ++ level_zero/tools/source/sysman/sysman_imp.cpp | 3 --- .../sources/sysman/frequency/linux/test_zes_frequency.cpp | 2 +- .../sources/sysman/frequency/windows/test_zes_frequency.cpp | 4 ++-- 5 files changed, 10 insertions(+), 7 deletions(-) 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 {