Skip to content

Commit 1357333

Browse files
committed
Fix Sysman only DDI Init for zesDriver compatibility
- Remove sysman zesDrivers from the Driver Sorting and DDI Driver Extension since ze and zes drivers may be different internally and to remove possible undefined behavior. Signed-off-by: Neil R. Spruit <neil.r.spruit@intel.com>
1 parent d8605f9 commit 1357333

7 files changed

Lines changed: 42 additions & 48 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Level zero loader changelog
2-
2+
## v1.23.1
3+
* Fix Sysman only DDI Init for zesDriver compatability
34
## v1.23.0
45
* fix build for certification checker
56
* Fix missing code gen and add check in sysman device get for context

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.23.0)
16+
project(level-zero VERSION 1.23.1)
1717

1818
include(GNUInstallDirs)
1919

PRODUCT_GUID.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
1.23.0
2-
146652e2-0b5a-4461-b176-800135676a46
1+
1.23.1
2+
fd1c864d-4ba3-4321-bdfc-66f50cf6b6bf

scripts/templates/ldrddi.cpp.mako

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ namespace loader
166166
{
167167
for( uint32_t i = 0; i < library_driver_handle_count; ++i ) {
168168
uint32_t driver_index = total_driver_handle_count + i;
169+
%if namespace != "zes":
169170
if (drv.driverDDIHandleSupportQueried == false) {
170171
drv.properties = {};
171172
drv.properties.stype = ZE_STRUCTURE_TYPE_DRIVER_DDI_HANDLES_EXT_PROPERTIES;
@@ -185,9 +186,22 @@ namespace loader
185186
drv.driverDDIHandleSupportQueried = true;
186187
}
187188
if (!(drv.properties.flags & ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED) || !loader::context->driverDDIPathDefault) {
189+
if (loader::context->debugTraceEnabled) {
190+
std::string message = "Driver DDI Handles Not Supported for " + drv.name;
191+
loader::context->debug_trace_message(message, "");
192+
}
188193
${obj['params'][1]['name']}[ driver_index ] = reinterpret_cast<${n}_driver_handle_t>(
189194
context->${n}_driver_factory.getInstance( ${obj['params'][1]['name']}[ driver_index ], &drv.dditable ) );
195+
} else if (drv.properties.flags & ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED) {
196+
if (loader::context->debugTraceEnabled) {
197+
std::string message = "Driver DDI Handles Supported for " + drv.name;
198+
loader::context->debug_trace_message(message, "");
199+
}
190200
}
201+
%else:
202+
${obj['params'][1]['name']}[ driver_index ] = reinterpret_cast<${n}_driver_handle_t>(
203+
context->${n}_driver_factory.getInstance( ${obj['params'][1]['name']}[ driver_index ], &drv.dditable ) );
204+
%endif
191205
}
192206
}
193207
catch( std::bad_alloc& )

source/loader/ze_ldrddi.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,17 @@ namespace loader
120120
drv.driverDDIHandleSupportQueried = true;
121121
}
122122
if (!(drv.properties.flags & ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED) || !loader::context->driverDDIPathDefault) {
123+
if (loader::context->debugTraceEnabled) {
124+
std::string message = "Driver DDI Handles Not Supported for " + drv.name;
125+
loader::context->debug_trace_message(message, "");
126+
}
123127
phDrivers[ driver_index ] = reinterpret_cast<ze_driver_handle_t>(
124128
context->ze_driver_factory.getInstance( phDrivers[ driver_index ], &drv.dditable ) );
129+
} else if (drv.properties.flags & ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED) {
130+
if (loader::context->debugTraceEnabled) {
131+
std::string message = "Driver DDI Handles Supported for " + drv.name;
132+
loader::context->debug_trace_message(message, "");
133+
}
125134
}
126135
}
127136
}
@@ -228,8 +237,17 @@ namespace loader
228237
drv.driverDDIHandleSupportQueried = true;
229238
}
230239
if (!(drv.properties.flags & ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED) || !loader::context->driverDDIPathDefault) {
240+
if (loader::context->debugTraceEnabled) {
241+
std::string message = "Driver DDI Handles Not Supported for " + drv.name;
242+
loader::context->debug_trace_message(message, "");
243+
}
231244
phDrivers[ driver_index ] = reinterpret_cast<ze_driver_handle_t>(
232245
context->ze_driver_factory.getInstance( phDrivers[ driver_index ], &drv.dditable ) );
246+
} else if (drv.properties.flags & ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED) {
247+
if (loader::context->debugTraceEnabled) {
248+
std::string message = "Driver DDI Handles Supported for " + drv.name;
249+
loader::context->debug_trace_message(message, "");
250+
}
233251
}
234252
}
235253
}

