Skip to content

Commit 8fffd57

Browse files
committed
Re-add Legacy output retention and =2 options
+ Change logging enablement modes to support =2 ZE_ENABLE_LOADER_DEBUG_TRACE=1 retains behavior ZE_ENABLE_LOADER_DEBUG_TRACE=2 enables enhanced output The same for ZEL_ENABLE_LOADER_LOGGING=1 and =2 + This will allow for improved transition while we get LLVM corrected. Signed-off-by: Russell McGuire <russell.w.mcguire@intel.com>
1 parent 7d0df6f commit 8fffd57

5 files changed

Lines changed: 87 additions & 49 deletions

File tree

source/inc/ze_util.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,32 @@ inline bool getenv_tobool( const char* name )
148148
return ( 0 == strcmp( "1", env ) );
149149
}
150150

151+
// Returns the numeric mode (0, 1, or 2) for env vars that support a two-level
152+
// flag scheme: 0 = off, 1 = legacy/normal, 2 = advanced/verbose.
153+
// Any value other than "1" or "2" is treated as 0.
154+
inline uint32_t getenv_tomode( const char* name )
155+
{
156+
const char* env = nullptr;
157+
158+
#if defined(_WIN32)
159+
char buffer[8];
160+
auto rc = GetEnvironmentVariable(name, buffer, 8);
161+
if (0 != rc && rc <= 8) {
162+
env = buffer;
163+
}
164+
#else
165+
env = getenv(name);
166+
#endif
167+
168+
if (env == nullptr || strcmp("0", env) == 0)
169+
return 0;
170+
if (strcmp("2", env) == 0)
171+
return 2;
172+
if (strcmp("1", env) == 0)
173+
return 1;
174+
return 0;
175+
}
176+
151177

