From: Tony Lindgren <tony.lindgren@linux.intel.com>
To: Petr Mladek <pmladek@suse.com>
Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Jiri Slaby" <jirislaby@kernel.org>,
"Steven Rostedt" <rostedt@goodmis.org>,
"John Ogness" <john.ogness@linutronix.de>,
"Sergey Senozhatsky" <senozhatsky@chromium.org>,
"Andy Shevchenko" <andriy.shevchenko@linux.intel.com>,
"Tony Lindgren" <tony@atomide.com>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 2/2] printk: Add update_preferred_console()
Date: Mon, 17 Jun 2024 10:20:57 +0300 [thread overview]
Message-ID: <Zm_j2eq3QcaA-g-e@tlindgre-MOBL1> (raw)
In-Reply-To: <Zmx7IPQX4FVdSe1J@pathway.suse.cz>
On Fri, Jun 14, 2024 at 07:17:20PM +0200, Petr Mladek wrote:
> On Thu 2024-06-13 15:51:08, Tony Lindgren wrote:
> > The earlier attempt on doing this caused a regression with the kernel
> > command line console order as it added calling __add_preferred_console()
> > again later on during init. A better approach was suggested by Petr where
> > we add the deferred console to the console_cmdline[] and update it later
> > on when the console is ready.
>
> The patch seems to work well. And I am surprised that it is so small ;-)
Your intuition at work :)
> > diff --git a/drivers/tty/serial/serial_base_bus.c b/drivers/tty/serial/serial_base_bus.c
> > index 5ebacb982f9e..a34f55ef6f37 100644
> > --- a/drivers/tty/serial/serial_base_bus.c
> > +++ b/drivers/tty/serial/serial_base_bus.c
> > @@ -210,7 +210,13 @@ void serial_base_port_device_remove(struct serial_port_device *port_dev)
> > static int serial_base_add_one_prefcon(const char *match, const char *dev_name,
> > int port_id)
>
> I would suggest to rename also functions on the serial_base side.
> The function is not adding prefcon. It is doing some match_and_update
> job.
OK good idea, I'll do a separate patch for that.
> > --- a/kernel/printk/printk.c
> > +++ b/kernel/printk/printk.c
> > @@ -2486,8 +2495,8 @@ __setup("console_msg_format=", console_msg_format_setup);
> > */
> > static int __init console_setup(char *str)
> > {
> > - char buf[sizeof(console_cmdline[0].name) + 4]; /* 4 for "ttyS" */
> > - char *s, *options, *brl_options = NULL;
>
> I would add
>
> static_assert(sizeof(console_cmdline[0].devname) >= sizeof(console_cmdline[0].name));
That check should still be >= sizeof(console_cmdline[0].name) + 4, right?
For the "number only" consoles we add the "ttyS" prefix.
> The name "chardev" sounds as generic as "devname". I would use one of
>
> + "name" like the parameter in __add_preferred_console
> + "ttyname" as it is mostly used for "tty*" console names
> + "conname" like a name in struct console.
>
> Also please split the variables per-line so that future diff's are
> easier to follow. Something like:
>
> static_assert(sizeof(console_cmdline[0].devname) >= sizeof(console_cmdline[0].name));
> char buf[sizeof(console_cmdline[0].devname)];
> char *brl_options = NULL;
> char *ttyname = NULL;
> char *devname = NULL;
> char *options;
> char *s;
> int idx;
OK I'll use ttyname like you're suggesting.
> > @@ -2523,12 +2538,12 @@ static int __init console_setup(char *str)
> > #endif
> >
> > for (s = buf; *s; s++)
> > - if (isdigit(*s) || *s == ',')
> > + if ((chardev && isdigit(*s)) || *s == ',')
> > break;
> > idx = simple_strtoul(s, NULL, 10);
>
> The @idx value is not really important when @devname is used.
> But it still would be more clear to set it to -1.
OK
> My proposal might be kind of naive. Some people might say that
> it describes obvious things. But the API is for device driver
> users which do not know much about how printk handles
> the console command line and the registration.
>
> <proposal>
> /**
> * match_devname_and_update_preferred_console - Update a preferred console
> * when matching devname is found.
> * @devname: DEVNAME:0.0 style device name
> * @name: Name of the corresponding console driver, e.g. "ttyS"
> * @idx: Console index, e.g. port number.
> *
> * The function checks whether a device with the given @devname is
> * preferred via the console=DEVNAME:0.0 command line option.
> * It fills the missing console driver name and console index
> * so that a later register_console() call could find (match)
> * and enable this device.
> *
> * It might be used when a driver subsystem initializes particular
> * devices with already known DEVNAME:0.0 style names. And it
> * could predict which console driver name and index this device
> * would later get associated with.
> *
> * Return: 0 on success, negative error code on failure.
> */
> </proposal>
That looks good to me.
> At least, this is my understanding of how this works.
>
> I do not know the whole history. And maybe I get something wrong.
> IMHO, the main problem is that the printk console code
> historically uses TTY device names. But we want to register/enable
> the consoles ASAP when the HW devices are ready for writing().
> It happens before the TTY subsystem gets initialized so
> that we could not use the sysfs kobjects for matching
> the tty device driver names with HW device driver names.
> And we need this kind of hacks.
Yes that's correct.
> > +int update_preferred_console(const char *devname, const char *name, const short idx)
> > +{
> > + struct console_cmdline *c = console_cmdline;
> > + int i;
> > +
> > + if (!devname || !strlen(devname) || !name || !strlen(name) || idx < 0)
> > + return -EINVAL;
> > +
> > + for (i = 0; i < MAX_CMDLINECONSOLES && (c->name[0] || c->devname[0]);
> > + i++, c++) {
> > + if (!strcmp(devname, c->devname)) {
>
> I would add here:
>
> pr_info("associate the preferred console \"%s\" with \"%s%d\"\n",
> devname, name, idx);
>
OK
Regards,
Tony
next prev parent reply other threads:[~2024-06-17 7:21 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-13 12:51 [PATCH v2 0/2] Fixes for console command line ordering Tony Lindgren
2024-06-13 12:51 ` [PATCH v2 1/2] printk: Revert add_preferred_console_match() related commits Tony Lindgren
2024-06-14 17:18 ` Petr Mladek
2024-06-13 12:51 ` [PATCH v2 2/2] printk: Add update_preferred_console() Tony Lindgren
2024-06-14 17:17 ` Petr Mladek
2024-06-17 7:20 ` Tony Lindgren [this message]
2024-06-17 8:03 ` 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=Zm_j2eq3QcaA-g-e@tlindgre-MOBL1 \
--to=tony.lindgren@linux.intel.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jirislaby@kernel.org \
--cc=john.ogness@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=pmladek@suse.com \
--cc=rostedt@goodmis.org \
--cc=senozhatsky@chromium.org \
--cc=tony@atomide.com \
/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.