mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Ahmad Fatoum <a.fatoum@barebox.org>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@barebox.org>
Subject: [PATCH 19/20] fbconsole: adapt logging depending on activated streams
Date: Sun,  3 May 2026 10:33:21 +0200	[thread overview]
Message-ID: <20260503084430.2765761-20-a.fatoum@barebox.org> (raw)
In-Reply-To: <20260503084430.2765761-1-a.fatoum@barebox.org>

The console_device::f_active member is only set after the console has
been successfully opened. Setting it earlier is not feasible as that
means a poller could attempt outputting on a console while it's being
enabled.

Instead, let's pass the activation flags as argument to the optional
open callback. The callback is only used by the netconsole and the
fbconsole.

This resolves two issues at the same time:

- We can suppress log messages when the device is briefly opened via
  `echo -a /dev/fbconsoleX MESSAGE`. Otherwise writing a message while
  the fbconsole is not activated for a CONSOLE_STD* stream, would each
  time result in a message like "fb0: framebuffer console WxH
  activated".

- We can replay all accumulated log messages, so users without access
  to the serial output still see what had transpired prior to console
  activation. This is especially useful for the framebuffer console as
  it does not support output on its own.

Signed-off-by: Ahmad Fatoum <a.fatoum@barebox.org>
---
 common/console.c          |  8 ++++----
 common/serdev.c           |  2 +-
 drivers/video/fbconsole.c | 12 ++++++++----
 include/console.h         |  4 ++--
 net/netconsole.c          |  2 +-
 5 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/common/console.c b/common/console.c
index acb4c772672c..fd859b97bf4a 100644
--- a/common/console.c
+++ b/common/console.c
@@ -48,12 +48,12 @@ static struct kfifo __console_output_fifo;
 static struct kfifo *console_input_fifo = &__console_input_fifo;
 static struct kfifo *console_output_fifo = &__console_output_fifo;
 
-int console_open(struct console_device *cdev)
+int console_open(struct console_device *cdev, unsigned activate)
 {
 	int ret;
 
 	if (cdev->open && !cdev->open_count) {
-		ret = cdev->open(cdev);
+		ret = cdev->open(cdev, activate);
 		if (ret)
 			return ret;
 	}
@@ -102,7 +102,7 @@ int console_set_active(struct console_device *cdev, unsigned flag)
 		if (ret)
 			return ret;
 	} else {
-		ret = console_open(cdev);
+		ret = console_open(cdev, flag);
 		if (ret)
 			return ret;
 	}
@@ -311,7 +311,7 @@ static int fops_open(struct cdev *cdev, unsigned long flags)
 	if ((flags & (O_WRONLY | O_RDWR)) && !priv->puts )
 		return -EPERM;
 
-	return console_open(priv);
+	return console_open(priv, 0);
 }
 
 static int fops_close(struct cdev *dev)
diff --git a/common/serdev.c b/common/serdev.c
index 1c8cfbd59447..319a17580760 100644
--- a/common/serdev.c
+++ b/common/serdev.c
@@ -80,7 +80,7 @@ int serdev_device_open(struct serdev_device *serdev)
 	if (ret)
 		goto err_free_fifo;
 
-	ret = console_open(cdev);
+	ret = console_open(cdev, 0);
 	if (ret)
 		goto err_poller_unregister;
 
diff --git a/drivers/video/fbconsole.c b/drivers/video/fbconsole.c
index 3a2a680fc719..a86005ada244 100644
--- a/drivers/video/fbconsole.c
+++ b/drivers/video/fbconsole.c
@@ -922,7 +922,7 @@ static int setup_font(struct fbc_priv *priv)
 	return 0;
 }
 
