Re: [PATCH v2 5/9] printk: Separate code for enabling console

From: Marcos Paulo de Souza

Date: Tue May 05 2026 - 14:01:18 EST


On Thu, 2026-04-23 at 15:00 +0200, Petr Mladek wrote:
> There are several code paths which try to enable a newly registered
> console. Move the logic into a separate try_enable_console()
> function.
>
> It simplifies a bit the long register_console() function definition.
>
> Also followup patches are going to add even more code paths. And it
> will
> be easier to use "return" when it does not make sense to try other
> variants.
>
> The patch does not change the existing behavior.
>
> Signed-off-by: Petr Mladek <pmladek@xxxxxxxx>

Acked-by: Marcos Paulo de Souza <mpdesouza@xxxxxxxx>

> ---
>  kernel/printk/printk.c | 64 ++++++++++++++++++++++++----------------
> --
>  1 file changed, 36 insertions(+), 28 deletions(-)
>
> diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
> index 7a3bbb0cb794..2543c810efcb 100644
> --- a/kernel/printk/printk.c
> +++ b/kernel/printk/printk.c
> @@ -4040,6 +4040,41 @@ static void try_enable_default_console(struct
> console *newcon)
>   newcon->flags |= CON_CONSDEV;
>  }
>  
> +#define console_first() \
> + hlist_entry(console_list.first, struct console, node)
> +
> +static int try_enable_console(struct console *newcon)
> +{
> + int err;
> +
> + /*
> + * 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 (preferred_dev_console < 0) {
> + if (hlist_empty(&console_list) || !console_first()-
> >device ||
> +     console_first()->flags & CON_BOOT) {
> + try_enable_default_console(newcon);
> + }
> + }
> +
> + /* 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) */
> + return try_enable_preferred_console(newcon, false);
> +}
> +
>  /* Return the starting sequence number for a newly registered
> console. */
>  static u64 get_init_console_seq(struct console *newcon, bool
> bootcon_registered)
>  {
> @@ -4114,9 +4149,6 @@ static u64 get_init_console_seq(struct console
> *newcon, bool bootcon_registered)
>   return init_seq;
>  }
>  
> -#define console_first() \
> - hlist_entry(console_list.first, struct console, node)
> -
>  static int unregister_console_locked(struct console *console);
>  
>  /*
> @@ -4178,31 +4210,7 @@ void register_console(struct console *newcon)
>   goto unlock;
>   }
>  
> - /*
> - * 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 (preferred_dev_console < 0) {
> - if (hlist_empty(&console_list) || !console_first()-
> >device ||
> -     console_first()->flags & CON_BOOT) {
> - try_enable_default_console(newcon);
> - }
> - }
> -
> - /* See if this console matches one we selected on the
> command line */
> - err = try_enable_preferred_console(newcon, true);
> -
> - /* If not, try to match against the platform default(s) */
> - if (err == -ENOENT)
> - err = try_enable_preferred_console(newcon, false);
> + err = try_enable_console(newcon);
>  
>   /* printk() messages are not printed to the Braille console.
> */
>   if (err || newcon->flags & CON_BRL) {