Skip to content

Commit 808cc2e

Browse files
Fix successive failing calls to zeInitDrivers when no drivers found (#435)
Signed-off-by: Pratik Bari <pratik.bari@intel.com>
1 parent 880890a commit 808cc2e

File tree

4 files changed

+27
-1
lines changed

4 files changed

+27
-1
lines changed

scripts/templates/libapi.cpp.mako

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ ${th.make_func_name(n, tags, obj)}(
113113
return ${X}_RESULT_ERROR_UNINITIALIZED;
114114
}
115115

116+
if (${x}_lib::context->${n}DdiTable.load() == nullptr) {
117+
return ${X}_RESULT_ERROR_UNINITIALIZED;
118+
}
119+
116120
auto ${th.make_pfn_name(n, tags, obj)} = ${x}_lib::context->${n}DdiTable.load()->${th.get_table_name(n, tags, obj)}.${th.make_pfn_name(n, tags, obj)};
117121
if( nullptr == ${th.make_pfn_name(n, tags, obj)} ) {
118122
if(!ze_lib::context->isInitialized)

source/lib/ze_libapi.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,10 @@ zeInitDrivers(
267267
return ZE_RESULT_ERROR_UNINITIALIZED;
268268
}
269269

270+
if (ze_lib::context->zeDdiTable.load() == nullptr) {
271+
return ZE_RESULT_ERROR_UNINITIALIZED;
272+
}
273+
270274
auto pfnInitDrivers = ze_lib::context->zeDdiTable.load()->Global.pfnInitDrivers;
271275
if( nullptr == pfnInitDrivers ) {
272276
if(!ze_lib::context->isInitialized)

test/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ add_test(NAME tests_missing_api COMMAND tests --gtest_filter=*GivenZeInitDrivers
160160
set_property(TEST tests_missing_api PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
161161
add_test(NAME tests_multi_call_failure COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingZeInitDriversWithTypesUnsupportedWithFailureThenSupportedTypesThenSuccessReturned*)
162162
set_property(TEST tests_multi_call_failure PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
163+
add_test(NAME tests_no_initialization COMMAND tests --gtest_filter=*LoaderInit.GivenNoInitializationWhenCallingZeInitDriversThenErrorUninitializedIsReturned*)
164+
set_property(TEST tests_no_initialization PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1")
163165

164166
# Run with multiple drivers
165167
add_test(NAME tests_multi_driver_missing_initDrivers COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWithMultipleDriversMissingInitDriversWhenCallingZeInitDriversThenExpectSuccessForZeInit)

test/loader_api.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "gtest/gtest.h"
1010

1111
#include "loader/ze_loader.h"
12+
#include "source/lib/ze_lib.h"
1213
#include "ze_api.h"
1314
#include "zes_api.h"
1415
#include "zer_api.h"
@@ -254,6 +255,22 @@ TEST(
254255
EXPECT_GT(pCount, 0);
255256
}
256257

258+
TEST(
259+
LoaderInit,
260+
GivenNoInitializationWhenCallingZeInitDriversThenErrorUninitializedIsReturned) {
261+
262+
uint32_t pCount = 0;
263+
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
264+
desc.flags = UINT32_MAX;
265+
desc.pNext = nullptr;
266+
EXPECT_EQ(ZE_RESULT_ERROR_UNINITIALIZED, zeInitDrivers(&pCount, nullptr, &desc));
267+
EXPECT_EQ(pCount, 0);
268+
269+
pCount = 0;
270+
EXPECT_EQ(ZE_RESULT_ERROR_UNINITIALIZED, zeInitDrivers(&pCount, nullptr, &desc));
271+
EXPECT_EQ(pCount, 0);
272+
}
273+
257274
TEST(
258275
LoaderInit,
259276
GivenLevelZeroLoaderPresentWhenCallingZeInitDriversWithGPUTypeThenExpectPassWithGPUorAllOnly) {
@@ -3979,6 +3996,5 @@ TEST_F(DriverOrderingTest,
39793996
EXPECT_NE(errorDesc, nullptr);
39803997
EXPECT_EQ(0, strcmp(errorDesc, "ERROR UNSUPPORTED FEATURE"));
39813998
}
3982-
39833999

39844000
} // namespace

0 commit comments

Comments
 (0)