[PATCH 7/7] commands: dmesg: give log_print a console_device parameter

Ahmad Fatoum
2026-04-13T10:11:58Z

log_print currently prints out unconditionally to stdout and thus has no
support for printing to a single specific console, e.g. the framebuffer
console.

Make use of the new console_printf() to address this.

Signed-off-by: Ahmad Fatoum <a.fatoum@barebox.org>
---
commands/dmesg.c | 2 +-
common/console_common.c | 17 +++++++++--------
include/linux/printk.h | 3 ++-
3 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/commands/dmesg.c b/commands/dmesg.c
index 0313c8cdea74..06796287aaec 100644
--- a/commands/dmesg.c
+++ b/commands/dmesg.c
@@ -158,7 +158,7 @@ static int do_dmesg(int argc, char *argv[])
return 0;
}

- ret = log_print(flags, levels);
+ ret = log_print(CONSOLE_DEV_STDOUT, flags, levels);
if (ret)
return 1;

diff --git a/common/console_common.c b/common/console_common.c
index 310534affa58..de0a213f833c 100644
--- a/common/console_common.c
+++ b/common/console_common.c
@@ -215,13 +215,14 @@ int log_writefile(const char *filepath)
/**
* log_print - print the log buffer
*
+ * @con: Console device to print to
* @flags: Flags selecting output formatting
* @levels: bitmask of loglevels to print, 0 for all
*
* This function prints the messages of the selected levels; optionally with
* additional information and formatting.
*/
-int log_print(unsigned flags, unsigned levels)
+int log_print(struct console_device *con, unsigned flags, unsigned levels)
{
struct log_entry *log;
unsigned long last = 0;
@@ -237,30 +238,30 @@ int log_print(unsigned flags, unsigned levels)

if (!(flags & (BAREBOX_LOG_PRINT_RAW | BAREBOX_LOG_PRINT_TIME
| BAREBOX_LOG_DIFF_TIME)))
- print_colored_log_level(CONSOLE_DEV_STDOUT, log->level);
+ print_colored_log_level(con, log->level);

if (flags & BAREBOX_LOG_PRINT_RAW)
- printf("<%i>", log->level);
+ console_printf(con, "<%i>", log->level);

/* convert ns to us */
do_div(time_ns, 1000);
time = time_ns;

if (flags & (BAREBOX_LOG_PRINT_TIME | BAREBOX_LOG_DIFF_TIME))
- printf("[");
+ console_printf(con, "[");

if (flags & BAREBOX_LOG_PRINT_TIME)
- printf("%10luus", time);
+ console_printf(con, "%10luus", time);

if (flags & BAREBOX_LOG_DIFF_TIME) {
- printf(" < %10luus", time - last);
+ console_printf(con, " < %10luus", time - last);
last = time;
}

if (flags & (BAREBOX_LOG_PRINT_TIME | BAREBOX_LOG_DIFF_TIME))
- printf("] ");
+ console_printf(con, "] ");

- printf("%s", log->msg);
+ console_printf(con, "%s", log->msg);
}

return 0;
diff --git a/include/linux/printk.h b/include/linux/printk.h
index deaaa44b31a7..4d6df821e1f1 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -192,7 +192,8 @@ extern void log_clean(unsigned int limit);
#define BAREBOX_LOG_PRINT_TIME BIT(0)

int log_writefile(const char *filepath);
-int log_print(unsigned flags, unsigned levels);
+struct console_device;
+int log_print(struct console_device *console, unsigned flags, unsigned levels);

struct va_format {
const char *fmt;
--
2.47.3