diff options
author | Sean Anderson <seanga2@gmail.com> | 2020-10-27 19:55:30 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2020-10-30 10:55:26 -0400 |
commit | 40455a6915e1f08e74a71d5c859ef93b6d815899 (patch) | |
tree | c23e154c70eefef29d43f0bbe439777261bd3fc4 | |
parent | f51e5ec4d7ebb6be110ef20eda6e000a04695221 (diff) | |
download | u-boot-40455a6915e1f08e74a71d5c859ef93b6d815899.zip u-boot-40455a6915e1f08e74a71d5c859ef93b6d815899.tar.gz u-boot-40455a6915e1f08e74a71d5c859ef93b6d815899.tar.bz2 |
log: Add filter flag to match greater than a log level
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>
-rw-r--r-- | common/log.c | 12 | ||||
-rw-r--r-- | include/log.h | 10 |
2 files changed, 15 insertions, 7 deletions
diff --git a/common/log.c b/common/log.c index c1b6b61..4b6f3fc 100644 --- a/common/log.c +++ b/common/log.c @@ -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) { diff --git a/include/log.h b/include/log.h index 05833f2..94ac729 100644 --- a/include/log.h +++ b/include/log.h @@ -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); /** |