Skip to content

Commit 18b3d0f

Browse files
committed
Add additional check for optional tables during init
Signed-off-by: Neil R. Spruit <[email protected]>
1 parent 02b7655 commit 18b3d0f

File tree

7 files changed

+97
-132
lines changed

7 files changed

+97
-132
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# Level zero loader changelog
2+
## v1.26.3
3+
* fix handling of optional DDI tables missing or incorrect
24
## v1.26.2
35
* fix: fix Driver Search Paths for all Linux Distros
46
## v1.26.1

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ if(MSVC AND (MSVC_VERSION LESS 1900))
1313
endif()
1414

1515
# This project follows semantic versioning (https://semver.org/)
16-
project(level-zero VERSION 1.26.2)
16+
project(level-zero VERSION 1.26.3)
1717
include(GNUInstallDirs)
1818

1919
find_package(Git)

PRODUCT_GUID.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
1.26.2
2-
cf85b8de-e9c1-4d88-9f18-7164098e1c1e
1+
1.26.3
2+
d1ed32f4-2b7d-4718-9f86-69cbae2c1836

scripts/templates/ldrddi.cpp.mako

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,16 @@ namespace loader
2626
${n}loaderInitDriverDDITables(loader::driver_t *driver) {
2727
ze_result_t result = ZE_RESULT_SUCCESS;
2828
%for tbl in th.get_pfntables(specs, meta, n, tags):
29+
%if tbl['optional'] == True and namespace != "zer":
30+
// Optional
31+
${tbl['export']['name']}FromDriver(driver);
32+
result = ZE_RESULT_SUCCESS;
33+
%else:
2934
result = ${tbl['export']['name']}FromDriver(driver);
3035
if (result != ZE_RESULT_SUCCESS) {
3136
return result;
3237
}
38+
%endif
3339
%endfor
3440
return result;
3541
}
@@ -556,7 +562,7 @@ ${tbl['export']['name']}FromDriver(loader::driver_t *driver)
556562
%else:
557563
return driver->initStatus;
558564
%endif
559-
%if tbl['experimental'] is False and namespace != "zer": #//Experimental Tables may not be implemented in driver
565+
%if tbl['experimental'] is False and namespace != "zer" and tbl['optional'] != True: #//Experimental Tables may not be implemented in driver
560566
auto getTableResult = getTable( loader::context->ddi_init_version, &driver->dditable.${n}.${tbl['name']});
561567
if(getTableResult == ZE_RESULT_SUCCESS) {
562568
loader::context->configured_version = loader::context->ddi_init_version;

source/loader/ze_ldrddi.cpp

Lines changed: 41 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -20,38 +20,32 @@ namespace loader
2020
if (result != ZE_RESULT_SUCCESS) {
2121
return result;
2222
}
23-
result = zeGetRTASBuilderProcAddrTableFromDriver(driver);
24-
if (result != ZE_RESULT_SUCCESS) {
25-
return result;
26-
}
27-
result = zeGetRTASBuilderExpProcAddrTableFromDriver(driver);
28-
if (result != ZE_RESULT_SUCCESS) {
29-
return result;
30-
}
31-
result = zeGetRTASParallelOperationProcAddrTableFromDriver(driver);
32-
if (result != ZE_RESULT_SUCCESS) {
33-
return result;
34-
}
35-
result = zeGetRTASParallelOperationExpProcAddrTableFromDriver(driver);
36-
if (result != ZE_RESULT_SUCCESS) {
37-
return result;
38-
}
23+
// Optional
24+
zeGetRTASBuilderProcAddrTableFromDriver(driver);
25+
result = ZE_RESULT_SUCCESS;
26+
// Optional
27+
zeGetRTASBuilderExpProcAddrTableFromDriver(driver);
28+
result = ZE_RESULT_SUCCESS;
29+
// Optional
30+
zeGetRTASParallelOperationProcAddrTableFromDriver(driver);
31+
result = ZE_RESULT_SUCCESS;
32+
// Optional
33+
zeGetRTASParallelOperationExpProcAddrTableFromDriver(driver);
34+
result = ZE_RESULT_SUCCESS;
3935
result = zeGetDriverProcAddrTableFromDriver(driver);
4036
if (result != ZE_RESULT_SUCCESS) {
4137
return result;
4238
}
43-
result = zeGetDriverExpProcAddrTableFromDriver(driver);
44-
if (result != ZE_RESULT_SUCCESS) {
45-
return result;
46-
}
39+
// Optional
40+
zeGetDriverExpProcAddrTableFromDriver(driver);
41+
result = ZE_RESULT_SUCCESS;
4742
result = zeGetDeviceProcAddrTableFromDriver(driver);
4843
if (result != ZE_RESULT_SUCCESS) {
4944
return result;
5045
}
51-
result = zeGetDeviceExpProcAddrTableFromDriver(driver);
52-
if (result != ZE_RESULT_SUCCESS) {
53-
return result;
54-
}
46+
// Optional
47+
zeGetDeviceExpProcAddrTableFromDriver(driver);
48+
result = ZE_RESULT_SUCCESS;
5549
result = zeGetContextProcAddrTableFromDriver(driver);
5650
if (result != ZE_RESULT_SUCCESS) {
5751
return result;
@@ -64,18 +58,16 @@ namespace loader
6458
if (result != ZE_RESULT_SUCCESS) {
6559
return result;
6660
}
67-
result = zeGetCommandListExpProcAddrTableFromDriver(driver);
68-
if (result != ZE_RESULT_SUCCESS) {
69-
return result;
70-
}
61+
// Optional
62+
zeGetCommandListExpProcAddrTableFromDriver(driver);
63+
result = ZE_RESULT_SUCCESS;
7164
result = zeGetEventProcAddrTableFromDriver(driver);
7265
if (result != ZE_RESULT_SUCCESS) {
7366
return result;
7467
}
75-
result = zeGetEventExpProcAddrTableFromDriver(driver);
76-
if (result != ZE_RESULT_SUCCESS) {
77-
return result;
78-
}
68+
// Optional
69+
zeGetEventExpProcAddrTableFromDriver(driver);
70+
result = ZE_RESULT_SUCCESS;
7971
result = zeGetEventPoolProcAddrTableFromDriver(driver);
8072
if (result != ZE_RESULT_SUCCESS) {
8173
return result;
@@ -88,26 +80,23 @@ namespace loader
8880
if (result != ZE_RESULT_SUCCESS) {
8981
return result;
9082
}
91-
result = zeGetImageExpProcAddrTableFromDriver(driver);
92-
if (result != ZE_RESULT_SUCCESS) {
93-
return result;
94-
}
83+
// Optional
84+
zeGetImageExpProcAddrTableFromDriver(driver);
85+
result = ZE_RESULT_SUCCESS;
9586
result = zeGetKernelProcAddrTableFromDriver(driver);
9687
if (result != ZE_RESULT_SUCCESS) {
9788
return result;
9889
}
99-
result = zeGetKernelExpProcAddrTableFromDriver(driver);
100-
if (result != ZE_RESULT_SUCCESS) {
101-
return result;
102-
}
90+
// Optional
91+
zeGetKernelExpProcAddrTableFromDriver(driver);
92+
result = ZE_RESULT_SUCCESS;
10393
result = zeGetMemProcAddrTableFromDriver(driver);
10494
if (result != ZE_RESULT_SUCCESS) {
10595
return result;
10696
}
107-
result = zeGetMemExpProcAddrTableFromDriver(driver);
108-
if (result != ZE_RESULT_SUCCESS) {
109-
return result;
110-
}
97+
// Optional
98+
zeGetMemExpProcAddrTableFromDriver(driver);
99+
result = ZE_RESULT_SUCCESS;
111100
result = zeGetModuleProcAddrTableFromDriver(driver);
112101
if (result != ZE_RESULT_SUCCESS) {
113102
return result;
@@ -128,14 +117,12 @@ namespace loader
128117
if (result != ZE_RESULT_SUCCESS) {
129118
return result;
130119
}
131-
result = zeGetFabricEdgeExpProcAddrTableFromDriver(driver);
132-
if (result != ZE_RESULT_SUCCESS) {
133-
return result;
134-
}
135-
result = zeGetFabricVertexExpProcAddrTableFromDriver(driver);
136-
if (result != ZE_RESULT_SUCCESS) {
137-
return result;
138-
}
120+
// Optional
121+
zeGetFabricEdgeExpProcAddrTableFromDriver(driver);
122+
result = ZE_RESULT_SUCCESS;
123+
// Optional
124+
zeGetFabricVertexExpProcAddrTableFromDriver(driver);
125+
result = ZE_RESULT_SUCCESS;
139126
return result;
140127
}
141128
///////////////////////////////////////////////////////////////////////////////
@@ -7819,11 +7806,7 @@ zeGetRTASBuilderProcAddrTableFromDriver(loader::driver_t *driver)
78197806
GET_FUNCTION_PTR( driver->handle, "zeGetRTASBuilderProcAddrTable") );
78207807
if(!getTable)
78217808
return driver->initStatus;
7822-
auto getTableResult = getTable( loader::context->ddi_init_version, &driver->dditable.ze.RTASBuilder);
7823-
if(getTableResult == ZE_RESULT_SUCCESS) {
7824-
loader::context->configured_version = loader::context->ddi_init_version;
7825-
} else
7826-
driver->initStatus = getTableResult;
7809+
result = getTable( loader::context->ddi_init_version, &driver->dditable.ze.RTASBuilder);
78277810
return result;
78287811
}
78297812
///////////////////////////////////////////////////////////////////////////////
@@ -7867,11 +7850,7 @@ zeGetRTASParallelOperationProcAddrTableFromDriver(loader::driver_t *driver)
78677850
GET_FUNCTION_PTR( driver->handle, "zeGetRTASParallelOperationProcAddrTable") );
78687851
if(!getTable)
78697852
return driver->initStatus;
7870-
auto getTableResult = getTable( loader::context->ddi_init_version, &driver->dditable.ze.RTASParallelOperation);
7871-
if(getTableResult == ZE_RESULT_SUCCESS) {
7872-
loader::context->configured_version = loader::context->ddi_init_version;
7873-
} else
7874-
driver->initStatus = getTableResult;
7853+
result = getTable( loader::context->ddi_init_version, &driver->dditable.ze.RTASParallelOperation);
78757854
return result;
78767855
}
78777856
///////////////////////////////////////////////////////////////////////////////

