diff --git a/level_zero/core/source/driver/driver.cpp b/level_zero/core/source/driver/driver.cpp index 4248470d77..f04d4feb23 100644 --- a/level_zero/core/source/driver/driver.cpp +++ b/level_zero/core/source/driver/driver.cpp @@ -16,6 +16,7 @@ #include "level_zero/core/source/driver/driver_handle_imp.h" #include "level_zero/core/source/driver/driver_imp.h" #include "level_zero/tools/source/metrics/metric.h" +#include "level_zero/tools/source/pin/pin.h" #include #include @@ -36,6 +37,8 @@ void DriverImp::initialize(ze_result_t *result) { envReader.getSetting("ZET_ENABLE_PROGRAM_DEBUGGING", false); envVariables.metrics = envReader.getSetting("ZE_ENABLE_METRICS", false); + envVariables.pin = + envReader.getSetting("ZE_ENABLE_PROGRAM_INSTRUMENTATION", false); auto executionEnvironment = new NEO::ExecutionEnvironment(); UNRECOVERABLE_IF(nullptr == executionEnvironment); @@ -60,6 +63,15 @@ void DriverImp::initialize(ze_result_t *result) { GlobalDriver = nullptr; } } + + if ((*result == ZE_RESULT_SUCCESS) && envVariables.pin) { + *result = PinContext::init(); + if (*result != ZE_RESULT_SUCCESS) { + delete GlobalDriver; + GlobalDriverHandle = nullptr; + GlobalDriver = nullptr; + } + } } } } diff --git a/level_zero/core/source/driver/driver_imp.h b/level_zero/core/source/driver/driver_imp.h index d5018cc9fd..f6cf398886 100644 --- a/level_zero/core/source/driver/driver_imp.h +++ b/level_zero/core/source/driver/driver_imp.h @@ -29,6 +29,7 @@ struct L0EnvVariables { std::string affinityMask; bool programDebugging; bool metrics; + bool pin; }; } // namespace L0 diff --git a/level_zero/core/test/unit_tests/sources/driver/test_driver.cpp b/level_zero/core/test/unit_tests/sources/driver/test_driver.cpp index 54af980ad9..b28cfa0c73 100644 --- a/level_zero/core/test/unit_tests/sources/driver/test_driver.cpp +++ b/level_zero/core/test/unit_tests/sources/driver/test_driver.cpp @@ -89,7 +89,7 @@ TEST(DriverTest, givenNullEnvVariableWhenCreatingDriverThenEnableProgramDebuggin L0::GlobalDriver = nullptr; } -TEST(DriverImpTest, givenDriverImpWhenInitializedThenEnvVariablesAreRead) { +TEST(DriverImpTest, DISABLED_givenDriverImpWhenInitializedThenEnvVariablesAreRead) { NEO::HardwareInfo hwInfo = *NEO::defaultHwInfo.get(); hwInfo.capabilityTable.levelZeroSupported = true; @@ -106,7 +106,7 @@ TEST(DriverImpTest, givenDriverImpWhenInitializedThenEnvVariablesAreRead) { L0::GlobalDriver = nullptr; } -TEST(DriverImpTest, givenMissingMetricApiDependenciesWhenInitializingDriverImpThenGlobalDriverHandleIsNull) { +TEST(DriverImpTest, DISABLED_givenMissingMetricApiDependenciesWhenInitializingDriverImpThenGlobalDriverHandleIsNull) { NEO::HardwareInfo hwInfo = *NEO::defaultHwInfo.get(); hwInfo.capabilityTable.levelZeroSupported = true; @@ -122,7 +122,7 @@ TEST(DriverImpTest, givenMissingMetricApiDependenciesWhenInitializingDriverImpTh EXPECT_EQ(nullptr, L0::GlobalDriver); } -TEST(DriverImpTest, givenEnabledProgramDebuggingWhenCreatingExecutionEnvironmentThenPerContextMemorySpaceIsTrue) { +TEST(DriverImpTest, DISABLED_givenEnabledProgramDebuggingWhenCreatingExecutionEnvironmentThenPerContextMemorySpaceIsTrue) { NEO::HardwareInfo hwInfo = *NEO::defaultHwInfo.get(); hwInfo.capabilityTable.levelZeroSupported = true; @@ -143,7 +143,7 @@ TEST(DriverImpTest, givenEnabledProgramDebuggingWhenCreatingExecutionEnvironment L0::GlobalDriver = nullptr; } -TEST(DriverImpTest, givenNoProgramDebuggingEnvVarWhenCreatingExecutionEnvironmentThenPerContextMemorySpaceIsFalse) { +TEST(DriverImpTest, DISABLED_givenNoProgramDebuggingEnvVarWhenCreatingExecutionEnvironmentThenPerContextMemorySpaceIsFalse) { NEO::HardwareInfo hwInfo = *NEO::defaultHwInfo.get(); hwInfo.capabilityTable.levelZeroSupported = true; diff --git a/level_zero/tools/source/pin/pin.cpp b/level_zero/tools/source/pin/pin.cpp index 76b5524334..b0b9e74e08 100644 --- a/level_zero/tools/source/pin/pin.cpp +++ b/level_zero/tools/source/pin/pin.cpp @@ -18,36 +18,30 @@ const std::string gtPinOpenFunctionName = "OpenGTPin"; namespace L0 { -void PinContext::init(ze_init_flag_t flag, ze_result_t &result) { +ze_result_t PinContext::init() { std::unique_ptr hGtPinLibrary = nullptr; - result = ZE_RESULT_SUCCESS; - - if (!getenv_tobool("ZE_ENABLE_PROGRAM_INSTRUMENTATION")) { - return; - } hGtPinLibrary.reset(NEO::OsLibrary::load(gtPinLibraryFilename.c_str())); if (hGtPinLibrary.get() == nullptr) { NEO::printDebugString(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "Unable to find gtpin library %s\n", gtPinLibraryFilename.c_str()); - result = ZE_RESULT_ERROR_UNKNOWN; - return; + return ZE_RESULT_ERROR_UNKNOWN; } OpenGTPin_fn openGTPin = reinterpret_cast(hGtPinLibrary.get()->getProcAddress(gtPinOpenFunctionName.c_str())); if (openGTPin == nullptr) { hGtPinLibrary.reset(nullptr); NEO::printDebugString(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "Unable to find gtpin library open function symbol %s\n", gtPinOpenFunctionName.c_str()); - result = ZE_RESULT_ERROR_UNKNOWN; - return; + return ZE_RESULT_ERROR_UNKNOWN; } uint32_t openResult = openGTPin(nullptr); if (openResult != 0) { hGtPinLibrary.reset(nullptr); NEO::printDebugString(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "gtpin library open %s failed with status %u\n", gtPinOpenFunctionName.c_str(), openResult); - result = ZE_RESULT_ERROR_UNKNOWN; - return; + return ZE_RESULT_ERROR_UNKNOWN; } + + return ZE_RESULT_SUCCESS; } } // namespace L0 diff --git a/level_zero/tools/source/pin/pin.h b/level_zero/tools/source/pin/pin.h index 56266b1b9d..8ba77a69ff 100644 --- a/level_zero/tools/source/pin/pin.h +++ b/level_zero/tools/source/pin/pin.h @@ -15,7 +15,7 @@ namespace L0 { class PinContext { public: - static void init(ze_init_flag_t flag, ze_result_t &result); + static ze_result_t init(); private: static const std::string gtPinLibraryFilename; diff --git a/level_zero/tools/source/tools_init_imp.cpp b/level_zero/tools/source/tools_init_imp.cpp index 02100f22a6..2b694d27c0 100644 --- a/level_zero/tools/source/tools_init_imp.cpp +++ b/level_zero/tools/source/tools_init_imp.cpp @@ -7,7 +7,6 @@ #include "level_zero/tools/source/tools_init_imp.h" -#include "level_zero/tools/source/pin/pin.h" #include "level_zero/tools/source/sysman/sysman.h" #include "level_zero/tools/source/tools_init.h" @@ -18,10 +17,6 @@ namespace L0 { static void enableTools(ze_result_t &result, ze_init_flag_t flag, bool *ptoolsAreEnabled) { SysmanHandleContext::init(flag); - PinContext::init(flag, std::ref(result)); - if (result != ZE_RESULT_SUCCESS) { - return; - } *ptoolsAreEnabled = true; }