Skip to content

Commit 3269b1f

Browse files
committed
Fix null driver init and driver init checks
Signed-off-by: Neil R. Spruit <neil.r.spruit@intel.com>
1 parent af36a90 commit 3269b1f

6 files changed

Lines changed: 53 additions & 10 deletions

File tree

scripts/templates/ldrddi.cpp.mako

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,16 @@ namespace loader
7676
if(drv.initStatus != ZE_RESULT_SUCCESS)
7777
continue;
7878
%endif
79-
if (!drv.handle) {
79+
if (!drv.handle || !drv.ddiInitialized) {
8080
%if namespace != "zes":
8181
bool sysmanInit = false;
8282
%else:
8383
bool sysmanInit = true;
8484
%endif
85-
loader::context->init_driver( drv, flags, nullptr, nullptr, nullptr, sysmanInit );
85+
auto res = loader::context->init_driver( drv, flags, nullptr, nullptr, nullptr, sysmanInit );
86+
if (res != ZE_RESULT_SUCCESS) {
87+
continue;
88+
}
8689
}
8790
%if re.match(r"Init", obj['name']) and namespace == "zes":
8891
if (!drv.dditable.${n}.${th.get_table_name(n, tags, obj)}.${th.make_pfn_name(n, tags, obj)}) {

scripts/templates/ze_loader_internal.h.mako

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ namespace loader
7070
bool driverDDIHandleSupportQueried = false;
7171
ze_driver_handle_t zerDriverHandle = nullptr;
7272
ze_api_version_t versionRequested = ZE_API_VERSION_CURRENT;
73+
bool ddiInitialized = false;
7374
};
7475

7576
using driver_vector_t = std::vector< driver_t >;

source/loader/ze_ldrddi.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,12 @@ namespace loader
153153
{
154154
if(drv.initStatus != ZE_RESULT_SUCCESS)
155155
continue;
156-
if (!drv.handle) {
156+
if (!drv.handle || !drv.ddiInitialized) {
157157
bool sysmanInit = false;
158-
loader::context->init_driver( drv, flags, nullptr, nullptr, nullptr, sysmanInit );
158+
auto res = loader::context->init_driver( drv, flags, nullptr, nullptr, nullptr, sysmanInit );
159+
if (res != ZE_RESULT_SUCCESS) {
160+
continue;
161+
}
159162
}
160163
drv.initStatus = drv.dditable.ze.Global.pfnInit( flags );
161164
if(drv.initStatus == ZE_RESULT_SUCCESS)

source/loader/ze_loader.cpp

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -526,10 +526,6 @@ namespace loader
526526
if( NULL != handle )
527527
{
528528
driver.handle = handle;
529-
loader::zeloaderInitDriverDDITables(&driver);
530-
loader::zesloaderInitDriverDDITables(&driver);
531-
loader::zetloaderInitDriverDDITables(&driver);
532-
loader::zerloaderInitDriverDDITables(&driver);
533529
} else {
534530
std::string loadLibraryErrorValue;
535531
GET_LIBRARY_ERROR(loadLibraryErrorValue);
@@ -541,6 +537,42 @@ namespace loader
541537
}
542538
}
543539

540+
if (driver.handle && !driver.ddiInitialized) {
541+
auto res = loader::zeloaderInitDriverDDITables(&driver);
542+
if (res != ZE_RESULT_SUCCESS) {
543+
if (debugTraceEnabled) {
544+
std::string message = "init driver " + driver.name + " failed, zeloaderInitDriverDDITables returned ";
545+
debug_trace_message(message, loader::to_string(res));
546+
}
547+
return res;
548+
}
549+
res = loader::zesloaderInitDriverDDITables(&driver);
550+
if (res != ZE_RESULT_SUCCESS) {
551+
if (debugTraceEnabled) {
552+
std::string message = "init driver " + driver.name + " failed, zesloaderInitDriverDDITables returned ";
553+
debug_trace_message(message, loader::to_string(res));
554+
}
555+
return res;
556+
}
557+
res = loader::zetloaderInitDriverDDITables(&driver);
558+
if (res != ZE_RESULT_SUCCESS) {
559+
if (debugTraceEnabled) {
560+
std::string message = "init driver " + driver.name + " failed, zetloaderInitDriverDDITables returned ";
561+
debug_trace_message(message, loader::to_string(res));
562+
}
563+
return res;
564+
}
565+
res = loader::zerloaderInitDriverDDITables(&driver);
566+
if (res != ZE_RESULT_SUCCESS) {
567+
if (debugTraceEnabled) {
568+
std::string message = "init driver " + driver.name + " failed, zerloaderInitDriverDDITables returned ";
569+
debug_trace_message(message, loader::to_string(res));
570+
}
571+
return res;
572+
}
573+
driver.ddiInitialized = true;
574+
}
575+
544576
return ZE_RESULT_SUCCESS;
545577
}
546578

source/loader/ze_loader_internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ namespace loader
6161
bool driverDDIHandleSupportQueried = false;
6262
ze_driver_handle_t zerDriverHandle = nullptr;
6363
ze_api_version_t versionRequested = ZE_API_VERSION_CURRENT;
64+
bool ddiInitialized = false;
6465
};
6566

6667
using driver_vector_t = std::vector< driver_t >;

source/loader/zes_ldrddi.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,12 @@ namespace loader
129129
{
130130
if(drv.initStatus != ZE_RESULT_SUCCESS || drv.initSysManStatus != ZE_RESULT_SUCCESS)
131131
continue;
132-
if (!drv.handle) {
132+
if (!drv.handle || !drv.ddiInitialized) {
133133
bool sysmanInit = true;
134-
loader::context->init_driver( drv, flags, nullptr, nullptr, nullptr, sysmanInit );
134+
auto res = loader::context->init_driver( drv, flags, nullptr, nullptr, nullptr, sysmanInit );
135+
if (res != ZE_RESULT_SUCCESS) {
136+
continue;
137+
}
135138
}
136139
if (!drv.dditable.zes.Global.pfnInit) {
137140
drv.initSysManStatus = ZE_RESULT_ERROR_UNINITIALIZED;

0 commit comments

Comments
 (0)