From 67855fa7f2310b32d967fdea9c48f723f0984e10 Mon Sep 17 00:00:00 2001 From: "Neil R. Spruit" Date: Mon, 7 Jul 2025 09:10:57 -0700 Subject: [PATCH] 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 --- CHANGELOG.md | 3 ++- CMakeLists.txt | 2 +- PRODUCT_GUID.txt | 4 ++-- scripts/templates/ldrddi.cpp.mako | 14 ++++++++++++++ source/loader/ze_ldrddi.cpp | 18 ++++++++++++++++++ source/loader/ze_loader.cpp | 25 +++---------------------- source/loader/zes_ldrddi.cpp | 24 ++---------------------- 7 files changed, 42 insertions(+), 48 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7033c70..b72adba6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Level zero loader changelog - +## v1.23.1 +* Fix Sysman only DDI Init for zesDriver compatability ## v1.23.0 * fix build for certification checker * Fix missing code gen and add check in sysman device get for context diff --git a/CMakeLists.txt b/CMakeLists.txt index eeed9cd7..d1c14283 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ if(MSVC AND (MSVC_VERSION LESS 1900)) endif() # This project follows semantic versioning (https://semver.org/) -project(level-zero VERSION 1.23.0) +project(level-zero VERSION 1.23.1) include(GNUInstallDirs) diff --git a/PRODUCT_GUID.txt b/PRODUCT_GUID.txt index 82243d87..3e2a2635 100644 --- a/PRODUCT_GUID.txt +++ b/PRODUCT_GUID.txt @@ -1,2 +1,2 @@ -1.23.0 -146652e2-0b5a-4461-b176-800135676a46 +1.23.1 +fd1c864d-4ba3-4321-bdfc-66f50cf6b6bf \ No newline at end of file diff --git a/scripts/templates/ldrddi.cpp.mako b/scripts/templates/ldrddi.cpp.mako index 12141e6f..b1a9c542 100644 --- a/scripts/templates/ldrddi.cpp.mako +++ b/scripts/templates/ldrddi.cpp.mako @@ -166,6 +166,7 @@ namespace loader { for( uint32_t i = 0; i < library_driver_handle_count; ++i ) { uint32_t driver_index = total_driver_handle_count + i; + %if namespace != "zes": if (drv.driverDDIHandleSupportQueried == false) { drv.properties = {}; drv.properties.stype = ZE_STRUCTURE_TYPE_DRIVER_DDI_HANDLES_EXT_PROPERTIES; @@ -185,9 +186,22 @@ namespace loader drv.driverDDIHandleSupportQueried = true; } if (!(drv.properties.flags & ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED) || !loader::context->driverDDIPathDefault) { + if (loader::context->debugTraceEnabled) { + std::string message = "Driver DDI Handles Not Supported for " + drv.name; + loader::context->debug_trace_message(message, ""); + } ${obj['params'][1]['name']}[ driver_index ] = reinterpret_cast<${n}_driver_handle_t>( context->${n}_driver_factory.getInstance( ${obj['params'][1]['name']}[ driver_index ], &drv.dditable ) ); + } else if (drv.properties.flags & ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED) { + if (loader::context->debugTraceEnabled) { + std::string message = "Driver DDI Handles Supported for " + drv.name; + loader::context->debug_trace_message(message, ""); + } } + %else: + ${obj['params'][1]['name']}[ driver_index ] = reinterpret_cast<${n}_driver_handle_t>( + context->${n}_driver_factory.getInstance( ${obj['params'][1]['name']}[ driver_index ], &drv.dditable ) ); + %endif } } catch( std::bad_alloc& ) diff --git a/source/loader/ze_ldrddi.cpp b/source/loader/ze_ldrddi.cpp index 882628fe..b4afb3d7 100644 --- a/source/loader/ze_ldrddi.cpp +++ b/source/loader/ze_ldrddi.cpp @@ -120,8 +120,17 @@ namespace loader drv.driverDDIHandleSupportQueried = true; } if (!(drv.properties.flags & ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED) || !loader::context->driverDDIPathDefault) { + if (loader::context->debugTraceEnabled) { + std::string message = "Driver DDI Handles Not Supported for " + drv.name; + loader::context->debug_trace_message(message, ""); + } phDrivers[ driver_index ] = reinterpret_cast( context->ze_driver_factory.getInstance( phDrivers[ driver_index ], &drv.dditable ) ); + } else if (drv.properties.flags & ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED) { + if (loader::context->debugTraceEnabled) { + std::string message = "Driver DDI Handles Supported for " + drv.name; + loader::context->debug_trace_message(message, ""); + } } } } @@ -228,8 +237,17 @@ namespace loader drv.driverDDIHandleSupportQueried = true; } if (!(drv.properties.flags & ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED) || !loader::context->driverDDIPathDefault) { + if (loader::context->debugTraceEnabled) { + std::string message = "Driver DDI Handles Not Supported for " + drv.name; + loader::context->debug_trace_message(message, ""); + } phDrivers[ driver_index ] = reinterpret_cast( context->ze_driver_factory.getInstance( phDrivers[ driver_index ], &drv.dditable ) ); + } else if (drv.properties.flags & ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED) { + if (loader::context->debugTraceEnabled) { + std::string message = "Driver DDI Handles Supported for " + drv.name; + loader::context->debug_trace_message(message, ""); + } } } } diff --git a/source/loader/ze_loader.cpp b/source/loader/ze_loader.cpp index d89b5b29..42cbce7a 100644 --- a/source/loader/ze_loader.cpp +++ b/source/loader/ze_loader.cpp @@ -77,29 +77,10 @@ namespace loader permissiveDesc.stype = ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC; permissiveDesc.pNext = nullptr; permissiveDesc.flags = UINT32_MAX; + if (sysmanOnly) { + return true; // Sorting not fully supported by the spec due to missing zesDriverGetProperties for sysman drivers. + } for (auto &driver : *drivers) { - if (sysmanOnly) { - for (auto &coreDriver : this->zeDrivers) { - if (coreDriver.name == driver.name) { - if (!driver.dditable.ze.Global.pfnInitDrivers) { - driver.dditable.ze.Global.pfnInitDrivers = coreDriver.dditable.ze.Global.pfnInitDrivers; - } - if (!driver.dditable.ze.Driver.pfnGet) { - driver.dditable.ze.Driver.pfnGet = coreDriver.dditable.ze.Driver.pfnGet; - } - if (!driver.dditable.ze.Driver.pfnGetProperties) { - driver.dditable.ze.Driver.pfnGetProperties = coreDriver.dditable.ze.Driver.pfnGetProperties; - } - if (!driver.dditable.ze.Device.pfnGet) { - driver.dditable.ze.Device.pfnGet = coreDriver.dditable.ze.Device.pfnGet; - } - if (!driver.dditable.ze.Device.pfnGetProperties) { - driver.dditable.ze.Device.pfnGetProperties = coreDriver.dditable.ze.Device.pfnGetProperties; - } - break; - } - } - } uint32_t pCount = 0; std::vector driverHandles; ze_result_t res = ZE_RESULT_SUCCESS; diff --git a/source/loader/zes_ldrddi.cpp b/source/loader/zes_ldrddi.cpp index 179e72f8..2219b03b 100644 --- a/source/loader/zes_ldrddi.cpp +++ b/source/loader/zes_ldrddi.cpp @@ -105,28 +105,8 @@ namespace loader { for( uint32_t i = 0; i < library_driver_handle_count; ++i ) { uint32_t driver_index = total_driver_handle_count + i; - if (drv.driverDDIHandleSupportQueried == false) { - drv.properties = {}; - drv.properties.stype = ZE_STRUCTURE_TYPE_DRIVER_DDI_HANDLES_EXT_PROPERTIES; - drv.properties.pNext = nullptr; - ze_driver_properties_t driverProperties = {}; - driverProperties.stype = ZE_STRUCTURE_TYPE_DRIVER_PROPERTIES; - driverProperties.pNext = nullptr; - driverProperties.pNext = &drv.properties; - ze_result_t res = drv.dditable.ze.Driver.pfnGetProperties(phDrivers[ driver_index ], &driverProperties); - if (res != ZE_RESULT_SUCCESS) { - if (loader::context->debugTraceEnabled) { - std::string message = drv.name + " failed zeDriverGetProperties query, returned "; - loader::context->debug_trace_message(message, loader::to_string(res)); - } - return res; - } - drv.driverDDIHandleSupportQueried = true; - } - if (!(drv.properties.flags & ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED) || !loader::context->driverDDIPathDefault) { - phDrivers[ driver_index ] = reinterpret_cast( - context->zes_driver_factory.getInstance( phDrivers[ driver_index ], &drv.dditable ) ); - } + phDrivers[ driver_index ] = reinterpret_cast( + context->zes_driver_factory.getInstance( phDrivers[ driver_index ], &drv.dditable ) ); } } catch( std::bad_alloc& )