source/loader/zes_ldrddi.cpp

Lines changed: 23 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,23 @@ namespace loader
1616
__zedlllocal ze_result_t ZE_APICALL
1717
zesloaderInitDriverDDITables(loader::driver_t *driver) {
1818
ze_result_t result = ZE_RESULT_SUCCESS;
19-
result = zesGetGlobalProcAddrTableFromDriver(driver);
20-
if (result != ZE_RESULT_SUCCESS) {
21-
return result;
22-
}
19+
// Optional
20+
zesGetGlobalProcAddrTableFromDriver(driver);
21+
result = ZE_RESULT_SUCCESS;
2322
result = zesGetDeviceProcAddrTableFromDriver(driver);
2423
if (result != ZE_RESULT_SUCCESS) {
2524
return result;
2625
}
27-
result = zesGetDeviceExpProcAddrTableFromDriver(driver);
28-
if (result != ZE_RESULT_SUCCESS) {
29-
return result;
30-
}
26+
// Optional
27+
zesGetDeviceExpProcAddrTableFromDriver(driver);
28+
result = ZE_RESULT_SUCCESS;
3129
result = zesGetDriverProcAddrTableFromDriver(driver);
3230
if (result != ZE_RESULT_SUCCESS) {
3331
return result;
3432
}
35-
result = zesGetDriverExpProcAddrTableFromDriver(driver);
36-
if (result != ZE_RESULT_SUCCESS) {
37-
return result;
38-
}
33+
// Optional
34+
zesGetDriverExpProcAddrTableFromDriver(driver);
35+
result = ZE_RESULT_SUCCESS;
3936
result = zesGetDiagnosticsProcAddrTableFromDriver(driver);
4037
if (result != ZE_RESULT_SUCCESS) {
4138
return result;
@@ -56,10 +53,9 @@ namespace loader
5653
if (result != ZE_RESULT_SUCCESS) {
5754
return result;
5855
}
59-
result = zesGetFirmwareExpProcAddrTableFromDriver(driver);
60-
if (result != ZE_RESULT_SUCCESS) {
61-
return result;
62-
}
56+
// Optional
57+
zesGetFirmwareExpProcAddrTableFromDriver(driver);
58+
result = ZE_RESULT_SUCCESS;
6359
result = zesGetFrequencyProcAddrTableFromDriver(driver);
6460
if (result != ZE_RESULT_SUCCESS) {
6561
return result;
@@ -72,10 +68,9 @@ namespace loader
7268
if (result != ZE_RESULT_SUCCESS) {
7369
return result;
7470
}
75-
result = zesGetOverclockProcAddrTableFromDriver(driver);
76-
if (result != ZE_RESULT_SUCCESS) {
77-
return result;
78-
}
71+
// Optional
72+
zesGetOverclockProcAddrTableFromDriver(driver);
73+
result = ZE_RESULT_SUCCESS;
7974
result = zesGetPerformanceFactorProcAddrTableFromDriver(driver);
8075
if (result != ZE_RESULT_SUCCESS) {
8176
return result;
@@ -92,10 +87,9 @@ namespace loader
9287
if (result != ZE_RESULT_SUCCESS) {
9388
return result;
9489
}
95-
result = zesGetRasExpProcAddrTableFromDriver(driver);
96-
if (result != ZE_RESULT_SUCCESS) {
97-
return result;
98-
}
90+
// Optional
91+
zesGetRasExpProcAddrTableFromDriver(driver);
92+
result = ZE_RESULT_SUCCESS;
9993
result = zesGetSchedulerProcAddrTableFromDriver(driver);
10094
if (result != ZE_RESULT_SUCCESS) {
10195
return result;
@@ -108,10 +102,9 @@ namespace loader
108102
if (result != ZE_RESULT_SUCCESS) {
109103
return result;
110104
}
111-
result = zesGetVFManagementExpProcAddrTableFromDriver(driver);
112-
if (result != ZE_RESULT_SUCCESS) {
113-
return result;
114-
}
105+
// Optional
106+
zesGetVFManagementExpProcAddrTableFromDriver(driver);
107+
result = ZE_RESULT_SUCCESS;
115108
return result;
116109
}
117110
///////////////////////////////////////////////////////////////////////////////
@@ -5056,11 +5049,7 @@ zesGetGlobalProcAddrTableFromDriver(loader::driver_t *driver)
50565049
//It is valid to not have this proc addr table
50575050
return ZE_RESULT_SUCCESS;
50585051
}
5059-
auto getTableResult = getTable( loader::context->ddi_init_version, &driver->dditable.zes.Global);
5060-
if(getTableResult == ZE_RESULT_SUCCESS) {
5061-
loader::context->configured_version = loader::context->ddi_init_version;
5062-
} else
5063-
driver->initStatus = getTableResult;
5052+
result = getTable( loader::context->ddi_init_version, &driver->dditable.zes.Global);
50645053
return result;
50655054
}
50665055
///////////////////////////////////////////////////////////////////////////////
@@ -5411,11 +5400,7 @@ zesGetOverclockProcAddrTableFromDriver(loader::driver_t *driver)
54115400
//It is valid to not have this proc addr table
54125401
return ZE_RESULT_SUCCESS;
54135402
}
5414-
auto getTableResult = getTable( loader::context->ddi_init_version, &driver->dditable.zes.Overclock);
5415-
if(getTableResult == ZE_RESULT_SUCCESS) {
5416-
loader::context->configured_version = loader::context->ddi_init_version;
5417-
} else
5418-
driver->initStatus = getTableResult;
5403+
result = getTable( loader::context->ddi_init_version, &driver->dditable.zes.Overclock);
54195404
return result;
54205405
}
54215406
///////////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)