Skip to content

Commit d066e2d

Browse files
Support for lazy init in zeInit flow
Modifications for firmware lazy init implementation Related-To: LOCI-3127 Signed-off-by: Kulkarni, Ashwin Kumar <[email protected]>
1 parent 0d42fdf commit d066e2d

File tree

4 files changed

+33
-6
lines changed

4 files changed

+33
-6
lines changed

level_zero/tools/source/sysman/firmware/firmware.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020-2021 Intel Corporation
2+
* Copyright (C) 2020-2022 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -39,6 +39,9 @@ void FirmwareHandleContext::init() {
3939
}
4040

4141
ze_result_t FirmwareHandleContext::firmwareGet(uint32_t *pCount, zes_firmware_handle_t *phFirmware) {
42+
std::call_once(initFirmwareOnce, [this]() {
43+
this->init();
44+
});
4245
uint32_t handleListSize = static_cast<uint32_t>(handleList.size());
4346
uint32_t numToCopy = std::min(*pCount, handleListSize);
4447
if (0 == *pCount || *pCount > handleListSize) {

level_zero/tools/source/sysman/firmware/firmware.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#pragma once
99
#include <level_zero/zes_api.h>
1010

11+
#include <mutex>
1112
#include <string>
1213
#include <vector>
1314

@@ -47,6 +48,7 @@ struct FirmwareHandleContext {
4748

4849
private:
4950
void createHandle(const std::string &fwType);
51+
std::once_flag initFirmwareOnce;
5052
};
5153

5254
} // namespace L0

level_zero/tools/source/sysman/sysman_imp.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,6 @@ ze_result_t SysmanDeviceImp::init() {
136136
if (pFanHandleContext) {
137137
pFanHandleContext->init();
138138
}
139-
if (pFirmwareHandleContext) {
140-
pFirmwareHandleContext->init();
141-
}
142139
if (pDiagnosticsHandleContext) {
143140
pDiagnosticsHandleContext->init();
144141
}

level_zero/tools/test/unit_tests/sources/sysman/firmware/linux/test_zes_sysman_firmware.cpp

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ class ZesFirmwareFixture : public SysmanDeviceFixture {
3838
delete handle;
3939
}
4040
pSysmanDeviceImp->pFirmwareHandleContext->handleList.clear();
41-
pSysmanDeviceImp->pFirmwareHandleContext->init();
4241
}
4342
void TearDown() override {
4443
if (!sysmanUltsEnable) {
@@ -48,7 +47,11 @@ class ZesFirmwareFixture : public SysmanDeviceFixture {
4847
pLinuxSysmanImp->pFsAccess = pFsAccessOriginal;
4948
SysmanDeviceFixture::TearDown();
5049
}
51-
50+
void initFirmware() {
51+
uint32_t count = 0;
52+
ze_result_t result = zesDeviceEnumFirmwares(device->toHandle(), &count, nullptr);
53+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
54+
}
5255
std::vector<zes_firmware_handle_t> getFirmwareHandles(uint32_t count) {
5356
std::vector<zes_firmware_handle_t> handles(count, nullptr);
5457
EXPECT_EQ(zesDeviceEnumFirmwares(device->toHandle(), &count, handles.data()), ZE_RESULT_SUCCESS);
@@ -99,6 +102,8 @@ TEST_F(ZesFirmwareFixture, GivenComponentCountZeroWhenCallingzesFirmwareGetThenZ
99102
}
100103

101104
TEST_F(ZesFirmwareFixture, GivenValidFirmwareHandleWhenGettingFirmwarePropertiesThenVersionIsReturned) {
105+
initFirmware();
106+
102107
FirmwareImp *ptestFirmwareImp = new FirmwareImp(pSysmanDeviceImp->pFirmwareHandleContext->pOsSysman, mockSupportedFwTypes[0]);
103108
pSysmanDeviceImp->pFirmwareHandleContext->handleList.push_back(ptestFirmwareImp);
104109

@@ -114,6 +119,8 @@ TEST_F(ZesFirmwareFixture, GivenValidFirmwareHandleWhenGettingFirmwareProperties
114119
}
115120

116121
TEST_F(ZesFirmwareFixture, GivenValidFirmwareHandleWhenGettingOpromPropertiesThenVersionIsReturned) {
122+
initFirmware();
123+
117124
FirmwareImp *ptestFirmwareImp = new FirmwareImp(pSysmanDeviceImp->pFirmwareHandleContext->pOsSysman, mockSupportedFwTypes[1]);
118125
pSysmanDeviceImp->pFirmwareHandleContext->handleList.push_back(ptestFirmwareImp);
119126

@@ -153,6 +160,8 @@ TEST_F(ZesFirmwareFixture, GivenRepeatedFWTypesWhenInitializingFirmwareContextTh
153160
}
154161

155162
TEST_F(ZesFirmwareFixture, GivenValidFirmwareHandleWhenFlashingGscFirmwareThenSuccessIsReturned) {
163+
initFirmware();
164+
156165
FirmwareImp *ptestFirmwareImp = new FirmwareImp(pSysmanDeviceImp->pFirmwareHandleContext->pOsSysman, mockSupportedFwTypes[0]);
157166
pSysmanDeviceImp->pFirmwareHandleContext->handleList.push_back(ptestFirmwareImp);
158167

@@ -194,6 +203,22 @@ TEST_F(ZesFirmwareFixture, GivenFirmwareInitializationFailureThenCreateHandleMus
194203
pSysmanDeviceImp->pFirmwareHandleContext->init();
195204
EXPECT_EQ(0u, pSysmanDeviceImp->pFirmwareHandleContext->handleList.size());
196205
}
206+
TEST_F(ZesFirmwareFixture, GivenNewFirmwareContextWithHandleSizeZeroWhenFirmwareEnumerateIsCalledThenSuccessResultIsReturned) {
207+
uint32_t count = 0;
208+
OsSysman *pOsSysman = pSysmanDeviceImp->pFirmwareHandleContext->pOsSysman;
209+
210+
for (const auto &handle : pSysmanDeviceImp->pFirmwareHandleContext->handleList) {
211+
delete handle;
212+
}
213+
pSysmanDeviceImp->pFirmwareHandleContext->handleList.clear();
214+
delete pSysmanDeviceImp->pFirmwareHandleContext;
215+
216+
pSysmanDeviceImp->pFirmwareHandleContext = new FirmwareHandleContext(pOsSysman);
217+
EXPECT_EQ(0u, pSysmanDeviceImp->pFirmwareHandleContext->handleList.size());
218+
ze_result_t result = zesDeviceEnumFirmwares(device->toHandle(), &count, nullptr);
219+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
220+
EXPECT_EQ(true, (count > 0));
221+
}
197222

198223
TEST_F(ZesFirmwareFixture, GivenValidFirmwareHandleFirmwareLibraryCallFailureWhenGettingFirmwarePropertiesThenUnknownIsReturned) {
199224
for (const auto &handle : pSysmanDeviceImp->pFirmwareHandleContext->handleList) {

0 commit comments

Comments
 (0)