log: Set up a flag byte for log records
authorSimon Glass <sjg@chromium.org>
Thu, 21 Jan 2021 03:10:52 +0000 (20:10 -0700)
committerTom Rini <trini@konsulko.com>
Fri, 12 Mar 2021 22:41:35 +0000 (17:41 -0500)
At present only a single flag (force_debug) is used in log records. Before
adding more, convert this into a bitfield, so more can be added without
using more space.

To avoid expanding the log_record struct itself (which some drivers may
wish to store in memory) reduce the line-number field to 16 bits. This
provides for up to 64K lines which should be enough for anyone.

Signed-off-by: Simon Glass <sjg@chromium.org>
common/log.c
include/log.h

index 6b0034c..f87e33a 100644 (file)
@@ -153,7 +153,7 @@ static bool log_passes_filters(struct log_device *ldev, struct log_rec *rec)
 {
        struct log_filter *filt;
 
-       if (rec->force_debug)
+       if (rec->flags & LOGRECF_FORCE_DEBUG)
                return true;
 
        /* If there are no filters, filter on the default log level */
@@ -245,7 +245,9 @@ int _log(enum log_category_t cat, enum log_level_t level, const char *file,
 
        rec.cat = cat;
        rec.level = level & LOGL_LEVEL_MASK;
-       rec.force_debug = level & LOGL_FORCE_DEBUG;
+       rec.flags = 0;
+       if (level & LOGL_FORCE_DEBUG)
+               rec.flags |= LOGRECF_FORCE_DEBUG;
        rec.file = file;
        rec.line = line;
        rec.func = func;
@@ -255,7 +257,8 @@ int _log(enum log_category_t cat, enum log_level_t level, const char *file,
                gd->log_drop_count++;
 
                /* display dropped traces with console puts and DEBUG_UART */
-               if (rec.level <= CONFIG_LOG_DEFAULT_LEVEL || rec.force_debug) {
+               if (rec.level <= CONFIG_LOG_DEFAULT_LEVEL ||
+                   rec.flags & LOGRECF_FORCE_DEBUG) {
                        char buf[CONFIG_SYS_CBSIZE];
 
                        va_start(args, fmt);
index 2d27f9f..da053b0 100644 (file)
@@ -322,6 +322,12 @@ void __assert_fail(const char *assertion, const char *file, unsigned int line,
 #define log_msg_ret(_msg, _ret) ((void)(_msg), _ret)
 #endif
 
+/** * enum log_rec_flags - Flags for a log record */
+enum log_rec_flags {
+       /** @LOGRECF_FORCE_DEBUG: Force output of debug record */
+       LOGRECF_FORCE_DEBUG     = BIT(0),
+};
+
 /**
  * struct log_rec - a single log record
  *
@@ -337,18 +343,18 @@ void __assert_fail(const char *assertion, const char *file, unsigned int line,
  *
  * @cat: Category, representing a uclass or part of U-Boot
  * @level: Severity level, less severe is higher
- * @force_debug: Force output of debug
- * @file: Name of file where the log record was generated (not allocated)
  * @line: Line number where the log record was generated
+ * @flags: Flags for log record (enum log_rec_flags)
+ * @file: Name of file where the log record was generated (not allocated)
  * @func: Function where the log record was generated (not allocated)
  * @msg: Log message (allocated)
  */
 struct log_rec {
        enum log_category_t cat;
        enum log_level_t level;
-       bool force_debug;
+       u16 line;
+       u8 flags;
        const char *file;
-       int line;
        const char *func;
        const char *msg;
 };