Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/build-msi-package.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
on:
push:
branches: [ master ]
branches: [ master,release_branch* ]
pull_request:
branches: [ master ]
branches: [ master,release_branch* ]
workflow_dispatch:

permissions: read-all
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build-multi-static.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
on:
push:
branches: [ master ]
branches: [ master,release_branch* ]
pull_request:
branches: [ master ]
branches: [ master,release_branch* ]
workflow_dispatch:

permissions: read-all
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build-multi.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
on:
push:
branches: [ master ]
branches: [ master,release_branch* ]
pull_request:
branches: [ master ]
branches: [ master,release_branch* ]
workflow_dispatch:

permissions: read-all
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build-quick-static.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
on:
push:
branches: [ master ]
branches: [ master,release_branch* ]
pull_request:
branches: [ master ]
branches: [ master,release_branch* ]
workflow_dispatch:

permissions: read-all
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build-quick.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
on:
push:
branches: [ master ]
branches: [ master,release_branch* ]
pull_request:
branches: [ master ]
branches: [ master,release_branch* ]
workflow_dispatch:

permissions: read-all
Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# Level zero loader changelog


## v1.21.10
* Block all calls to get until after init has completed to avoid race during sorting.
## v1.21.9
* Fix init checks when sorting legacy drivers
* Fix MSVC Link optimization flags
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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.21.9)
project(level-zero VERSION 1.21.10)

include(GNUInstallDirs)

Expand Down
4 changes: 2 additions & 2 deletions PRODUCT_GUID.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
1.21.9
01037281-c9ef-43cf-bc65-f72fb3438788
1.21.10
98f4ce5b-d498-4ec9-b025-2e509c4ebecc
37 changes: 20 additions & 17 deletions scripts/templates/ldrddi.cpp.mako
Original file line number Diff line number Diff line change
Expand Up @@ -79,23 +79,26 @@ namespace loader
%elif re.match(r"\w+DriverGet$", th.make_func_name(n, tags, obj)) or re.match(r"\w+InitDrivers$", th.make_func_name(n, tags, obj)):
uint32_t total_driver_handle_count = 0;

if (!loader::context->sortingInProgress.exchange(true) && !loader::context->instrumentationEnabled) {
%if namespace != "zes":
%if not re.match(r"\w+InitDrivers$", th.make_func_name(n, tags, obj)):
std::call_once(loader::context->coreDriverSortOnce, []() {
loader::context->driverSorting(&loader::context->zeDrivers, nullptr, false);
});
%else:
std::call_once(loader::context->coreDriverSortOnce, [desc]() {
loader::context->driverSorting(&loader::context->zeDrivers, desc, false);
});
%endif
%else:
std::call_once(loader::context->sysmanDriverSortOnce, []() {
loader::context->driverSorting(loader::context->sysmanInstanceDrivers, nullptr, true);
});
%endif
loader::context->sortingInProgress.store(false);
{
std::lock_guard<std::mutex> lock(loader::context->sortMutex);
if (!loader::context->sortingInProgress.exchange(true) && !loader::context->instrumentationEnabled) {
%if namespace != "zes":
%if not re.match(r"\w+InitDrivers$", th.make_func_name(n, tags, obj)):
std::call_once(loader::context->coreDriverSortOnce, []() {
loader::context->driverSorting(&loader::context->zeDrivers, nullptr, false);
});
%else:
std::call_once(loader::context->coreDriverSortOnce, [desc]() {
loader::context->driverSorting(&loader::context->zeDrivers, desc, false);
});
%endif
%else:
std::call_once(loader::context->sysmanDriverSortOnce, []() {
loader::context->driverSorting(loader::context->sysmanInstanceDrivers, nullptr, true);
});
%endif
loader::context->sortingInProgress.store(false);
}
}

%if namespace != "zes":
Expand Down
1 change: 1 addition & 0 deletions scripts/templates/ze_loader_internal.h.mako
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ namespace loader
std::once_flag coreDriverSortOnce;
std::once_flag sysmanDriverSortOnce;
std::atomic<bool> sortingInProgress = {false};
std::mutex sortMutex;
bool instrumentationEnabled = false;
dditable_t tracing_dditable = {};
std::shared_ptr<Logger> zel_logger;
Expand Down
27 changes: 16 additions & 11 deletions source/loader/ze_ldrddi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,14 @@ namespace loader

uint32_t total_driver_handle_count = 0;

if (!loader::context->sortingInProgress.exchange(true) && !loader::context->instrumentationEnabled) {
std::call_once(loader::context->coreDriverSortOnce, []() {
loader::context->driverSorting(&loader::context->zeDrivers, nullptr, false);
});
loader::context->sortingInProgress.store(false);
{
std::lock_guard<std::mutex> lock(loader::context->sortMutex);
if (!loader::context->sortingInProgress.exchange(true) && !loader::context->instrumentationEnabled) {
std::call_once(loader::context->coreDriverSortOnce, []() {
loader::context->driverSorting(&loader::context->zeDrivers, nullptr, false);
});
loader::context->sortingInProgress.store(false);
}
}

for( auto& drv : loader::context->zeDrivers )
Expand Down Expand Up @@ -138,12 +141,14 @@ namespace loader
ze_result_t result = ZE_RESULT_SUCCESS;

uint32_t total_driver_handle_count = 0;

if (!loader::context->sortingInProgress.exchange(true) && !loader::context->instrumentationEnabled) {
std::call_once(loader::context->coreDriverSortOnce, [desc]() {
loader::context->driverSorting(&loader::context->zeDrivers, desc, false);
});
loader::context->sortingInProgress.store(false);
{
std::lock_guard<std::mutex> lock(loader::context->sortMutex);
if (!loader::context->sortingInProgress.exchange(true) && !loader::context->instrumentationEnabled) {
std::call_once(loader::context->coreDriverSortOnce, [desc]() {
loader::context->driverSorting(&loader::context->zeDrivers, desc, false);
});
loader::context->sortingInProgress.store(false);
}
}

for( auto& drv : loader::context->zeDrivers )
Expand Down
1 change: 1 addition & 0 deletions source/loader/ze_loader_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ namespace loader
std::once_flag coreDriverSortOnce;
std::once_flag sysmanDriverSortOnce;
std::atomic<bool> sortingInProgress = {false};
std::mutex sortMutex;
bool instrumentationEnabled = false;
dditable_t tracing_dditable = {};
std::shared_ptr<Logger> zel_logger;
Expand Down
13 changes: 8 additions & 5 deletions source/loader/zes_ldrddi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,14 @@ namespace loader

uint32_t total_driver_handle_count = 0;

if (!loader::context->sortingInProgress.exchange(true) && !loader::context->instrumentationEnabled) {
std::call_once(loader::context->sysmanDriverSortOnce, []() {
loader::context->driverSorting(loader::context->sysmanInstanceDrivers, nullptr, true);
});
loader::context->sortingInProgress.store(false);
{
std::lock_guard<std::mutex> lock(loader::context->sortMutex);
if (!loader::context->sortingInProgress.exchange(true) && !loader::context->instrumentationEnabled) {
std::call_once(loader::context->sysmanDriverSortOnce, []() {
loader::context->driverSorting(loader::context->sysmanInstanceDrivers, nullptr, true);
});
loader::context->sortingInProgress.store(false);
}
}

for( auto& drv : *loader::context->sysmanInstanceDrivers )
Expand Down