-static int fbc_open(struct console_device *cdev)
+static int fbc_open(struct console_device *cdev, unsigned activate)
 {
 	struct fbc_priv *priv = container_of(cdev,
 					struct fbc_priv, cdev);
@@ -941,11 +941,15 @@ static int fbc_open(struct console_device *cdev)
 
 	priv->state = LIT;
 
-	dev_info(priv->cdev.dev, "framebuffer console %dx%d activated\n",
-		priv->cols, priv->rows);
-
 	priv->active = true;
 
+	if (activate)
+		dev_info(priv->cdev.dev, "framebuffer console %dx%d activated\n",
+			priv->cols, priv->rows);
+
+	if (activate & CONSOLE_STDERR)
+		log_print(&priv->cdev, 0, GENMASK(LOGLEVEL, 0));
+
 	return 0;
 }
 
diff --git a/include/console.h b/include/console.h
index cfd2480f30d3..4b2893d5c4df 100644
--- a/include/console.h
+++ b/include/console.h
@@ -41,7 +41,7 @@ struct console_device {
 	int (*setbrg)(struct console_device *cdev, int baudrate);
 	void (*flush)(struct console_device *cdev);
 	int (*set_mode)(struct console_device *cdev, enum console_mode mode);
-	int (*open)(struct console_device *cdev);
+	int (*open)(struct console_device *cdev, unsigned activate);
 	int (*close)(struct console_device *cdev);
 	int (*get_size)(struct console_device *cdev, int *width, int *height);
 
@@ -110,7 +110,7 @@ struct console_device *of_console_get_by_alias(const char *alias);
 
 #define CFG_PBSIZE (CONFIG_CBSIZE+sizeof(CONFIG_PROMPT)+16)
 
-int console_open(struct console_device *cdev);
+int console_open(struct console_device *cdev, unsigned activate);
 int console_close(struct console_device *cdev);
 int console_set_active(struct console_device *cdev, unsigned active);
 unsigned console_get_active(struct console_device *cdev);
diff --git a/net/netconsole.c b/net/netconsole.c
index 859cfe8e6f35..f2e9447526bf 100644
--- a/net/netconsole.c
+++ b/net/netconsole.c
@@ -94,7 +94,7 @@ static void nc_putc(struct console_device *cdev, char c)
 	priv->busy = 0;
 }
 
-static int nc_open(struct console_device *cdev)
+static int nc_open(struct console_device *cdev, unsigned activate)
 {
 	struct nc_priv *priv = container_of(cdev,
 					struct nc_priv, cdev);
-- 
2.47.3




  parent reply	other threads:[~2026-05-03  8:45 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-03  8:33 [PATCH 00/20] fbconsole: support TUI-relevant escape sequences Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 01/20] fbconsole: remove incomplete CSI_CNT state Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 02/20] fbconsole: improve handling of unexpected escape sequences Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 03/20] fbconsole: fix handling of CSI buffer overflow Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 04/20] fbconsole: do not reset cursor visibility alongside attributes Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 05/20] fbconsole: respect hidden cursor everywhere Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 06/20] fbconsole: call fb_blit_area for every drawchar Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 07/20] fbconsole: skip fb_flush when processing escape sequences Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 08/20] fbconsole: factor out helpers for clamped cursor row/col setting Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 09/20] fbconsole: precompute foreground/background colors Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 10/20] fbconsole: collect renderable state into struct fbc_screen_state Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 11/20] fbconsole: implement CSI A/B/C/D cursor movement sequences Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 12/20] fbconsole: restrict cursor visibility to DEC private mode 25 Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 13/20] fbconsole: add new clear_chars helper Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 14/20] fbconsole: implement erase entire line CSI Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 15/20] fbconsole: support ESC[0J and ESC[1J partial screen clear Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 16/20] fbconsole: implement DEC save/restore cursor Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 17/20] fbconsole: implement VT100 deferred wrap (last column flag) Ahmad Fatoum
2026-05-03  8:33 ` [PATCH 18/20] fbconsole: implement alternate screen buffer (ESC[?1049h/l) Ahmad Fatoum
2026-05-03  8:33 ` Ahmad Fatoum [this message]
2026-05-03  8:33 ` [PATCH 20/20] netconsole: suppress log message when opening console file Ahmad Fatoum
2026-05-07 10:38 ` [PATCH 00/20] fbconsole: support TUI-relevant escape sequences Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260503084430.2765761-20-a.fatoum@barebox.org \
    --to=a.fatoum@barebox.org \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox