Skip to content

Commit 07c4cb0

Browse files
committed
Fix init type coexistence and fix init recursion error
Signed-off-by: Neil R. Spruit <[email protected]>
1 parent b9b7660 commit 07c4cb0

File tree

5 files changed

+10
-37
lines changed

5 files changed

+10
-37
lines changed

source/loader/ze_ldrddi.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,11 @@ namespace loader
134134
for( auto& drv : loader::context->zeDrivers )
135135
{
136136
if (!drv.dditable.ze.Global.pfnInitDrivers) {
137-
drv.initStatus = ZE_RESULT_ERROR_UNINITIALIZED;
137+
drv.initDriversStatus = ZE_RESULT_ERROR_UNINITIALIZED;
138138
continue;
139139
}
140+
if(drv.initDriversStatus != ZE_RESULT_SUCCESS)
141+
continue;
140142

141143
if( ( 0 < *pCount ) && ( *pCount == total_driver_handle_count))
142144
break;
@@ -147,7 +149,7 @@ namespace loader
147149
if( ZE_RESULT_SUCCESS != result ) {
148150
// If Get Drivers fails with Uninitialized, then update the driver init status to prevent reporting this driver in the next get call.
149151
if (ZE_RESULT_ERROR_UNINITIALIZED == result) {
150-
drv.initStatus = result;
152+
drv.initDriversStatus = result;
151153
}
152154
continue;
153155
}

source/loader/ze_loader.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,8 @@ namespace loader
179179
if (drivers->size() == 1 && !loader::context->forceIntercept) {
180180
*requireDdiReinit = true;
181181
}
182+
} else {
183+
it++;
182184
}
183185
if(return_first_driver_result)
184186
return result;
@@ -309,8 +311,8 @@ namespace loader
309311
uint32_t pCount = 0;
310312
ze_result_t res = globalInitStored->pfnInitDrivers(&pCount, nullptr, desc);
311313
// Verify that this driver successfully init in the call above.
312-
if (driver.initStatus != ZE_RESULT_SUCCESS) {
313-
res = driver.initStatus;
314+
if (driver.initDriversStatus != ZE_RESULT_SUCCESS) {
315+
res = driver.initDriversStatus;
314316
}
315317
if (debugTraceEnabled) {
316318
std::string message = "init driver " + driver.name + " zeInitDrivers(" + loader::to_string(desc) + ") returning ";

source/loader/ze_loader_internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ namespace loader
3131
{
3232
HMODULE handle = NULL;
3333
ze_result_t initStatus = ZE_RESULT_SUCCESS;
34+
ze_result_t initDriversStatus = ZE_RESULT_SUCCESS;
3435
dditable_t dditable = {};
3536
std::string name;
3637
bool driverInuse = false;

test/CMakeLists.txt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,4 @@ set_property(TEST tests_both_succeed PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER
3737
add_test(NAME tests_both_gpu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenBothCallsSucceedWithGPUTypes*)
3838
set_property(TEST tests_both_gpu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
3939
add_test(NAME tests_both_npu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenBothCallsSucceedWithNPUTypes*)
40-
set_property(TEST tests_both_npu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
41-
add_test(NAME tests_only_one_gpu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenOnlyOneSucceedsforGPUTypes*)
42-
set_property(TEST tests_only_one_gpu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
43-
add_test(NAME tests_only_one_npu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenOnlyOneSucceedsforNPUTypes*)
44-
set_property(TEST tests_only_one_npu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
40+
set_property(TEST tests_both_npu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")

test/loader_api.cpp

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -192,32 +192,4 @@ TEST(
192192
EXPECT_GT(pCount, 0);
193193
}
194194

195-
TEST(
196-
LoaderInit,
197-
GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenOnlyOneSucceedsforGPUTypes) {
198-
199-
uint32_t pCount = 0;
200-
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
201-
desc.flags = UINT32_MAX;
202-
desc.pNext = nullptr;
203-
putenv_safe( const_cast<char *>( "ZEL_TEST_NULL_DRIVER_TYPE=GPU" ) );
204-
EXPECT_EQ(ZE_RESULT_ERROR_UNINITIALIZED, zeInit(ZE_INIT_FLAG_VPU_ONLY));
205-
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pCount, nullptr, &desc));
206-
EXPECT_GT(pCount, 0);
207-
}
208-
209-
TEST(
210-
LoaderInit,
211-
GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenOnlyOneSucceedsforNPUTypes) {
212-
213-
uint32_t pCount = 0;
214-
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
215-
desc.flags = UINT32_MAX;
216-
desc.pNext = nullptr;
217-
putenv_safe( const_cast<char *>( "ZEL_TEST_NULL_DRIVER_TYPE=NPU" ) );
218-
EXPECT_EQ(ZE_RESULT_ERROR_UNINITIALIZED, zeInit(ZE_INIT_FLAG_GPU_ONLY));
219-
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pCount, nullptr, &desc));
220-
EXPECT_GT(pCount, 0);
221-
}
222-
223195
} // namespace

0 commit comments

Comments
 (0)