]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
log: Add filter flag to match greater than a log level
authorSean Anderson <seanga2@gmail.com>
Tue, 27 Oct 2020 23:55:30 +0000 (19:55 -0400)
committerTom Rini <trini@konsulko.com>
Fri, 30 Oct 2020 14:55:26 +0000 (10:55 -0400)
This is the complement of the existing behavior to match only messages with
a log level less than a threshold. This is primarily useful in conjunction
with LOGFF_DENY.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
common/log.c
include/log.h

index c1b6b6105fb25e1e2601fdaeda5bb3ce5f73e6b0..4b6f3fcd04a57efde2f7ae643c95c4d6a7c89924 100644 (file)
@@ -162,11 +162,17 @@ static bool log_passes_filters(struct log_device *ldev, struct log_rec *rec)
        }
 
        list_for_each_entry(filt, &ldev->filter_head, sibling_node) {
-               if (rec->level > filt->max_level)
+               if (filt->flags & LOGFF_LEVEL_MIN) {
+                       if (rec->level < filt->level)
+                               continue;
+               } else if (rec->level > filt->level) {
                        continue;
+               }
+
                if ((filt->flags & LOGFF_HAS_CAT) &&
                    !log_has_cat(filt->cat_list, rec->cat))
                        continue;
+
                if (filt->file_list &&
                    !log_has_file(filt->file_list, rec->file))
                        continue;
@@ -251,7 +257,7 @@ int _log(enum log_category_t cat, enum log_level_t level, const char *file,
 }
 
 int log_add_filter_flags(const char *drv_name, enum log_category_t cat_list[],
-                        enum log_level_t max_level, const char *file_list,
+                        enum log_level_t level, const char *file_list,
                         int flags)
 {
        struct log_filter *filt;
@@ -279,7 +285,7 @@ int log_add_filter_flags(const char *drv_name, enum log_category_t cat_list[],
                                break;
                }
        }
-       filt->max_level = max_level;
+       filt->level = level;
        if (file_list) {
                filt->file_list = strdup(file_list);
                if (!filt->file_list) {
index 05833f24bce742b7347b8e83d370b010f9e13c69..94ac729d9c3e4bef7fff2b3390c808fc0fe0b7a9 100644 (file)
@@ -369,6 +369,8 @@ enum log_filter_flags {
        LOGFF_HAS_CAT   = 1 << 0,
        /** @LOGFF_DENY: Filter denies matching messages */
        LOGFF_DENY      = 1 << 1,
+       /** @LOGFF_LEVEL_MIN: Filter's level is a minimum, not a maximum */
+       LOGFF_LEVEL_MIN = 1 << 2,
 };
 
 /**
@@ -384,7 +386,7 @@ enum log_filter_flags {
  * @cat_list: List of categories to allow (terminated by %LOGC_END). If empty
  *     then all categories are permitted. Up to LOGF_MAX_CATEGORIES entries
  *     can be provided
- * @max_level: Maximum log level to allow
+ * @level: Maximum (or minimum, if LOGFF_MIN_LEVEL) log level to allow
  * @file_list: List of files to allow, separated by comma. If NULL then all
  *     files are permitted
  * @sibling_node: Next filter in the list of filters for this log device
@@ -393,7 +395,7 @@ struct log_filter {
        int filter_num;
        int flags;
        enum log_category_t cat_list[LOGF_MAX_CATEGORIES];
-       enum log_level_t max_level;
+       enum log_level_t level;
        const char *file_list;
        struct list_head sibling_node;
 };
@@ -494,14 +496,14 @@ int do_log_test(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]);
  * @cat_list: List of categories to allow (terminated by %LOGC_END). If empty
  *     then all categories are permitted. Up to LOGF_MAX_CATEGORIES entries
  *     can be provided
- * @max_level: Maximum log level to allow
+ * @level: Maximum (or minimum, if LOGFF_LEVEL_MIN) log level to allow
  * @file_list: List of files to allow, separated by comma. If NULL then all
  *     files are permitted
  * @return the sequence number of the new filter (>=0) if the filter was added,
  *     or a -ve value on error
  */
 int log_add_filter_flags(const char *drv_name, enum log_category_t cat_list[],
-                        enum log_level_t max_level, const char *file_list,
+                        enum log_level_t level, const char *file_list,
                         int flags);
 
 /**