From: Petr Mladek <pmladek@suse.com>
To: John Ogness <john.ogness@linutronix.de>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>,
Steven Rostedt <rostedt@goodmis.org>,
Marcos Paulo de Souza <mpdesouza@suse.com>,
Chris Down <chris@chrisdown.name>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 9/9] printk: Try enable preferred consoles only when there are any
Date: Fri, 29 May 2026 17:22:42 +0200 [thread overview]
Message-ID: <ahmvQvDdzop0IOpn@pathway> (raw)
In-Reply-To: <20260423130015.85175-10-pmladek@suse.com>
On Thu 2026-04-23 15:00:14, Petr Mladek wrote:
> try_enable_preferred_console() used to be always called because it
> had several hidden effects, namely:
>
> - enabled Braille consoles which were ignored by "preferred_dev_console"
> because they were not associated with /dev/console.
>
> - returned success when a console was pre-enabled using CON_ENABLED
> flag.
>
> - returned success when a console was enabled by default because
> try_enable_default_console() did not return success.
>
> The first two hidden effects were removed in previous patches. Remove
> the last one so that try_enable_preferred_console() can be called only
> when any non-Braille console is preferred.
>
> --- a/kernel/printk/printk.c
> +++ b/kernel/printk/printk.c
> @@ -4055,18 +4055,23 @@ static int try_enable_braille_console(struct console *newcon)
> }
>
> /* Try to enable the console unconditionally */
> -static void try_enable_default_console(struct console *newcon)
> +static int try_enable_default_console(struct console *newcon)
> {
> + int err;
> +
> if (newcon->index < 0)
> newcon->index = 0;
>
> - if (console_call_setup(newcon, NULL) != 0)
> - return;
> + err = console_call_setup(newcon, NULL);
> + if (err)
> + return err;
>
> newcon->flags |= CON_ENABLED;
>
> if (newcon->device)
> newcon->flags |= CON_CONSDEV;
> +
> + return 0;
> }
>
> #define console_first() \
> @@ -4109,7 +4114,9 @@ static int try_enable_console(struct console *newcon)
> if (preferred_dev_console < 0) {
> if (hlist_empty(&console_list) || !console_first()->device ||
> console_first()->flags & CON_BOOT) {
> - try_enable_default_console(newcon);
> + err = try_enable_default_console(newcon);
> + if (err != -ENOENT)
> + return err;
> }
> }
I am working on v3 and I realized that this is not enough.
try_enable_preferred_console() is still called when
there already was default console (the if-condition above failed).
But it makes sense only when preferred_dev_console >= 0.
I am going to go further and put it into "else" part.
I'll actually invert the check and do:
static int try_enable_console(struct console *newcon)
{
int err;
/*
* First, try to enable the console driver as a Braille console.
* It would have metadata in the preferred_consoles[] array.
* But it won't be counted as @preferred_console because
* it does not get printk() messages and is not associated
* with /dev/console.
*
* Note that it might succeed also when the driver has a match()
* callback and it took over a boot console. In this case,
* the driver will continue working as a classic non-Braille
* console.
*/
if (want_braille_console) {
err = try_enable_braille_console(newcon);
if (err != -ENOENT)
return err;
}
if (preferred_dev_console >= 0) {
/* See if this console matches one we selected on the command line */
err = try_enable_preferred_console(newcon, true);
if (err != -ENOENT)
return err;
/* If not, try to match against the platform default(s) */
err = try_enable_preferred_console(newcon, false);
if (err != -ENOENT)
return err;
} else {
/*
* See if we want to enable this console driver by default.
*
* Nope when a console is preferred by the command line, device
* tree, or SPCR.
*
* The first real console with tty binding (driver) wins. More
* consoles might get enabled before the right one is found.
*
* Note that a console with tty binding will have CON_CONSDEV
* flag set and will be first in the list.
*/
if (hlist_empty(&console_list) || !console_first()->device ||
console_first()->flags & CON_BOOT) {
err = try_enable_default_console(newcon);
if (err != -ENOENT)
return err;
}
}
/*
* Some consoles, such as pstore and netconsole, can be enabled even
* without matching. Accept them at this stage when they had a chance
* to match() and call setup().
*/
if (newcon->flags & CON_ENABLED)
err = 0;
return err;
}
I am going to split this into two patches:
1. Invert the logic and add the "else" part. This should
not change the behavior at this stage.
2. Add the return value for try_enabled_default_console()
and return immediately on success or error. It might
actually change the behavior because pre-enabled
console won't be registered when newcon->setup()
failed.
Best Regards,
Petr
next prev parent reply other threads:[~2026-05-29 15:22 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-23 13:00 [PATCH v2 0/9] printk: Clean up preferred console handling Petr Mladek
2026-04-23 13:00 ` [PATCH v2 1/9] printk: Rename struct console_cmdline to preferred_console Petr Mladek
2026-04-23 14:16 ` Steven Rostedt
2026-05-08 14:22 ` John Ogness
2026-04-23 13:00 ` [PATCH v2 2/9] printk: Rename preferred_console to preferred_dev_console Petr Mladek
2026-05-15 9:07 ` John Ogness
2026-04-23 13:00 ` [PATCH v2 3/9] printk: Separate code for adding/updating preferred console metadata Petr Mladek
2026-05-05 17:47 ` Marcos Paulo de Souza
2026-05-15 10:23 ` John Ogness
2026-05-15 10:30 ` John Ogness
2026-05-29 10:06 ` Petr Mladek
2026-05-29 10:05 ` Petr Mladek
2026-04-23 13:00 ` [PATCH v2 4/9] printk: Cleanup _braille_(un)register_console() wrappers Petr Mladek
2026-05-15 12:51 ` John Ogness
2026-04-23 13:00 ` [PATCH v2 5/9] printk: Separate code for enabling console Petr Mladek
2026-05-05 17:56 ` Marcos Paulo de Souza
2026-05-15 12:57 ` John Ogness
2026-04-23 13:00 ` [PATCH v2 6/9] printk: Try to register each console as Braille first Petr Mladek
2026-04-23 13:00 ` [PATCH v2 7/9] printk: Do not set Braille console as preferred_console Petr Mladek
2026-04-23 13:00 ` [PATCH v2 8/9] printk: Handle pre-enabled consoles in the top-level try_enable_console() Petr Mladek
2026-04-23 13:00 ` [PATCH v2 9/9] printk: Try enable preferred consoles only when there are any Petr Mladek
2026-05-29 15:22 ` Petr Mladek [this message]
2026-04-24 8:20 ` [PATCH v2 0/9] printk: Clean up preferred console handling Petr Mladek
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=ahmvQvDdzop0IOpn@pathway \
--to=pmladek@suse.com \
--cc=chris@chrisdown.name \
--cc=john.ogness@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mpdesouza@suse.com \
--cc=rostedt@goodmis.org \
--cc=senozhatsky@chromium.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.