From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Tony Lindgren <tony@atomide.com>
Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Jiri Slaby" <jirislaby@kernel.org>,
"Petr Mladek" <pmladek@suse.com>,
"Steven Rostedt" <rostedt@goodmis.org>,
"John Ogness" <john.ogness@linutronix.de>,
"Sergey Senozhatsky" <senozhatsky@chromium.org>,
"David S . Miller" <davem@davemloft.net>,
"Dhruva Gole" <d-gole@ti.com>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
"Johan Hovold" <johan@kernel.org>,
"Sebastian Andrzej Siewior" <bigeasy@linutronix.de>,
"Vignesh Raghavendra" <vigneshr@ti.com>,
linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org
Subject: Re: [PATCH v6 1/6] printk: Save console options for add_preferred_console_match()
Date: Tue, 13 Feb 2024 18:41:57 +0200 [thread overview]
Message-ID: <Zcub1bQrDqHE0Mkt@smile.fi.intel.com> (raw)
In-Reply-To: <20240213084545.40617-2-tony@atomide.com>
On Tue, Feb 13, 2024 at 10:45:08AM +0200, Tony Lindgren wrote:
> Driver subsystems may need to translate the preferred console name to the
> character device name used. We already do some of this in console_setup()
> with a few hardcoded names, but that does not scale well.
>
> The console options are parsed early in console_setup(), and the consoles
> are added with __add_preferred_console(). At this point we don't know much
> about the character device names and device drivers getting probed.
>
> To allow driver subsystems to set up a preferred console, let's save the
> kernel command line console options. To add a preferred console from a
> driver subsystem with optional character device name translation, let's
> add a new function add_preferred_console_match().
>
> This allows the serial core layer to support console=DEVNAME:0.0 style
> hardware based addressing in addition to the current console=ttyS0 style
> naming. And we can start moving console_setup() character device parsing
> to the driver subsystem specific code.
>
> We use a separate array from the console_cmdline array as the character
> device name and index may be unknown at the console_setup() time. And
> eventually there's no need to call __add_preferred_console() until the
> subsystem is ready to handle the console.
>
> Adding the console name in addition to the character device name, and a
> flag for an added console, could be added to the struct console_cmdline.
> And the console_cmdline array handling could be modified accordingly. But
> that complicates things compared saving the console options, and then
> adding the consoles when the subsystems handling the consoles are ready.
...
> +int __init console_opt_save(const char *str, const char *brl_opt)
> +{
> + struct console_option *con;
> + const char *opt = NULL;
> + size_t namelen, optlen;
> + int i;
> + namelen = strcspn(str, ",");
> + if (!namelen)
> + return -EINVAL;
> +
> + optlen = strlen(str) - namelen;
> + if (optlen > 1)
> + opt = str + namelen + 1;
> +
> + if (namelen >= CONSOLE_NAME_MAX || optlen >= CONSOLE_OPT_MAX)
> + return -EINVAL;
> +
> + for (i = 0; i < MAX_CMDLINECONSOLES; i++) {
> + con = &conopt[i];
> +
> + if (con->name[0]) {
> + if (!strncmp(str, con->name, namelen))
> + return 0;
> + continue;
> + }
> + strscpy(con->name, str, namelen + 1);
> + if (opt)
> + strscpy(con->opt, opt, optlen + 1);
> + /* See _braille_console_setup(), both empty and NULL are valid */
> + if (brl_opt) {
> + strscpy(con->brl_opt, brl_opt, CONSOLE_BRL_OPT_MAX);
> + con->has_brl_opt = 1;
> + }
> +
> + return 0;
> + }
> +
> + return -ENOMEM;
> +}
With fresh look at the above, can we amend it like below?
(dropped NULL assignment, optimized strlen(), split checks, dropped unneeded +1 in strscpy() calls)
int __init console_opt_save(const char *str, const char *brl_opt)
{
struct console_option *con;
size_t namelen, optlen;
const char *opt;
int i;
namelen = strcspn(str, ",");
if (namelen == 0 || namelen >= CONSOLE_NAME_MAX)
return -EINVAL;
opt = str + namelen;
if (*opt == ',')
opt++;
optlen = strlen(opt);
if (optlen >= CONSOLE_OPT_MAX)
return -EINVAL;
for (i = 0; i < MAX_CMDLINECONSOLES; i++) {
con = &conopt[i];
if (con->name[0]) {
if (!strncmp(str, con->name, namelen))
return 0;
continue;
}
strscpy(con->name, str, namelen);
strscpy(con->opt, opt, optlen); // not sure if emptying opt is okay
/* See _braille_console_setup(), both empty and NULL are valid */
if (brl_opt) {
strscpy(con->brl_opt, brl_opt, CONSOLE_BRL_OPT_MAX);
con->has_brl_opt = 1;
}
return 0;
}
return -ENOMEM;
}
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2024-02-13 16:42 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-13 8:45 [PATCH v6 0/6] Add support for DEVNAME:0.0 style hardware based addressing Tony Lindgren
2024-02-13 8:45 ` [PATCH v6 1/6] printk: Save console options for add_preferred_console_match() Tony Lindgren
2024-02-13 16:41 ` Andy Shevchenko [this message]
2024-02-14 7:59 ` Tony Lindgren
2024-02-14 8:49 ` Tony Lindgren
2024-02-14 8:51 ` Tony Lindgren
2024-02-13 8:45 ` [PATCH v6 2/6] printk: Don't try to parse DEVNAME:0.0 console options Tony Lindgren
2024-02-13 8:45 ` [PATCH v6 3/6] printk: Flag register_console() if console is set on command line Tony Lindgren
2024-02-13 8:45 ` [PATCH v6 4/6] serial: core: Add support for DEVNAME:0.0 style naming for kernel console Tony Lindgren
2024-02-13 15:53 ` Andy Shevchenko
2024-02-14 6:02 ` Tony Lindgren
2024-02-13 23:58 ` Sebastian Reichel
2024-02-14 7:08 ` Tony Lindgren
2024-02-14 9:00 ` Dan Carpenter
2024-02-14 9:03 ` Tony Lindgren
2024-02-13 8:45 ` [PATCH v6 5/6] serial: core: Handle serial console options Tony Lindgren
2024-02-13 15:56 ` Andy Shevchenko
2024-02-13 8:45 ` [PATCH v6 6/6] serial: 8250: Add preferred console in serial8250_isa_init_ports() Tony Lindgren
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=Zcub1bQrDqHE0Mkt@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=bigeasy@linutronix.de \
--cc=d-gole@ti.com \
--cc=davem@davemloft.net \
--cc=gregkh@linuxfoundation.org \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jirislaby@kernel.org \
--cc=johan@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 \
--cc=vigneshr@ti.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).