]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
log: Convert log values to printf() if not enabled
authorSimon Glass <sjg@chromium.org>
Sat, 8 May 2021 19:46:54 +0000 (13:46 -0600)
committerTom Rini <trini@konsulko.com>
Tue, 8 Jun 2021 15:39:09 +0000 (11:39 -0400)
At present if logging not enabled, log_info() becomes a nop. But we want
log output at the 'info' level to be akin to printf(). Update the macro to
pass the output straight to printf() in this case.

This mimics the behaviour for the log_...() macros like log_debug() and
log_info(), so we can drop the special case for these.

Add new tests to cover this case.
Signed-off-by: Simon Glass <sjg@chromium.org>
doc/develop/logging.rst
include/log.h
test/log/Makefile
test/log/nolog_ndebug.c [new file with mode: 0644]
test/log/nolog_test.c

index f4e925048e8d35daf99cf5f77be07f6224083892..51095b05ba9afbe1c72351bc820b8e20f9ff824e 100644 (file)
@@ -52,6 +52,10 @@ If CONFIG_LOG is not set, then no logging will be available.
 The above have SPL and TPL versions also, e.g. CONFIG_SPL_LOG_MAX_LEVEL and
 CONFIG_TPL_LOG_MAX_LEVEL.
 
+If logging is disabled, the default behaviour is to output any message at
+level LOGL_INFO and below. If logging is disabled and DEBUG is defined (at
+the very top of a C file) then any message at LOGL_DEBUG will be written.
+
 Temporary logging within a single file
 --------------------------------------
 
@@ -291,8 +295,6 @@ More logging destinations:
 
 Convert debug() statements in the code to log() statements
 
-Support making printf() emit log statements at L_INFO level
-
 Convert error() statements in the code to log() statements
 
 Figure out what to do with BUG(), BUG_ON() and warn_non_spl()
index feb0204855ac29624e46698c9c2f4a7ecf70f7c9..e0e12ce1944eac3c27414e732f7aabd433907ebf 100644 (file)
@@ -174,6 +174,10 @@ int _log_buffer(enum log_category_t cat, enum log_level_t level,
  */
 #if CONFIG_IS_ENABLED(LOG)
 #define _LOG_MAX_LEVEL CONFIG_VAL(LOG_MAX_LEVEL)
+#else
+#define _LOG_MAX_LEVEL LOGL_INFO
+#endif
+
 #define log_emer(_fmt...)      log(LOG_CATEGORY, LOGL_EMERG, ##_fmt)
 #define log_alert(_fmt...)     log(LOG_CATEGORY, LOGL_ALERT, ##_fmt)
 #define log_crit(_fmt...)      log(LOG_CATEGORY, LOGL_CRIT, ##_fmt)
@@ -185,34 +189,19 @@ int _log_buffer(enum log_category_t cat, enum log_level_t level,
 #define log_content(_fmt...)   log(LOG_CATEGORY, LOGL_DEBUG_CONTENT, ##_fmt)
 #define log_io(_fmt...)                log(LOG_CATEGORY, LOGL_DEBUG_IO, ##_fmt)
 #define log_cont(_fmt...)      log(LOGC_CONT, LOGL_CONT, ##_fmt)
-#else
-#define _LOG_MAX_LEVEL LOGL_INFO
-#define log_emerg(_fmt, ...)   printf(_fmt, ##__VA_ARGS__)
-#define log_alert(_fmt, ...)   printf(_fmt, ##__VA_ARGS__)
-#define log_crit(_fmt, ...)    printf(_fmt, ##__VA_ARGS__)
-#define log_err(_fmt, ...)     printf(_fmt, ##__VA_ARGS__)
-#define log_warning(_fmt, ...) printf(_fmt, ##__VA_ARGS__)
-#define log_notice(_fmt, ...)  printf(_fmt, ##__VA_ARGS__)
-#define log_info(_fmt, ...)    printf(_fmt, ##__VA_ARGS__)
-#define log_cont(_fmt, ...)    printf(_fmt, ##__VA_ARGS__)
-#define log_debug(_fmt, ...)   debug(_fmt, ##__VA_ARGS__)
-#define log_content(_fmt...)   log_nop(LOG_CATEGORY, \
-                                       LOGL_DEBUG_CONTENT, ##_fmt)
-#define log_io(_fmt...)                log_nop(LOG_CATEGORY, LOGL_DEBUG_IO, ##_fmt)
-#endif
 
-#if CONFIG_IS_ENABLED(LOG)
 #ifdef LOG_DEBUG
 #define _LOG_DEBUG     LOGL_FORCE_DEBUG
 #else
 #define _LOG_DEBUG     0
 #endif
 
+#if CONFIG_IS_ENABLED(LOG)
+
 /* Emit a log record if the level is less that the maximum */
 #define log(_cat, _level, _fmt, _args...) ({ \
        int _l = _level; \
-       if (CONFIG_IS_ENABLED(LOG) && \
-           (_LOG_DEBUG != 0 || _l <= _LOG_MAX_LEVEL)) \
+       if (_LOG_DEBUG != 0 || _l <= _LOG_MAX_LEVEL) \
                _log((enum log_category_t)(_cat), \
                     (enum log_level_t)(_l | _LOG_DEBUG), __FILE__, \
                     __LINE__, __func__, \
@@ -229,7 +218,14 @@ int _log_buffer(enum log_category_t cat, enum log_level_t level,
                            _width, _count, _linelen); \
        })
 #else
-#define log(_cat, _level, _fmt, _args...)
+
+/* Note: _LOG_DEBUG != 0 avoids a warning with clang */
+#define log(_cat, _level, _fmt, _args...) ({ \
+       int _l = _level; \
+       if (_LOG_DEBUG != 0 || _l <= LOGL_INFO || \
+           (_DEBUG && _l == LOGL_DEBUG)) \
+               printf(_fmt, ##_args); \
+       })
 
 #define log_buffer(_cat, _level, _addr, _data, _width, _count, _linelen)  ({ \
        int _l = _level; \
