Skip to content

Commit c329799

Browse files
committed
Fix null driver init and driver init checks
Signed-off-by: Neil R. Spruit <[email protected]>
1 parent d8ed4b4 commit c329799

File tree

6 files changed

+53
-10
lines changed

6 files changed

+53
-10
lines changed

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
@@ -135,6 +135,7 @@ namespace loader
135135
dditable_t tracing_dditable = {};
136136
std::shared_ptr<Logger> zel_logger;
137137
ze_driver_handle_t* defaultZerDriverHandle = nullptr;
138+
bool ddiInitialized = false;
138139
};
139140

140141
extern ze_handle_t* loaderDispatch;

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
@@ -509,10 +509,6 @@ namespace loader
509509
if( NULL != handle )
510510
{
511511
driver.handle = handle;
512-
loader::zeloaderInitDriverDDITables(&driver);
513-
loader::zesloaderInitDriverDDITables(&driver);
514-
loader::zetloaderInitDriverDDITables(&driver);
515-
loader::zerloaderInitDriverDDITables(&driver);
516512
} else {
517513
std::string loadLibraryErrorValue;
518514
GET_LIBRARY_ERROR(loadLibraryErrorValue);
@@ -524,6 +520,42 @@ namespace loader
524520
}
525521
}
526522

523+
if (driver.handle && !driver.ddiInitialized) {
524+
auto res = loader::zeloaderInitDriverDDITables(&driver);
525+
if (res != ZE_RESULT_SUCCESS) {
526+
if (debugTraceEnabled) {
527+
std::string message = "init driver " + driver.name + " failed, zeloaderInitDriverDDITables returned ";
528+
debug_trace_message(message, loader::to_string(res));
529+
}
530+
return res;
531+
}
532+
res = loader::zesloaderInitDriverDDITables(&driver);
533+
if (res != ZE_RESULT_SUCCESS) {
534+
if (debugTraceEnabled) {
535+
std::string message = "init driver " + driver.name + " failed, zesloaderInitDriverDDITables returned ";
536+
debug_trace_message(message, loader::to_string(res));
537+
}
538+
return res;
539+
}
540+
res = loader::zetloaderInitDriverDDITables(&driver);
541+
if (res != ZE_RESULT_SUCCESS) {
542+
if (debugTraceEnabled) {
543+
std::string message = "init driver " + driver.name + " failed, zetloaderInitDriverDDITables returned ";
544+
debug_trace_message(message, loader::to_string(res));
545+
}
546+
return res;
547+
}
548+
res = loader::zerloaderInitDriverDDITables(&driver);
549+
if (res != ZE_RESULT_SUCCESS) {
550+
if (debugTraceEnabled) {
551+
std::string message = "init driver " + driver.name + " failed, zerloaderInitDriverDDITables returned ";
552+
debug_trace_message(message, loader::to_string(res));
553+
}
554+
return res;
555+
}
556+
driver.ddiInitialized = true;
557+
}
558+
527559
return ZE_RESULT_SUCCESS;
528560
}
529561

source/loader/ze_loader_internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ namespace loader
171171
dditable_t tracing_dditable = {};
172172
std::shared_ptr<Logger> zel_logger;
173173
ze_driver_handle_t* defaultZerDriverHandle = nullptr;
174+
bool ddiInitialized = false;
174175
};
175176

176177
extern ze_handle_t* loaderDispatch;

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)