* Re: [PATCH v2 1/9] printk: Rename struct console_cmdline to preferred_console [not found] ` <20260423130015.85175-2-pmladek@suse.com> @ 2026-05-08 14:22 ` John Ogness 0 siblings, 0 replies; 8+ messages in thread From: John Ogness @ 2026-05-08 14:22 UTC (permalink / raw) To: Petr Mladek Cc: Sergey Senozhatsky, Steven Rostedt, Marcos Paulo de Souza, Chris Down, linux-kernel, Petr Mladek On 2026-04-23, Petr Mladek <pmladek@suse.com> wrote: > diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c > index 0323149548f6..ca523acbf58d 100644 > --- a/kernel/printk/printk.c > +++ b/kernel/printk/printk.c > @@ -2624,8 +2624,10 @@ __setup("console_msg_format=", console_msg_format_setup); > */ > static int __init console_setup(char *str) > { > - static_assert(sizeof(console_cmdline[0].devname) >= sizeof(console_cmdline[0].name) + 4); > - char buf[sizeof(console_cmdline[0].devname)]; > + static_assert(sizeof(preferred_consoles[0].devname) >= > + sizeof(preferred_consoles[0].name) + 4); > + > + char buf[sizeof(preferred_consoles[0].devname)]; I agree with Steven's suggestion to move the static_assert() below the local variable definitions. Reviewed-by: John Ogness <john.ogness@linutronix.de> ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <20260423130015.85175-3-pmladek@suse.com>]
* Re: [PATCH v2 2/9] printk: Rename preferred_console to preferred_dev_console [not found] ` <20260423130015.85175-3-pmladek@suse.com> @ 2026-05-15 9:07 ` John Ogness 0 siblings, 0 replies; 8+ messages in thread From: John Ogness @ 2026-05-15 9:07 UTC (permalink / raw) To: Petr Mladek Cc: Sergey Senozhatsky, Steven Rostedt, Marcos Paulo de Souza, Chris Down, linux-kernel, Petr Mladek On 2026-04-23, Petr Mladek <pmladek@suse.com> wrote: > The preferred_consoles[] array stores information about consoles requested > via the command line, SPCR, Device Tree, or platform-specific code. > Within this array, the 'preferred_console' variable tracks the specific > index that should be associated with /dev/console (typically the last > non-braille console defined). > > The current name "preferred_console" is ambiguous and leads to confusion. > It does not clearly communicate why one console is "more preferred" than > others in the array. Furthermore, entries for Braille consoles can exist > within the preferred_consoles[] array, yet they are never associated with > /dev/console and do not receive standard printk() output. Consequently, > the 'preferred_console' index must skip these entries, which is not > immediately obvious from the name. > > Rename the variable to 'preferred_dev_console' to explicitly clarify its > role in identifying which entry is linked to /dev/console. > > The patch should not change the existing behavior. > > Signed-off-by: Petr Mladek <pmladek@suse.com> > Acked-by: Chris Down <chris@chrisdown.name> > Acked-by: Marcos Paulo de Souza <mpdesouza@suse.com> Reviewed-by: John Ogness <john.ogness@linutronix.de> ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <20260423130015.85175-4-pmladek@suse.com>]
* Re: [PATCH v2 3/9] printk: Separate code for adding/updating preferred console metadata [not found] ` <20260423130015.85175-4-pmladek@suse.com> @ 2026-05-05 17:47 ` Marcos Paulo de Souza 2026-05-15 10:23 ` John Ogness 1 sibling, 0 replies; 8+ messages in thread From: Marcos Paulo de Souza @ 2026-05-05 17:47 UTC (permalink / raw) To: Petr Mladek, John Ogness Cc: Sergey Senozhatsky, Steven Rostedt, Chris Down, linux-kernel On Thu, 2026-04-23 at 15:00 +0200, Petr Mladek wrote: > The logic for adding or updating a preferred console is currently > duplicated within __add_preferred_console(), making the code > difficult > to follow and prone to consistency issues. > > Introduce update_preferred_console() to centralize the initialization > and updating of struct preferred_console entries. This refactoring > explicitly defines and enforces the following rules: > > 1. Console names and/or indexes are not set when a console is > preferred > via devname; these are resolved later during device matching. > 2. Console names are only added alongside a valid index. > 3. Only matching entries are updated. > 4. Console and Braille options are never cleared. They are updated > only via the command line. > 5. The global 'preferred_dev_console' index and > 'console_set_on_cmdline' > flag are updated consistently. > > Additionally, rename braille_set_options() to > braille_update_options() > to better reflect its conditional behavior. > > Behavior change: > > The original code never updated the preferred console options > when it was preferred more times, e.g. via the command line > and/or some platform specific code, e.g. SPCR or device tree. > > The new code explicitly allows to update the console options > when they are preferred over the command line. > > It mostly worked even before but only because the command line was > processed early enough before handling SPCR, device tree, or other > platform specific init code. > > The main behavior change is when the same console is preferred more > times on the command line. Newly, the later or Braille variant > wins. It is a more common and expected behavior. Sorry for the late review. I just wanted to say that the improvement is really great: documentation and code reorganization really improve the code. It was too confusing and rather problematic to follow up. Acked-by: Marcos Paulo de Souza <mpdesouza@suse.com> > > Signed-off-by: Petr Mladek <pmladek@suse.com> > --- > kernel/printk/braille.h | 7 +- > kernel/printk/printk.c | 149 ++++++++++++++++++++++++++++++-------- > -- > 2 files changed, 118 insertions(+), 38 deletions(-) > > diff --git a/kernel/printk/braille.h b/kernel/printk/braille.h > index 55cd3178a17a..0bdac303f8b1 100644 > --- a/kernel/printk/braille.h > +++ b/kernel/printk/braille.h > @@ -5,9 +5,10 @@ > #ifdef CONFIG_A11Y_BRAILLE_CONSOLE > > static inline void > -braille_set_options(struct preferred_console *pc, char *brl_options) > +braille_update_options(struct preferred_console *pc, char > *brl_options) > { > - pc->brl_options = brl_options; > + if (brl_options) > + pc->brl_options = brl_options; > } > > /* > @@ -29,7 +30,7 @@ _braille_unregister_console(struct console > *console); > #else > > static inline void > -braille_set_options(struct preferred_console *pc, char *brl_options) > +braille_update_options(struct preferred_console *pc, char > *brl_options) > { > } > > diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c > index 13c98285892b..d251bf8e104f 100644 > --- a/kernel/printk/printk.c > +++ b/kernel/printk/printk.c > @@ -2544,18 +2544,119 @@ asmlinkage __visible void early_printk(const > char *fmt, ...) > } > #endif > > -static void set_user_specified(struct preferred_console *pc, bool > user_specified) > +/** update_preferred_console - Update a given entry in the > preferred_consoles[] > + * table. > + * @i: index of the entry in @preferred_consoles table which should > get updated. > + * @name: The name of the preferred console driver. > + * @idx: Preferred console index, e.g. port number. > + * @devname: The name of the preferred physical device. > + * @options: Options used when setting up the console driver. > + * @brl_options: Options used when setting up the console driver > + * as a braille console. > + * @user_specified: True if preferred via the kernel command line. > + * > + * The function ensures that the given values are consistent. Also > + * it updates some global variables which are used to make the right > + * decisions in register_console(). > + * > + * Rules: > + * > + * 1. Either @name and valid @idx OR @devname and @idx=-1 are > allowed. > + * Note that a valid @name and @idx will get assigned later > when > + * @devname matches during the device initialization. > + * 2. Specify @brl_options if the console should be enabled as > + * a Braille console [*] > + * 3. Only matching entries can be updated. > + * 4. @options passed via the command line are used when the same > + * console is preferred also by some platform-specific code. > + * > + * [*] Braille console is using the mechanism for registering > consoles > + * but it is very special. It is primarily used for user > interaction > + * with the system. It neither gets printk() messages nor is > associated > + * with /dev/console. > + */ > +static int update_preferred_console(unsigned int i, > + const char *name, const short > idx, > + const char *devname, char > *options, > + char *brl_options, bool > user_specified) > { > - if (!user_specified) > - return; > + struct preferred_console *pc; > + > + if (i >= MAX_PREFERRED_CONSOLES) > + return -E2BIG; > + > + pc = &preferred_consoles[i]; > + > + if (!name && !devname) > + return -EINVAL; > + > + if (devname) { > + /* > + * A valid console name and index will get assigned > when > + * a matching device gets registered. > + */ > + if (name) { > + pr_err("Adding a preferred console devname > with a hard-coded console name: %s, %s\n", > + devname, name); > + return -EINVAL; > + } > + if (pc->name[0]) { > + pr_err("Updating a preferred console entry > with an already assigned console name via devname: %s, %s\n", > + devname, pc->name); > + return -EINVAL; > + } > + if (idx != -1) { > + pr_err("Adding a preferred console devname > with a hard-coded index: %s, %d\n", > + devname, idx); > + return -EINVAL; > + } > + > + if (!pc->devname[0]) { > + strscpy(pc->devname, devname); > + pc->index = idx; > + } else if (strcmp(pc->devname, devname) != 0) { > + pr_err("Updating a preferred console with an > invalid devname: %s vs. %s\n", > + pc->devname, devname); > + return -EINVAL; > + } > + } > + > + if (name) { > + /* A console name must be defined with a valid > index. */ > + if (idx < 0) { > + pr_err("Adding a preferred console with an > invalid index: %s, %d\n", > + name, idx); > + return -EINVAL; > + } > + > + if (!pc->name[0]) { > + strscpy(pc->name, name); > + pc->index = idx; > + } else if (strcmp(pc->name, name) != 0 || pc->index > != idx) { > + pr_err("Updating a preferred console with an > invalid name or index: %s%d vs. %s%d\n", > + pc->name, pc->index, name, idx); > + return -EINVAL; > + } > + } > + > + if (!pc->options || (user_specified && options)) > + pc->options = options; > + > + braille_update_options(pc, brl_options); > + > + if (!brl_options) > + preferred_dev_console = i; > > /* > * @pc console was defined by the user on the command line. > * Do not clear when added twice also by SPCR or the device > tree. > */ > - pc->user_specified = true; > - /* At least one console defined by the user on the command > line. */ > - console_set_on_cmdline = 1; > + if (user_specified) { > + pc->user_specified = true; > + console_set_on_cmdline = 1; > + } > + > + return 0; > } > > static int __add_preferred_console(const char *name, const short > idx, > @@ -2563,19 +2664,11 @@ static int __add_preferred_console(const char > *name, const short idx, > char *brl_options, bool > user_specified) > { > struct preferred_console *pc; > - int i; > + unsigned int i; > > if (!name && !devname) > return -EINVAL; > > - /* > - * We use a signed short index for struct console for device > drivers to > - * indicate a not yet assigned index or port. However, a > negative index > - * value is not valid when the console name and index are > defined on > - * the command line. > - */ > - if (name && idx < 0) > - return -EINVAL; > > /* > * See if this tty is not yet registered, and > @@ -2584,28 +2677,14 @@ static int __add_preferred_console(const char > *name, const short idx, > for (i = 0, pc = preferred_consoles; > i < MAX_PREFERRED_CONSOLES && (pc->name[0] || pc- > >devname[0]); > i++, pc++) { > - if ((name && strcmp(pc->name, name) == 0 && pc- > >index == idx) || > - (devname && strcmp(pc->devname, devname) == 0)) > { > - if (!brl_options) > - preferred_dev_console = i; > - set_user_specified(pc, user_specified); > - return 0; > - } > + if (name && strcmp(pc->name, name) == 0 && pc->index > == idx) > + break; > + if (devname && strcmp(pc->devname, devname) == 0) > + break; > } > - if (i == MAX_PREFERRED_CONSOLES) > - return -E2BIG; > - if (!brl_options) > - preferred_dev_console = i; > - if (name) > - strscpy(pc->name, name); > - if (devname) > - strscpy(pc->devname, devname); > - pc->options = options; > - set_user_specified(pc, user_specified); > - braille_set_options(pc, brl_options); > > - pc->index = idx; > - return 0; > + return update_preferred_console(i, name, idx, devname, > options, > + brl_options, > user_specified); > } > > static int __init console_msg_format_setup(char *str) ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 3/9] printk: Separate code for adding/updating preferred console metadata [not found] ` <20260423130015.85175-4-pmladek@suse.com> 2026-05-05 17:47 ` [PATCH v2 3/9] printk: Separate code for adding/updating preferred console metadata Marcos Paulo de Souza @ 2026-05-15 10:23 ` John Ogness 2026-05-15 10:30 ` John Ogness 1 sibling, 1 reply; 8+ messages in thread From: John Ogness @ 2026-05-15 10:23 UTC (permalink / raw) To: Petr Mladek Cc: Sergey Senozhatsky, Steven Rostedt, Marcos Paulo de Souza, Chris Down, linux-kernel, Petr Mladek On 2026-04-23, Petr Mladek <pmladek@suse.com> wrote: > diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c > index 13c98285892b..d251bf8e104f 100644 > --- a/kernel/printk/printk.c > +++ b/kernel/printk/printk.c > @@ -2544,18 +2544,119 @@ asmlinkage __visible void early_printk(const char *fmt, ...) > } > #endif > > -static void set_user_specified(struct preferred_console *pc, bool user_specified) > +/** update_preferred_console - Update a given entry in the preferred_consoles[] > + * table. Perhaps the description should be: Update or add a given entry in the preferred_consoles[] table. If the caller didn't match an existing preferred_console, this function is called to add a new entry. This is obvious if you are looking at the caller, but it is not obvious at all if you are only looking at this function, i.e. strscpy'ing in @name or @devname is the only clue that you are dealing with a new entry. > + * @i: index of the entry in @preferred_consoles table which should get updated. > + * @name: The name of the preferred console driver. > + * @idx: Preferred console index, e.g. port number. > + * @devname: The name of the preferred physical device. > + * @options: Options used when setting up the console driver. > + * @brl_options: Options used when setting up the console driver > + * as a braille console. > + * @user_specified: True if preferred via the kernel command line. > + * > + * The function ensures that the given values are consistent. Also > + * it updates some global variables which are used to make the right > + * decisions in register_console(). > + * > + * Rules: > + * > + * 1. Either @name and valid @idx OR @devname and @idx=-1 are allowed. > + * Note that a valid @name and @idx will get assigned later when > + * @devname matches during the device initialization. > + * 2. Specify @brl_options if the console should be enabled as > + * a Braille console [*] > + * 3. Only matching entries can be updated. > + * 4. @options passed via the command line are used when the same > + * console is preferred also by some platform-specific code. > + * > + * [*] Braille console is using the mechanism for registering consoles > + * but it is very special. It is primarily used for user interaction > + * with the system. It neither gets printk() messages nor is associated > + * with /dev/console. > + */ > +static int update_preferred_console(unsigned int i, > + const char *name, const short idx, > + const char *devname, char *options, > + char *brl_options, bool user_specified) > { > - if (!user_specified) > - return; > + struct preferred_console *pc; > + > + if (i >= MAX_PREFERRED_CONSOLES) > + return -E2BIG; > + > + pc = &preferred_consoles[i]; > + > + if (!name && !devname) > + return -EINVAL; You are adding detailed error messages for all possible wrong calls except for this on. Maybe this should be covered as well with: if (WARN_ON(!name && !devname)) return -EINVAL; > + if (devname) { > + /* > + * A valid console name and index will get assigned when > + * a matching device gets registered. > + */ > + if (name) { > + pr_err("Adding a preferred console devname with a hard-coded console name: %s, %s\n", > + devname, name); > + return -EINVAL; > + } > + if (pc->name[0]) { > + pr_err("Updating a preferred console entry with an already assigned console name via devname: %s, %s\n", > + devname, pc->name); > + return -EINVAL; > + } > + if (idx != -1) { > + pr_err("Adding a preferred console devname with a hard-coded index: %s, %d\n", > + devname, idx); > + return -EINVAL; > + } > + > + if (!pc->devname[0]) { > + strscpy(pc->devname, devname); > + pc->index = idx; This block is about setting the devname. Setting the index here as well is copied code and well hidden. I would keep the index setting outside the devname and name blocks (as it was previously). > + } else if (strcmp(pc->devname, devname) != 0) { > + pr_err("Updating a preferred console with an invalid devname: %s vs. %s\n", > + pc->devname, devname); > + return -EINVAL; > + } > + } > + > + if (name) { > + /* A console name must be defined with a valid index. */ > + if (idx < 0) { > + pr_err("Adding a preferred console with an invalid index: %s, %d\n", > + name, idx); > + return -EINVAL; > + } > + > + if (!pc->name[0]) { > + strscpy(pc->name, name); > + pc->index = idx; Here is the copied code. This block is about setting the name. > + } else if (strcmp(pc->name, name) != 0 || pc->index != idx) { > + pr_err("Updating a preferred console with an invalid name or index: %s%d vs. %s%d\n", > + pc->name, pc->index, name, idx); > + return -EINVAL; > + } > + } I would put the index setting here as it is relevant regardless of how the devname or name was updated. pc->index = idx; With or without implementing my suggestions: Reviewed-by: John Ogness <john.ogness@linutronix.de> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 3/9] printk: Separate code for adding/updating preferred console metadata 2026-05-15 10:23 ` John Ogness @ 2026-05-15 10:30 ` John Ogness 0 siblings, 0 replies; 8+ messages in thread From: John Ogness @ 2026-05-15 10:30 UTC (permalink / raw) To: Petr Mladek Cc: Sergey Senozhatsky, Steven Rostedt, Marcos Paulo de Souza, Chris Down, linux-kernel, Petr Mladek On 2026-05-15, John Ogness <john.ogness@linutronix.de> wrote: >> + if (!pc->name[0]) { >> + strscpy(pc->name, name); >> + pc->index = idx; > > Here is the copied code. This block is about setting the name. > >> + } else if (strcmp(pc->name, name) != 0 || pc->index != idx) { >> + pr_err("Updating a preferred console with an invalid name or index: %s%d vs. %s%d\n", >> + pc->name, pc->index, name, idx); >> + return -EINVAL; >> + } >> + } > > I would put the index setting here as it is relevant regardless of how > the devname or name was updated. > > pc->index = idx; Ah, I guess you only wanted to update @index if it is a new entry (because otherwise it will already have the value of @idx). If you want to keep the index setting in the devname and name blocks, maybe just adding a comment to clarify it is a new entry: if (!pc->devname[0]) { /* This is a new entry */ strscpy(pc->devname, devname); pc->index = idx; ... if (!pc->name[0]) { /* This is a new entry */ strscpy(pc->name, name); pc->index = idx; John ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <20260423130015.85175-5-pmladek@suse.com>]
* Re: [PATCH v2 4/9] printk: Cleanup _braille_(un)register_console() wrappers [not found] ` <20260423130015.85175-5-pmladek@suse.com> @ 2026-05-15 12:51 ` John Ogness 0 siblings, 0 replies; 8+ messages in thread From: John Ogness @ 2026-05-15 12:51 UTC (permalink / raw) To: Petr Mladek Cc: Sergey Senozhatsky, Steven Rostedt, Marcos Paulo de Souza, Chris Down, linux-kernel, Petr Mladek On 2026-04-23, Sashiko wrote: >> diff --git a/drivers/accessibility/braille/braille_console.c b/drivers/accessibility/braille/braille_console.c >> index 06b43b678d6e..7b324329882f 100644 >> --- a/drivers/accessibility/braille/braille_console.c >> +++ b/drivers/accessibility/braille/braille_console.c >> @@ -360,12 +360,12 @@ int braille_register_console(struct console *console, int index, >> if (ret != 0) >> return ret; >> } >> - console->flags |= CON_ENABLED; >> + console->flags |= CON_ENABLED | CON_BRL; >> console->index = index; >> braille_co = console; >> register_keyboard_notifier(&keyboard_notifier_block); >> register_vt_notifier(&vt_notifier_block); >> - return 1; >> + return 0; >> } > > While reviewing this function, I noticed a pre-existing > regression. The printk subsystem relies on console_lock() to serialize > console setup against boot consoles that might be actively printing to > the same hardware port. For normal consoles, this synchronization is > handled explicitly: > > kernel/printk/printk.c:console_call_setup() { > ... > console_lock(); > err = newcon->setup(newcon, options); > console_unlock(); > ... > } > > However, it looks like braille_register_console() bypasses this > protection and directly invokes console->setup() just above this block > without acquiring console_lock(). > > Could this unprotected setup call cause a data race or hardware state > corruption if the underlying driver shares the hardware with an active > boot console? I do not know enough about braille consoles if they can also be early consoles, but it makes sense to synchronize the ->setup() callback. Something like this: --- a/drivers/accessibility/braille/braille_console.c +++ b/drivers/accessibility/braille/braille_console.c @@ -356,7 +356,9 @@ int braille_register_console(struct console *console, int index, if (braille_co) return -ENODEV; if (console->setup) { + console_lock(); ret = console->setup(console, console_options); + console_unlock(); if (ret != 0) return ret; } >> int braille_unregister_console(struct console *console) >> @@ -375,5 +375,6 @@ int braille_unregister_console(struct console *console) >> unregister_keyboard_notifier(&keyboard_notifier_block); >> unregister_vt_notifier(&vt_notifier_block); >> braille_co = NULL; >> - return 1; >> + console->flags &= ~(CON_ENABLED | CON_BRL); >> + return 0; >> } > > This also appears to be a pre-existing regression. The > unregister_keyboard_notifier() and unregister_vt_notifier() functions > remove callbacks from atomic notifier chains. Since atomic notifiers > execute their callbacks under RCU read lock, unregistering them only > unlinks the node without blocking for concurrent callbacks to finish. > > By immediately clearing the global braille_co pointer and returning, > could a concurrently executing keyboard_notifier_call that already > passed the braille_co check on another CPU cause a use-after-free or > null pointer dereference? > > Does this function need a synchronize_rcu() before returning to ensure > all callbacks have completed? atomic_notifier_chain_unregister() already calls synchronize_rcu() before returning, so no action is needed here. For this patch as it is: Reviewed-by: John Ogness <john.ogness@linutronix.de> (The console lock/unlock should be a separate patch.) John ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <20260423130015.85175-6-pmladek@suse.com>]
* Re: [PATCH v2 5/9] printk: Separate code for enabling console [not found] ` <20260423130015.85175-6-pmladek@suse.com> @ 2026-05-05 17:56 ` Marcos Paulo de Souza 2026-05-15 12:57 ` John Ogness 1 sibling, 0 replies; 8+ messages in thread From: Marcos Paulo de Souza @ 2026-05-05 17:56 UTC (permalink / raw) To: Petr Mladek, John Ogness Cc: Sergey Senozhatsky, Steven Rostedt, Chris Down, linux-kernel 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@suse.com> Acked-by: Marcos Paulo de Souza <mpdesouza@suse.com> > --- > 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) { ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 5/9] printk: Separate code for enabling console [not found] ` <20260423130015.85175-6-pmladek@suse.com> 2026-05-05 17:56 ` [PATCH v2 5/9] printk: Separate code for enabling console Marcos Paulo de Souza @ 2026-05-15 12:57 ` John Ogness 1 sibling, 0 replies; 8+ messages in thread From: John Ogness @ 2026-05-15 12:57 UTC (permalink / raw) To: Petr Mladek Cc: Sergey Senozhatsky, Steven Rostedt, Marcos Paulo de Souza, Chris Down, linux-kernel, Petr Mladek On 2026-04-23, Petr Mladek <pmladek@suse.com> 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@suse.com> Reviewed-by: John Ogness <john.ogness@linutronix.de> ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-05-15 12:57 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260423130015.85175-1-pmladek@suse.com>
[not found] ` <20260423130015.85175-2-pmladek@suse.com>
2026-05-08 14:22 ` [PATCH v2 1/9] printk: Rename struct console_cmdline to preferred_console John Ogness
[not found] ` <20260423130015.85175-3-pmladek@suse.com>
2026-05-15 9:07 ` [PATCH v2 2/9] printk: Rename preferred_console to preferred_dev_console John Ogness
[not found] ` <20260423130015.85175-4-pmladek@suse.com>
2026-05-05 17:47 ` [PATCH v2 3/9] printk: Separate code for adding/updating preferred console metadata Marcos Paulo de Souza
2026-05-15 10:23 ` John Ogness
2026-05-15 10:30 ` John Ogness
[not found] ` <20260423130015.85175-5-pmladek@suse.com>
2026-05-15 12:51 ` [PATCH v2 4/9] printk: Cleanup _braille_(un)register_console() wrappers John Ogness
[not found] ` <20260423130015.85175-6-pmladek@suse.com>
2026-05-05 17:56 ` [PATCH v2 5/9] printk: Separate code for enabling console Marcos Paulo de Souza
2026-05-15 12:57 ` John Ogness
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox