[PATCH v6 06/16] printk: Prefer the console either via name or devname exclusively
From: Petr Mladek
Date: Fri Nov 06 2026 - 12:23:47 EST
The commit 7640f1a44eba ("printk: Add
match_devname_and_update_preferred_console()") added the possibility
to prefer a console driver via device name. The name of the console driver
gets assigned when the device gets initialized and it tries whether
it is eligible for a console.
The above mentioned commit ensures that __add_preferred_console() is called
at least with name or devname value. But it does not check whether
both are defined which is a nonsense.
Add the check and do not fail quietly. Also shuffle the code a bit
to make it ready for adding more checks.
Signed-off-by: Petr Mladek <pmladek@xxxxxxxx>
Reviewed-by: John Ogness <john.ogness@xxxxxxxxxxxxx>
Acked-by: Chris Down <chris@xxxxxxxxxxxxxx>
---
kernel/printk/printk.c | 28 +++++++++++++++++++++++-----
1 file changed, 23 insertions(+), 5 deletions(-)
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 6bba67e142e1..d082169a8615 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -2561,6 +2561,12 @@ asmlinkage __visible void early_printk(const char *fmt, ...)
* in register_console(). Finally, it enforces some rules:
*
* 1. Do not accept empty @name or @devname.
+ *
+ * 2. Either @name OR @devname are allowed. [*]
+ *
+ * [*] A valid @name and @idx will get assigned for a devname later when
+ * @devname matches during the device initialization, see
+ * match_devname_and_update_preferred_console().
*/
static int add_or_update_preferred_console(unsigned int i,
const char *name, const short idx,
@@ -2595,11 +2601,23 @@ static int add_or_update_preferred_console(unsigned int i,
if (!pc->name[0] && !pc->devname[0])
is_new_entry = true;
- if (is_new_entry) {
- if (devname)
- strscpy(pc->devname, devname);
- if (name)
- strscpy(pc->name, name);
+ if (is_new_entry && 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;
+ }
+
+ strscpy(pc->devname, devname);
+ pc->index = idx;
+ }
+
+ if (is_new_entry && name) {
+ strscpy(pc->name, name);
pc->index = idx;
}
--
2.56.0