From b45203004ec3f3e5a259e68eddb3eb572d37f56d Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Sat, 12 Sep 2020 12:28:47 -0600 Subject: [PATCH] log: Add a flag to enable log drivers At present there is no way to disable a log driver. But the syslog driver causes (attempted) network traffic in sandbox every time a log message is printed, which is often. Add a flag to enable a log driver. Adjust struct log_device to use a short for next_filter_num so that no more memory is used for devices. Also fix a missing line in the struct log_driver comment while here. To maintain compatibility, enable it for all drivers for now. Signed-off-by: Simon Glass --- common/log.c | 4 +++- common/log_console.c | 1 + common/log_syslog.c | 1 + include/log.h | 11 ++++++++++- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/common/log.c b/common/log.c index ac34f1c97b..d6dfabb09a 100644 --- a/common/log.c +++ b/common/log.c @@ -207,7 +207,8 @@ static int log_dispatch(struct log_rec *rec) /* Emit message */ processing_msg = 1; list_for_each_entry(ldev, &gd->log_head, sibling_node) { - if (log_passes_filters(ldev, rec)) + if ((ldev->flags & LOGDF_ENABLE) && + log_passes_filters(ldev, rec)) ldev->drv->emit(ldev, rec); } processing_msg = 0; @@ -329,6 +330,7 @@ int log_init(void) } INIT_LIST_HEAD(&ldev->filter_head); ldev->drv = drv; + ldev->flags = drv->flags; list_add_tail(&ldev->sibling_node, (struct list_head *)&gd->log_head); drv++; diff --git a/common/log_console.c b/common/log_console.c index bb3f8464b9..8776fd4703 100644 --- a/common/log_console.c +++ b/common/log_console.c @@ -44,4 +44,5 @@ static int log_console_emit(struct log_device *ldev, struct log_rec *rec) LOG_DRIVER(console) = { .name = "console", .emit = log_console_emit, + .flags = LOGDF_ENABLE, }; diff --git a/common/log_syslog.c b/common/log_syslog.c index 2ae703fed7..8276883780 100644 --- a/common/log_syslog.c +++ b/common/log_syslog.c @@ -107,4 +107,5 @@ out: LOG_DRIVER(syslog) = { .name = "syslog", .emit = log_syslog_emit, + .flags = LOGDF_ENABLE, }; diff --git a/include/log.h b/include/log.h index 86c8d7be09..d28bc1ef0e 100644 --- a/include/log.h +++ b/include/log.h @@ -307,10 +307,16 @@ struct log_rec { struct log_device; +enum log_device_flags { + LOGDF_ENABLE = BIT(0), /* Device is enabled */ +}; + /** * struct log_driver - a driver which accepts and processes log records * * @name: Name of driver + * @emit: Method to call to emit a log record via this device + * @flags: Initial value for flags (use LOGDF_ENABLE to enable on start-up) */ struct log_driver { const char *name; @@ -321,6 +327,7 @@ struct log_driver { * for processing. The filter is checked before calling this function. */ int (*emit)(struct log_device *ldev, struct log_rec *rec); + unsigned short flags; }; /** @@ -333,12 +340,14 @@ struct log_driver { * @next_filter_num: Seqence number of next filter filter added (0=no filters * yet). This increments with each new filter on the device, but never * decrements + * @flags: Flags for this filter (enum log_device_flags) * @drv: Pointer to driver for this device * @filter_head: List of filters for this device * @sibling_node: Next device in the list of all devices */ struct log_device { - int next_filter_num; + unsigned short next_filter_num; + unsigned short flags; struct log_driver *drv; struct list_head filter_head; struct list_head sibling_node;