Files
compute-runtime/level_zero/core/source/global_teardown.cpp
Mateusz Jablonski 14fd9f3f24 fix: correct using L0 loader functions
use zelLoaderTranslateHandle for translating handle to internal handle
get pointer to zelSetDriverTeardown during global ctor
don't load loader library by name
get loader function pointers directly from current process

Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
2024-09-04 17:30:25 +02:00

44 lines
1.4 KiB
C++

/*
* Copyright (C) 2023-2024 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "level_zero/core/source/global_teardown.h"
#include "shared/source/os_interface/sys_calls_common.h"
#include "level_zero/core/source/driver/driver.h"
#include "level_zero/core/source/driver/driver_handle_imp.h"
#include "level_zero/sysman/source/driver/sysman_driver_handle_imp.h"
namespace L0 {
decltype(&zelLoaderTranslateHandle) loaderTranslateHandleFunc = nullptr;
decltype(&zelSetDriverTeardown) setDriverTeardownFunc = nullptr;
void globalDriverSetup() {
std::unique_ptr<NEO::OsLibrary> loaderLibrary = std::unique_ptr<NEO::OsLibrary>{NEO::OsLibrary::loadFunc("")};
loaderTranslateHandleFunc = reinterpret_cast<decltype(&zelLoaderTranslateHandle)>(loaderLibrary->getProcAddress("zelLoaderTranslateHandle"));
setDriverTeardownFunc = reinterpret_cast<decltype(&zelSetDriverTeardown)>(loaderLibrary->getProcAddress("zelSetDriverTeardown"));
}
void globalDriverTeardown() {
if (levelZeroDriverInitialized && setDriverTeardownFunc) {
setDriverTeardownFunc();
}
if (globalDriver != nullptr) {
if (globalDriver->pid == NEO::SysCalls::getCurrentProcessId()) {
delete globalDriver;
}
globalDriver = nullptr;
}
if (Sysman::globalSysmanDriver != nullptr) {
delete Sysman::globalSysmanDriver;
Sysman::globalSysmanDriver = nullptr;
}
}
} // namespace L0