index 09f8689d07072bf8a176859c4490aeb6cd827110..08eea70e3446ad3d7f42335d82663e2207783b8f 100644 (file)
@@ -20,6 +20,7 @@ obj-$(CONFIG_CONSOLE_RECORD) += cont_test.o
 obj-y += pr_cont_test.o
 else
 obj-$(CONFIG_CONSOLE_RECORD) += nolog_test.o
+obj-$(CONFIG_CONSOLE_RECORD) += nolog_ndebug.o
 endif
 
 endif # CONFIG_UT_LOG
diff --git a/test/log/nolog_ndebug.c b/test/log/nolog_ndebug.c
new file mode 100644 (file)
index 0000000..bd9a4f4
--- /dev/null
@@ -0,0 +1,39 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2021 Google LLC
+ *
+ * Logging function tests for CONFIG_LOG=n without #define DEBUG
+ */
+
+#include <common.h>
+#include <console.h>
+#include <log.h>
+#include <asm/global_data.h>
+#include <test/log.h>
+#include <test/ut.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define BUFFSIZE 32
+
+static int log_test_log_disabled_ndebug(struct unit_test_state *uts)
+{
+       char buf[BUFFSIZE];
+       int i;
+
+       memset(buf, 0, BUFFSIZE);
+       console_record_reset_enable();
+
+       /* Output a log record at every level */
+       for (i = LOGL_EMERG; i < LOGL_COUNT; i++)
+               log(LOGC_NONE, i, "testing level %i\n", i);
+       gd->flags &= ~GD_FLG_RECORD;
+
+       /* Since DEBUG is not defined, we expect to not get debug output */
+       for (i = LOGL_EMERG; i < LOGL_DEBUG; i++)
+               ut_assertok(ut_check_console_line(uts, "testing level %d", i));
+       ut_assertok(ut_check_console_end(uts));
+
+       return 0;
+}
+LOG_TEST(log_test_log_disabled_ndebug);
index cb4fb3db9a206916c8d8786a933f015fdeccb471..4e52e5bed822af34e8bc4e3b6c63a3823dc83995 100644 (file)
@@ -10,6 +10,7 @@
 
 #include <common.h>
 #include <console.h>
+#include <log.h>
 #include <asm/global_data.h>
 #include <test/log.h>
 #include <test/test.h>
@@ -128,8 +129,10 @@ static int log_test_nolog_debug(struct unit_test_state *uts)
        memset(buf, 0, BUFFSIZE);
        console_record_reset_enable();
        log_debug("testing %s\n", "log_debug");
+       log(LOGC_NONE, LOGL_DEBUG, "more %s\n", "log_debug");
        gd->flags &= ~GD_FLG_RECORD;
        ut_assertok(ut_check_console_line(uts, "testing log_debug"));
+       ut_assertok(ut_check_console_line(uts, "more log_debug"));
        ut_assertok(ut_check_console_end(uts));
        return 0;
 }