source/loader/ze_loader.cpp

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -77,29 +77,10 @@ namespace loader
7777
permissiveDesc.stype = ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC;
7878
permissiveDesc.pNext = nullptr;
7979
permissiveDesc.flags = UINT32_MAX;
80+
if (sysmanOnly) {
81+
return true; // Sorting not fully supported by the spec due to missing zesDriverGetProperties for sysman drivers.
82+
}
8083
for (auto &driver : *drivers) {
81-
if (sysmanOnly) {
82-
for (auto &coreDriver : this->zeDrivers) {
83-
if (coreDriver.name == driver.name) {
84-
if (!driver.dditable.ze.Global.pfnInitDrivers) {
85-
driver.dditable.ze.Global.pfnInitDrivers = coreDriver.dditable.ze.Global.pfnInitDrivers;
86-
}
87-
if (!driver.dditable.ze.Driver.pfnGet) {
88-
driver.dditable.ze.Driver.pfnGet = coreDriver.dditable.ze.Driver.pfnGet;
89-
}
90-
if (!driver.dditable.ze.Driver.pfnGetProperties) {
91-
driver.dditable.ze.Driver.pfnGetProperties = coreDriver.dditable.ze.Driver.pfnGetProperties;
92-
}
93-
if (!driver.dditable.ze.Device.pfnGet) {
94-
driver.dditable.ze.Device.pfnGet = coreDriver.dditable.ze.Device.pfnGet;
95-
}
96-
if (!driver.dditable.ze.Device.pfnGetProperties) {
97-
driver.dditable.ze.Device.pfnGetProperties = coreDriver.dditable.ze.Device.pfnGetProperties;
98-
}
99-
break;
100-
}
101-
}
102-
}
10384
uint32_t pCount = 0;
10485
std::vector<ze_driver_handle_t> driverHandles;
10586
ze_result_t res = ZE_RESULT_SUCCESS;

source/loader/zes_ldrddi.cpp

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -105,28 +105,8 @@ namespace loader
105105
{
106106
for( uint32_t i = 0; i < library_driver_handle_count; ++i ) {
107107
uint32_t driver_index = total_driver_handle_count + i;
108-
if (drv.driverDDIHandleSupportQueried == false) {
109-
drv.properties = {};
110-
drv.properties.stype = ZE_STRUCTURE_TYPE_DRIVER_DDI_HANDLES_EXT_PROPERTIES;
111-
drv.properties.pNext = nullptr;
112-
ze_driver_properties_t driverProperties = {};
113-
driverProperties.stype = ZE_STRUCTURE_TYPE_DRIVER_PROPERTIES;
114-
driverProperties.pNext = nullptr;
115-
driverProperties.pNext = &drv.properties;
116-
ze_result_t res = drv.dditable.ze.Driver.pfnGetProperties(phDrivers[ driver_index ], &driverProperties);
117-
if (res != ZE_RESULT_SUCCESS) {
118-
if (loader::context->debugTraceEnabled) {
119-
std::string message = drv.name + " failed zeDriverGetProperties query, returned ";
120-
loader::context->debug_trace_message(message, loader::to_string(res));
121-
}
122-
return res;
123-
}
124-
drv.driverDDIHandleSupportQueried = true;
125-
}
126-
if (!(drv.properties.flags & ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED) || !loader::context->driverDDIPathDefault) {
127-
phDrivers[ driver_index ] = reinterpret_cast<zes_driver_handle_t>(
128-
context->zes_driver_factory.getInstance( phDrivers[ driver_index ], &drv.dditable ) );
129-
}
108+
phDrivers[ driver_index ] = reinterpret_cast<zes_driver_handle_t>(
109+
context->zes_driver_factory.getInstance( phDrivers[ driver_index ], &drv.dditable ) );
130110
}
131111
}
132112
catch( std::bad_alloc& )

0 commit comments

Comments
 (0)