152178
inline std::string getenv_string ( const char* name){
153179

source/lib/ze_lib.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,11 @@ namespace ze_lib
6363
///////////////////////////////////////////////////////////////////////////////
6464
__zedlllocal context_t::context_t()
6565
{
66-
debugTraceEnabled = getenv_tobool( "ZE_ENABLE_LOADER_DEBUG_TRACE" );
67-
if (debugTraceEnabled) {
68-
std::cerr << "ZE_LOADER_DEBUG_TRACE: WARNING: ZE_ENABLE_LOADER_DEBUG_TRACE is deprecated and will be removed in a future release." << std::endl;
69-
std::cerr << "ZE_LOADER_DEBUG_TRACE: WARNING: Use ZEL_LOADER_LOG_CONSOLE=1 with ZEL_LOADER_LOGGING_LEVEL=trace instead." << std::endl;
66+
{
67+
uint32_t dtMode = getenv_tomode( "ZE_ENABLE_LOADER_DEBUG_TRACE" );
68+
debugTraceEnabled = (dtMode != 0);
7069
}
70+
7171
memset(&initialzeDdiTable, 0, sizeof(ze_dditable_t));
7272
memset(&initialzetDdiTable, 0, sizeof(zet_dditable_t));
7373
memset(&initialzesDdiTable, 0, sizeof(zes_dditable_t));
@@ -112,10 +112,7 @@ namespace ze_lib
112112
}
113113
#endif
114114
if (debugTraceEnabled) {
115-
if (loaderLibraryPath.empty())
116-
debug_trace_message("Static Loader Using Loader Library Path: ", "Not set");
117-
else
118-
debug_trace_message("Static Loader Using Loader Library Path: ", loaderLibraryPath);
115+
debug_trace_message("Static Loader Using Loader Library Path: ", loaderLibraryPath);
119116
}
120117
std::string loaderFullLibraryPath = create_library_path(MAKE_LIBRARY_NAME( "ze_loader", L0_LOADER_VERSION), loaderLibraryPath.c_str());
121118
loader = LOAD_DRIVER_LIBRARY(loaderFullLibraryPath.c_str());

source/loader/ze_loader.cpp

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -620,8 +620,13 @@ namespace loader
620620
loader::loaderDispatch->pRuntime = new zer_dditable_driver_t();
621621
loader::loaderDispatch->pRuntime->version = ZE_API_VERSION_CURRENT;
622622
loader::loaderDispatch->pRuntime->isValidFlag = 1;
623-
debugTraceEnabled = getenv_tobool( "ZE_ENABLE_LOADER_DEBUG_TRACE" );
624-
if (debugTraceEnabled) {
623+
{
624+
uint32_t dtMode = getenv_tomode( "ZE_ENABLE_LOADER_DEBUG_TRACE" );
625+
const uint32_t loggingMode = getenv_tomode("ZEL_ENABLE_LOADER_LOGGING");
626+
debugTraceEnabled = (dtMode != 0);
627+
debugTraceAdvanced = (dtMode == 2) || (loggingMode == 2);
628+
}
629+
if (debugTraceAdvanced) {
625630
std::cerr << "ZE_LOADER_DEBUG_TRACE: WARNING: ZE_ENABLE_LOADER_DEBUG_TRACE is deprecated and will be removed in a future release." << std::endl;
626631
std::cerr << "ZE_LOADER_DEBUG_TRACE: WARNING: Use ZEL_LOADER_LOG_CONSOLE=1 with ZEL_LOADER_LOGGING_LEVEL=trace instead." << std::endl;
627632
}
@@ -646,10 +651,6 @@ namespace loader
646651
zel_logger = createLogger("Dynamic Loader");
647652
#endif
648653

649-
if ((getenv_string("ZEL_LOADER_LOGGING_LEVEL") == "trace") && !debugTraceEnabled) {
650-
debugTraceEnabled = true;
651-
}
652-
653654
if (zel_logger->getLevel() != loader::LogLevel::off) {
654655
std::string ver_msg = "Loader Version " +
655656
std::to_string(LOADER_VERSION_MAJOR) + "." +
@@ -670,12 +671,9 @@ namespace loader
670671
loaderLibraryPath = readLevelZeroLoaderLibraryPath();
671672
}
672673
#endif
673-
if (debugTraceEnabled) {
674-
if (loaderLibraryPath.empty())
675-
debug_trace_message("Using Loader Library Path: ", "Not set");
676-
else
677-
debug_trace_message("Using Loader Library Path: ", loaderLibraryPath);
678-
}
674+
if (debugTraceEnabled)
675+
debug_trace_message("Using Loader Library Path: ",
676+
(debugTraceAdvanced && loaderLibraryPath.empty()) ? "Not set" : loaderLibraryPath);
679677

680678
if (debugTraceEnabled && driverDDIPathDefault) {
681679
debug_trace_message("DDI Driver Extension Path is Enabled", "");
@@ -690,12 +688,16 @@ namespace loader
690688
{
691689
zel_logger->log_info("Enabling Null Driver");
692690
std::string nullDriverPath = create_library_path( MAKE_LIBRARY_NAME( "ze_null", L0_LOADER_VERSION ), loaderLibraryPath.c_str());
693-
if (debugTraceEnabled)
694-
debug_trace_message("Null Driver Library Path (requested): ", nullDriverPath);
691+
if (debugTraceEnabled) {
692+
if (debugTraceAdvanced)
693+
debug_trace_message("Null Driver Library Path (requested): ", nullDriverPath);
694+
else
695+
debug_trace_message("ze_null Driver Init", "");
696+
}
695697
auto handle = LOAD_DRIVER_LIBRARY( nullDriverPath.c_str() );
696698
if( NULL != handle )
697699
{
698-
if (debugTraceEnabled) {
700+
if (debugTraceEnabled && debugTraceAdvanced) {
699701
#if !defined(_WIN32) && !defined(ANDROID)
700702
struct link_map *dlinfo_map;
701703
if (dlinfo(handle, RTLD_DI_LINKMAP, &dlinfo_map) == 0) {
@@ -770,12 +772,12 @@ namespace loader
770772
{
771773
zel_logger->log_info("Validation Layer Enabled");
772774
std::string validationLayerLibraryPath = create_library_path(MAKE_LAYER_NAME( "ze_validation_layer" ), loaderLibraryPath.c_str());
773-
if (debugTraceEnabled)
775+
if (debugTraceEnabled && debugTraceAdvanced)
774776
debug_trace_message("Validation Layer Library Path (requested): ", validationLayerLibraryPath);
775777
validationLayer = LOAD_DRIVER_LIBRARY( validationLayerLibraryPath.c_str() );
776778
if(validationLayer)
777779
{
778-
if (debugTraceEnabled) {
780+
if (debugTraceEnabled && debugTraceAdvanced) {
779781
#if !defined(_WIN32) && !defined(ANDROID)
780782
struct link_map *dlinfo_map;
781783
if (dlinfo(validationLayer, RTLD_DI_LINKMAP, &dlinfo_map) == 0) {
@@ -818,11 +820,11 @@ namespace loader
818820
}
819821
std::string tracingLayerLibraryPath = create_library_path(MAKE_LAYER_NAME( "ze_tracing_layer" ), loaderLibraryPath.c_str());
820822
if (debugTraceEnabled)
821-
debug_trace_message("Tracing Layer Library Path (requested): ", tracingLayerLibraryPath);
823+
debug_trace_message(debugTraceAdvanced ? "Tracing Layer Library Path (requested): " : "Tracing Layer Library Path: ", tracingLayerLibraryPath);
822824
tracingLayer = LOAD_DRIVER_LIBRARY( tracingLayerLibraryPath.c_str() );
823825
if(tracingLayer)
824826
{
825-
if (debugTraceEnabled) {
827+
if (debugTraceEnabled && debugTraceAdvanced) {
826828
#if !defined(_WIN32) && !defined(ANDROID)
827829
struct link_map *dlinfo_map;
828830
if (dlinfo(tracingLayer, RTLD_DI_LINKMAP, &dlinfo_map) == 0) {

source/loader/ze_loader_internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ namespace loader
166166
~context_t();
167167
bool intercept_enabled = false;
168168
bool debugTraceEnabled = false;
169+
bool debugTraceAdvanced = false; // true when ZE_ENABLE_LOADER_DEBUG_TRACE=2 or ZEL_ENABLE_LOADER_LOGGING=2
169170
bool driverDDIPathDefault = false;
170171
bool tracingLayerEnabled = false;
171172
std::once_flag coreDriverSortOnce;

source/utils/ze_logger.cpp

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,10 @@ struct LogSink {
141141
if (file_stream.is_open()) {
142142
stream = &file_stream;
143143
is_good = true;
144+
} else {
145+
// Capture errno immediately — any subsequent syscall may clobber it.
146+
std::cerr << "ze_logger: Unable to open log file '" << path
147+
<< "': " << errnoToString(errno) << "\n";
144148
}
145149
// Files never get color output
146150
}
@@ -160,6 +164,15 @@ struct LogSink {
160164
std::lock_guard<std::mutex> lk(mtx);
161165
if (is_good) {
162166
*stream << line << '\n';
167+
// stream->fail() is a single rdstate() bitmask read — negligible cost.
168+
// Once a failure is detected, is_good=false so all future calls return
169+
// immediately at the guard above, paying zero additional cost.
170+
if (stream->fail()) {
171+
is_good = false;
172+
// Capture errno immediately; write failures (e.g. ENOSPC, EIO) set it.
173+
std::cerr << "ze_logger: Log stream write failed: "
174+
<< errnoToString(errno) << "\n";
175+
}
163176
}
164177
}
165178

@@ -194,11 +207,7 @@ ZeLogger::ZeLogger()
194207

195208
ZeLogger::ZeLogger(const std::string &log_path, LogLevel level, const std::string &pattern)
196209
: _level(level), _pattern(pattern), _sink(new LogSink(log_path))
197-
{
198-
if (!_sink->good()) {
199-
std::cerr << "ze_logger: Unable to open log file: " << log_path << "\n";
200-
}
201-
}
210+
{}
202211

203212
ZeLogger::ZeLogger(bool use_stderr, LogLevel level, const std::string &pattern)
204213
: _level(level), _pattern(pattern), _sink(new LogSink(use_stderr))
@@ -505,7 +514,8 @@ std::shared_ptr<ZeLogger> createLogger(const std::string &caller) {
505514
std::string full_log_file_path = log_directory + "/" + loader_file;
506515
#endif
507516

508-
const bool logging_enabled = getenv_tobool("ZEL_ENABLE_LOADER_LOGGING");
517+
const uint32_t logging_mode = getenv_tomode("ZEL_ENABLE_LOADER_LOGGING");
518+
const bool logging_enabled = (logging_mode != 0);
509519
auto log_level = getenv_string("ZEL_LOADER_LOGGING_LEVEL");
510520
if (log_level.empty()) {
511521
log_level = "warn";
@@ -517,15 +527,17 @@ std::shared_ptr<ZeLogger> createLogger(const std::string &caller) {
517527
log_pattern = custom_pattern;
518528
}
519529

520-
const bool log_console = getenv_tobool("ZEL_LOADER_LOG_CONSOLE");
530+
const uint32_t log_console_mode = getenv_tomode("ZEL_LOADER_LOG_CONSOLE");
531+
const bool log_console = (log_console_mode != 0);
532+
const bool advanced_mode = (logging_mode == 2) || (getenv_tomode("ZE_ENABLE_LOADER_DEBUG_TRACE") == 2);
521533

522534
// Honour the matrix:
523-
// logging_enabled=0, log_console=0 → no-op (level off, no file I/O)
524-
// logging_enabled=0, log_console=1 → console (stderr), configured level
535+
// logging_enabled=0, log_console=* → no-op (ZEL_ENABLE_LOADER_LOGGING is required)
525536
// logging_enabled=1, log_console=0 → file sink, configured level
526537
// logging_enabled=1, log_console=1 → console (stderr), configured level
527-
if (!logging_enabled && !log_console) {
538+
if (!logging_enabled) {
528539
// Pure no-op: no sink, no mutex, no isatty() syscall, no pattern string.
540+
// ZEL_LOADER_LOG_CONSOLE alone does not activate the logger.
529541
return std::shared_ptr<ZeLogger>(new ZeLogger());
530542
}
531543

@@ -584,18 +596,18 @@ std::shared_ptr<ZeLogger> createLogger(const std::string &caller) {
584596
output_dest = full_log_file_path;
585597
}
586598

587-
// Emit the active configuration as the first log message so the user can
588-
// confirm what was enabled and where output is going.
589-
std::string cfg;
590-
cfg = caller + " logging enabled:";
591-
cfg += "\n ZEL_LOADER_LOG_CONSOLE : " + std::string(log_console ? "stderr" : "disabled");
592-
cfg += "\n ZEL_ENABLE_LOADER_LOGGING : " + std::string(logging_enabled ? "enabled" : "disabled");
593-
cfg += "\n ZEL_LOADER_LOGGING_LEVEL : " + log_level;
594-
cfg += "\n ZEL_LOADER_LOG_DIR : " + log_directory;
595-
cfg += "\n ZEL_LOADER_LOG_FILE : " + loader_file;
596-
cfg += "\n ZEL_LOADER_LOG_PATTERN : " + log_pattern;
597-
cfg += "\n Output : " + output_dest;
598-
logger->info(cfg);
599+
if (advanced_mode) {
600+
std::string cfg;
601+
cfg = caller + " logging enabled:";
602+
cfg += "\n ZEL_LOADER_LOG_CONSOLE : " + std::string(log_console ? "stderr" : "disabled");
603+
cfg += "\n ZEL_ENABLE_LOADER_LOGGING : " + std::string(logging_enabled ? "enabled" : "disabled");
604+
cfg += "\n ZEL_LOADER_LOGGING_LEVEL : " + log_level;
605+
cfg += "\n ZEL_LOADER_LOG_DIR : " + log_directory;
606+
cfg += "\n ZEL_LOADER_LOG_FILE : " + loader_file;
607+
cfg += "\n ZEL_LOADER_LOG_PATTERN : " + log_pattern;
608+
cfg += "\n Output : " + output_dest;
609+
logger->info(cfg);
610+
}
599611

600612
return logger;
601613
}

0 commit comments

Comments
 (0)