Skip to content

Commit

Permalink
Fix init type coexistence and fix init recursion error
Browse files Browse the repository at this point in the history
Signed-off-by: Neil R. Spruit <[email protected]>
  • Loading branch information
nrspruit committed Sep 13, 2024
1 parent b9b7660 commit 07c4cb0
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 37 deletions.
6 changes: 4 additions & 2 deletions source/loader/ze_ldrddi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,9 +134,11 @@ namespace loader
for( auto& drv : loader::context->zeDrivers )
{
if (!drv.dditable.ze.Global.pfnInitDrivers) {
drv.initStatus = ZE_RESULT_ERROR_UNINITIALIZED;
drv.initDriversStatus = ZE_RESULT_ERROR_UNINITIALIZED;
continue;
}
if(drv.initDriversStatus != ZE_RESULT_SUCCESS)
continue;

if( ( 0 < *pCount ) && ( *pCount == total_driver_handle_count))
break;
Expand All @@ -147,7 +149,7 @@ namespace loader
if( ZE_RESULT_SUCCESS != result ) {
// If Get Drivers fails with Uninitialized, then update the driver init status to prevent reporting this driver in the next get call.
if (ZE_RESULT_ERROR_UNINITIALIZED == result) {
drv.initStatus = result;
drv.initDriversStatus = result;
}
continue;
}
Expand Down
6 changes: 4 additions & 2 deletions source/loader/ze_loader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,8 @@ namespace loader
if (drivers->size() == 1 && !loader::context->forceIntercept) {
*requireDdiReinit = true;
}
} else {
it++;
}
if(return_first_driver_result)
return result;
Expand Down Expand Up @@ -309,8 +311,8 @@ namespace loader
uint32_t pCount = 0;
ze_result_t res = globalInitStored->pfnInitDrivers(&pCount, nullptr, desc);
// Verify that this driver successfully init in the call above.
if (driver.initStatus != ZE_RESULT_SUCCESS) {
res = driver.initStatus;
if (driver.initDriversStatus != ZE_RESULT_SUCCESS) {
res = driver.initDriversStatus;
}
if (debugTraceEnabled) {
std::string message = "init driver " + driver.name + " zeInitDrivers(" + loader::to_string(desc) + ") returning ";
Expand Down
1 change: 1 addition & 0 deletions source/loader/ze_loader_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ namespace loader
{
HMODULE handle = NULL;
ze_result_t initStatus = ZE_RESULT_SUCCESS;
ze_result_t initDriversStatus = ZE_RESULT_SUCCESS;
dditable_t dditable = {};
std::string name;
bool driverInuse = false;
Expand Down
6 changes: 1 addition & 5 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,4 @@ set_property(TEST tests_both_succeed PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER
add_test(NAME tests_both_gpu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenBothCallsSucceedWithGPUTypes*)
set_property(TEST tests_both_gpu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
add_test(NAME tests_both_npu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenBothCallsSucceedWithNPUTypes*)
set_property(TEST tests_both_npu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
add_test(NAME tests_only_one_gpu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenOnlyOneSucceedsforGPUTypes*)
set_property(TEST tests_only_one_gpu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
add_test(NAME tests_only_one_npu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenOnlyOneSucceedsforNPUTypes*)
set_property(TEST tests_only_one_npu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
set_property(TEST tests_both_npu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
28 changes: 0 additions & 28 deletions test/loader_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -192,32 +192,4 @@ TEST(
EXPECT_GT(pCount, 0);
}

TEST(
LoaderInit,
GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenOnlyOneSucceedsforGPUTypes) {

uint32_t pCount = 0;
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
desc.flags = UINT32_MAX;
desc.pNext = nullptr;
putenv_safe( const_cast<char *>( "ZEL_TEST_NULL_DRIVER_TYPE=GPU" ) );
EXPECT_EQ(ZE_RESULT_ERROR_UNINITIALIZED, zeInit(ZE_INIT_FLAG_VPU_ONLY));
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pCount, nullptr, &desc));
EXPECT_GT(pCount, 0);
}

TEST(
LoaderInit,
GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenOnlyOneSucceedsforNPUTypes) {

uint32_t pCount = 0;
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
desc.flags = UINT32_MAX;
desc.pNext = nullptr;
putenv_safe( const_cast<char *>( "ZEL_TEST_NULL_DRIVER_TYPE=NPU" ) );
EXPECT_EQ(ZE_RESULT_ERROR_UNINITIALIZED, zeInit(ZE_INIT_FLAG_GPU_ONLY));
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pCount, nullptr, &desc));
EXPECT_GT(pCount, 0);
}

} // namespace

0 comments on commit 07c4cb0

Please sign in to comment.