Re: [PATCH 5/8] printk: Try to register each console as Braille first

From: Petr Mladek

Date: Thu Feb 19 2026 - 11:59:24 EST


On Thu 2026-02-19 22:59:38, Chris Down wrote:
> Petr Mladek writes:
> > @@ -3918,6 +3922,12 @@ static int try_enable_preferred_console(struct console *newcon,
> > newcon->match(newcon, pc->name, pc->index, pc->options) != 0) {
> > /* default matching */
> > BUILD_BUG_ON(sizeof(pc->name) != sizeof(newcon->name));
> > + /*
> > + * Two entries might have the same pc->name when one was
> > + * defined via "devname".
> > + */
> > + if (try_only_braille && !is_braille_console_preferred(pc))
> > + continue;
> > if (strcmp(pc->name, newcon->name) != 0)
> > continue;
> > if (newcon->index >= 0 &&
> > @@ -3926,7 +3936,7 @@ static int try_enable_preferred_console(struct console *newcon,
> > if (newcon->index < 0)
> > newcon->index = pc->index;
> >
> > - if (is_braille_console_preferred(pc))
> > + if (try_only_braille)
> > return _braille_register_console(newcon, pc);
> >
> > err = console_call_setup(newcon, pc->options);
>
> This doesn't look right to me. By putting the Braille dispatch inside the if
> block, you bypass it whenever newcon->match matches.
>
> So that means if a console driver matches, the execution skips this default
> matching block completely, falls through, and silently sets CON_ENABLED
> without ever registering it as a Braille console or adding it to
> console_list, and the console is silently lost.
>
> The try_only_braille and is_braille_console_preferred(pc) checks likely need
> to happen before or independently of the match() vs. default matching
> branch.

This should never happen because register_console() always tries to
register Braille consoles first.

This patch adds the following hunk into register_console():

@@ -4173,6 +4194,20 @@ void register_console(struct console *newcon)
goto unlock;
}

+ /*
+ * 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.
+ */
+ if (want_braille_console) {
+ err = try_enable_braille_console(newcon);
+ /* Return on success or when con->setup failed. */
+ if (err != -ENOENT)
+ goto unlock_free;
+ }
+
/*
* See if we want to enable this console driver by default.
*

I am going to add a comment into try_enable_preferred_console() about
this.

Best Regards,
Petr