]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
log: Add a flag to enable log drivers
authorSimon Glass <sjg@chromium.org>
Sat, 12 Sep 2020 18:28:47 +0000 (12:28 -0600)
committerTom Rini <trini@konsulko.com>
Sat, 10 Oct 2020 20:50:11 +0000 (16:50 -0400)
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 <sjg@chromium.org>
common/log.c
common/log_console.c
common/log_syslog.c
include/log.h

index ac34f1c97b9e30e51286c1df95dd5d9e99519870..d6dfabb09a6d74bbbceada8f7c69ed6fa6fa200c 100644 (file)
@@ -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++;
index bb3f8464b986d3eaaf972437b396b72d2b70d8c3..8776fd4703917f8ca1c0ae2d3be1949809fb9531 100644 (file)
@@ -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,
 };
index 2ae703fed7103b812492d236de3ed77392c997ee..8276883780d4a663df27e342685dc1904daf34fd 100644 (file)
@@ -107,4 +107,5 @@ out:
 LOG_DRIVER(syslog) = {
        .name   = "syslog",
        .emit   = log_syslog_emit,
+       .flags  = LOGDF_ENABLE,
 };
index 86c8d7be09d7aa9624f22c2a3b149e2157dc1568..d28bc1ef0e48858eaafe8ed4dcf66fe62babeaa1 100644 (file)
@@ -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;