* [PATCH v2 1/4] drivers: serial: kgdboc: Drop checks for CON_ENABLED and CON_BOOT
2025-11-21 18:50 [PATCH v2 0/4] printk cleanup - part 2 Marcos Paulo de Souza
@ 2025-11-21 18:50 ` Marcos Paulo de Souza
2025-11-21 18:50 ` [PATCH v2 2/4] arch: um: kmsg_dump: Use console_is_usable Marcos Paulo de Souza
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Marcos Paulo de Souza @ 2025-11-21 18:50 UTC (permalink / raw)
To: Petr Mladek, Steven Rostedt, John Ogness, Sergey Senozhatsky,
Greg Kroah-Hartman, Jiri Slaby, Jason Wessel, Daniel Thompson,
Douglas Anderson, Richard Weinberger, Anton Ivanov, Johannes Berg
Cc: linux-kernel, linux-serial, kgdb-bugreport, linux-um,
Marcos Paulo de Souza
The original code tried to find a console that has CON_BOOT _or_
CON_ENABLED flag set. The flag CON_ENABLED is set to all registered
consoles, so in this case this check is always true, even for the
CON_BOOT consoles.
The initial intent of the kgdboc_earlycon_init was to get a console
early (CON_BOOT) or later on in the process (CON_ENABLED). The
code was using for_each_console macro, meaning that all console structs
were previously registered on the printk() machinery. At this point,
any console found on for_each_console is safe for kgdboc_earlycon_init
to use.
Dropping the check makes the code cleaner, and avoids further confusion
by future readers of the code.
Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com>
---
drivers/tty/serial/kgdboc.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c
index 85f6c5a76e0f..5a955c80a853 100644
--- a/drivers/tty/serial/kgdboc.c
+++ b/drivers/tty/serial/kgdboc.c
@@ -577,7 +577,6 @@ static int __init kgdboc_earlycon_init(char *opt)
console_list_lock();
for_each_console(con) {
if (con->write && con->read &&
- (con->flags & (CON_BOOT | CON_ENABLED)) &&
(!opt || !opt[0] || strcmp(con->name, opt) == 0))
break;
}
--
2.51.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH v2 2/4] arch: um: kmsg_dump: Use console_is_usable
2025-11-21 18:50 [PATCH v2 0/4] printk cleanup - part 2 Marcos Paulo de Souza
2025-11-21 18:50 ` [PATCH v2 1/4] drivers: serial: kgdboc: Drop checks for CON_ENABLED and CON_BOOT Marcos Paulo de Souza
@ 2025-11-21 18:50 ` Marcos Paulo de Souza
2025-11-21 18:50 ` [PATCH v2 3/4] printk: Use console_is_usable on console_unblank Marcos Paulo de Souza
2025-11-21 18:50 ` [PATCH v2 4/4] printk: Make console_{suspend,resume} handle CON_SUSPENDED Marcos Paulo de Souza
3 siblings, 0 replies; 5+ messages in thread
From: Marcos Paulo de Souza @ 2025-11-21 18:50 UTC (permalink / raw)
To: Petr Mladek, Steven Rostedt, John Ogness, Sergey Senozhatsky,
Greg Kroah-Hartman, Jiri Slaby, Jason Wessel, Daniel Thompson,
Douglas Anderson, Richard Weinberger, Anton Ivanov, Johannes Berg
Cc: linux-kernel, linux-serial, kgdb-bugreport, linux-um,
Marcos Paulo de Souza
All consoles found on for_each_console are registered, meaning that all
of them have the CON_ENABLED flag set. Since NBCON was introduced it's
important to check if a given console also implements the NBCON callbacks.
The function console_is_usable does exactly that.
Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com>
---
arch/um/kernel/kmsg_dump.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/um/kernel/kmsg_dump.c b/arch/um/kernel/kmsg_dump.c
index 419021175272..fc0f543d1d8e 100644
--- a/arch/um/kernel/kmsg_dump.c
+++ b/arch/um/kernel/kmsg_dump.c
@@ -31,7 +31,7 @@ static void kmsg_dumper_stdout(struct kmsg_dumper *dumper,
* expected to output the crash information.
*/
if (strcmp(con->name, "ttynull") != 0 &&
- (console_srcu_read_flags(con) & CON_ENABLED)) {
+ console_is_usable(con, console_srcu_read_flags(con), true)) {
break;
}
}
--
2.51.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH v2 3/4] printk: Use console_is_usable on console_unblank
2025-11-21 18:50 [PATCH v2 0/4] printk cleanup - part 2 Marcos Paulo de Souza
2025-11-21 18:50 ` [PATCH v2 1/4] drivers: serial: kgdboc: Drop checks for CON_ENABLED and CON_BOOT Marcos Paulo de Souza
2025-11-21 18:50 ` [PATCH v2 2/4] arch: um: kmsg_dump: Use console_is_usable Marcos Paulo de Souza
@ 2025-11-21 18:50 ` Marcos Paulo de Souza
2025-11-21 18:50 ` [PATCH v2 4/4] printk: Make console_{suspend,resume} handle CON_SUSPENDED Marcos Paulo de Souza
3 siblings, 0 replies; 5+ messages in thread
From: Marcos Paulo de Souza @ 2025-11-21 18:50 UTC (permalink / raw)
To: Petr Mladek, Steven Rostedt, John Ogness, Sergey Senozhatsky,
Greg Kroah-Hartman, Jiri Slaby, Jason Wessel, Daniel Thompson,
Douglas Anderson, Richard Weinberger, Anton Ivanov, Johannes Berg
Cc: linux-kernel, linux-serial, kgdb-bugreport, linux-um,
Marcos Paulo de Souza
The macro for_each_console_srcu iterates over all registered consoles. It's
implied that all registered consoles have CON_ENABLED flag set, making
the check for the flag unnecessary. Call console_is_usable function to
fully verify if the given console is usable before calling the ->unblank
callback.
Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com>
---
kernel/printk/printk.c | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index cb79d1d2e6e5..fed98a18e830 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -3374,12 +3374,10 @@ void console_unblank(void)
*/
cookie = console_srcu_read_lock();
for_each_console_srcu(c) {
- short flags = console_srcu_read_flags(c);
-
- if (flags & CON_SUSPENDED)
+ if (!console_is_usable(c, console_srcu_read_flags(c), true))
continue;
- if ((flags & CON_ENABLED) && c->unblank) {
+ if (c->unblank) {
found_unblank = true;
break;
}
@@ -3416,12 +3414,10 @@ void console_unblank(void)
cookie = console_srcu_read_lock();
for_each_console_srcu(c) {
- short flags = console_srcu_read_flags(c);
-
- if (flags & CON_SUSPENDED)
+ if (!console_is_usable(c, console_srcu_read_flags(c), true))
continue;
- if ((flags & CON_ENABLED) && c->unblank)
+ if (c->unblank)
c->unblank();
}
console_srcu_read_unlock(cookie);
--
2.51.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH v2 4/4] printk: Make console_{suspend,resume} handle CON_SUSPENDED
2025-11-21 18:50 [PATCH v2 0/4] printk cleanup - part 2 Marcos Paulo de Souza
` (2 preceding siblings ...)
2025-11-21 18:50 ` [PATCH v2 3/4] printk: Use console_is_usable on console_unblank Marcos Paulo de Souza
@ 2025-11-21 18:50 ` Marcos Paulo de Souza
3 siblings, 0 replies; 5+ messages in thread
From: Marcos Paulo de Souza @ 2025-11-21 18:50 UTC (permalink / raw)
To: Petr Mladek, Steven Rostedt, John Ogness, Sergey Senozhatsky,
Greg Kroah-Hartman, Jiri Slaby, Jason Wessel, Daniel Thompson,
Douglas Anderson, Richard Weinberger, Anton Ivanov, Johannes Berg
Cc: linux-kernel, linux-serial, kgdb-bugreport, linux-um,
Marcos Paulo de Souza
Since commit 9e70a5e109a4 ("printk: Add per-console suspended state")
the CON_SUSPENDED flag was introced, and this flag was being checked
on console_is_usable function, which returns false if the console is
suspended.
To make the behavior consistent, change show_cons_active to look for
consoles that are not suspended, instead of checking CON_ENABLED.
Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com>
---
drivers/tty/tty_io.c | 2 +-
kernel/printk/printk.c | 5 +++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index e2d92cf70eb7..1b2ce0f36010 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -3554,7 +3554,7 @@ static ssize_t show_cons_active(struct device *dev,
continue;
if (!(c->flags & CON_NBCON) && !c->write)
continue;
- if ((c->flags & CON_ENABLED) == 0)
+ if (c->flags & CON_SUSPENDED)
continue;
cs[i++] = c;
if (i >= ARRAY_SIZE(cs))
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index fed98a18e830..fe7c956f73bd 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -3542,7 +3542,7 @@ void console_suspend(struct console *console)
{
__pr_flush(console, 1000, true);
console_list_lock();
- console_srcu_write_flags(console, console->flags & ~CON_ENABLED);
+ console_srcu_write_flags(console, console->flags | CON_SUSPENDED);
console_list_unlock();
/*
@@ -3555,13 +3555,14 @@ void console_suspend(struct console *console)
}
EXPORT_SYMBOL(console_suspend);
+/* Unset CON_SUSPENDED flag so the console can start printing again. */
void console_resume(struct console *console)
{
struct console_flush_type ft;
bool is_nbcon;
console_list_lock();
- console_srcu_write_flags(console, console->flags | CON_ENABLED);
+ console_srcu_write_flags(console, console->flags & ~CON_SUSPENDED);
is_nbcon = console->flags & CON_NBCON;
console_list_unlock();
--
2.51.1
^ permalink raw reply related [flat|nested] 5+ messages in thread