l0_feature: Use L0 Loader teardown callback

Related-To: LOCI-4174

- Call zelSetDriverTeardown during L0 Driver teardown to prevent users
from calling into destroyed functions and encountering crashes
during teardown.

Signed-off-by: Neil R Spruit <neil.r.spruit@intel.com>
This commit is contained in:
Neil R Spruit
2023-03-22 01:22:13 +00:00
committed by Compute-Runtime-Automation
parent ac7a5376f2
commit d31b950b9a
19 changed files with 217 additions and 25 deletions

View File

@@ -0,0 +1,38 @@
/*
* Copyright (C) 2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "level_zero/core/source/global_teardown.h"
#include "shared/source/os_interface/os_library.h"
#include "level_zero/core/source/driver/driver_handle_imp.h"
#include "level_zero/sysman/source/sysman_driver_handle_imp.h"
namespace L0 {
ze_result_t loaderDriverTeardown(std::string loaderLibraryName) {
std::unique_ptr<NEO::OsLibrary> loaderLibrary = std::unique_ptr<NEO::OsLibrary>{NEO::OsLibrary::load(loaderLibraryName.c_str())};
if (loaderLibrary) {
zelSetDriverTeardown_fn setDriverTeardown = reinterpret_cast<zelSetDriverTeardown_fn>(loaderLibrary->getProcAddress("zelSetDriverTeardown"));
if (setDriverTeardown) {
return setDriverTeardown();
}
}
return ZE_RESULT_ERROR_DEPENDENCY_UNAVAILABLE;
}
void globalDriverTeardown() {
if (GlobalDriver != nullptr) {
delete GlobalDriver;
GlobalDriver = nullptr;
}
if (Sysman::GlobalSysmanDriver != nullptr) {
delete Sysman::GlobalSysmanDriver;
Sysman::GlobalSysmanDriver = nullptr;
}
}
} // namespace L0