* [PATCH v6 0/3] Optionally allow ttynull to be selected as a default console
@ 2025-03-04 3:54 adamsimonelli
2025-03-04 3:54 ` [PATCH v6 1/3] ttynull: Always initialize console index to -1 adamsimonelli
` (2 more replies)
0 siblings, 3 replies; 14+ messages in thread
From: adamsimonelli @ 2025-03-04 3:54 UTC (permalink / raw)
To: linux-serial, linux-kernel, Jiri Slaby, Greg Kroah-Hartman,
Andy Shevchenko, Steven Rostedt, John Ogness, Sergey Senozhatsky,
Petr Mladek
Cc: Adam Simonelli
From: Adam Simonelli <adamsimonelli@gmail.com>
When switching to a CONFIG_VT=n world, at least on x86 systems,
/dev/console becomes /dev/ttyS0. This can cause some undesired effects.
/dev/console's behavior is now tied to the physical /dev/ttyS0, which when
disconnected can cause isatty() to fail when /dev/ttyS0 is disconnected,
and users who upgrade to a theoretical vt-less kernel from their
distribution who have a device such as a science instrument connected to
their /dev/ttyS0 port will suddenly see it receive kernel log messages.
When the new CONFIG_NULL_TTY_DEFAULT_CONSOLE option is turned on, this will
allow the ttynull device to be leveraged as the default console. Distributions
that had CONFIG_VT turned on before will be able to leverage this option
to where /dev/console is still backed by a psuedo device, avoiding these
issues, without needing to enable the entire VT subsystem.
v2:
rebase
v3:
Clarify commit messages.
Guard the all the register_console()s in ttynull to prevent it from being
registered twice.
Only change the link order if CONFIG_NULL_TTY_CONSOLE is enabled, otherwise
use the existing order for ttynull if only CONFIG_NULL_TTY is enabled.
Document why the link order changes in the drivers/tty/Makefile file.
Replace #ifdefs
v4:
Remember to actually include the changes to v3 in the cover letter.
v5:
Correct code formatting in Makefile comment.
v6:
Change to CONFIG_NULL_TTY_DEFAULT_CONSOLE
Set the index to -1, and don't set the flags
Use add_preferred_console() instead of register_console() in ttynull's
console_initcall when CONFIG_NULL_TTY_DEFAULT_CONSOLE is enabled
Adam Simonelli (3):
ttynull: Always initialize console index to -1
ttynull: Add an option to allow ttynull to be used as a console device
tty: Change order of ttynull to be linked sooner if enabled as a
console.
drivers/tty/Kconfig | 15 ++++++++++++++-
drivers/tty/Makefile | 11 +++++++++++
drivers/tty/ttynull.c | 12 ++++++++++++
3 files changed, 37 insertions(+), 1 deletion(-)
--
2.45.2
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v6 1/3] ttynull: Always initialize console index to -1
2025-03-04 3:54 [PATCH v6 0/3] Optionally allow ttynull to be selected as a default console adamsimonelli
@ 2025-03-04 3:54 ` adamsimonelli
2025-03-04 6:01 ` Andy Shevchenko
2025-03-04 3:54 ` [PATCH v6 2/3] ttynull: Add an option to allow ttynull to be used as a console device adamsimonelli
2025-03-04 3:54 ` [PATCH v6 3/3] tty: Change order of ttynull to be linked sooner if enabled as a console adamsimonelli
2 siblings, 1 reply; 14+ messages in thread
From: adamsimonelli @ 2025-03-04 3:54 UTC (permalink / raw)
To: linux-serial, linux-kernel, Jiri Slaby, Greg Kroah-Hartman,
Andy Shevchenko, Steven Rostedt, John Ogness, Sergey Senozhatsky,
Petr Mladek
Cc: Adam Simonelli
From: Adam Simonelli <adamsimonelli@gmail.com>
Signed-off-by: Adam Simonelli <adamsimonelli@gmail.com>
---
drivers/tty/ttynull.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/tty/ttynull.c b/drivers/tty/ttynull.c
index 6b2f7208b564..d8b51edde628 100644
--- a/drivers/tty/ttynull.c
+++ b/drivers/tty/ttynull.c
@@ -57,6 +57,7 @@ static struct tty_driver *ttynull_device(struct console *c, int *index)
static struct console ttynull_console = {
.name = "ttynull",
.device = ttynull_device,
+ .index = -1,
};
static int __init ttynull_init(void)
--
2.45.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v6 2/3] ttynull: Add an option to allow ttynull to be used as a console device
2025-03-04 3:54 [PATCH v6 0/3] Optionally allow ttynull to be selected as a default console adamsimonelli
2025-03-04 3:54 ` [PATCH v6 1/3] ttynull: Always initialize console index to -1 adamsimonelli
@ 2025-03-04 3:54 ` adamsimonelli
2025-03-04 6:07 ` Andy Shevchenko
2025-03-04 3:54 ` [PATCH v6 3/3] tty: Change order of ttynull to be linked sooner if enabled as a console adamsimonelli
2 siblings, 1 reply; 14+ messages in thread
From: adamsimonelli @ 2025-03-04 3:54 UTC (permalink / raw)
To: linux-serial, linux-kernel, Jiri Slaby, Greg Kroah-Hartman,
Andy Shevchenko, Steven Rostedt, John Ogness, Sergey Senozhatsky,
Petr Mladek
Cc: Adam Simonelli
From: Adam Simonelli <adamsimonelli@gmail.com>
The new config option, CONFIG_NULL_TTY_DEFAULT_ CONSOLE will allow
ttynull to be initialized by console_initcall() and selected as a
possible console device.
Signed-off-by: Adam Simonelli <adamsimonelli@gmail.com>
---
drivers/tty/Kconfig | 15 ++++++++++++++-
drivers/tty/ttynull.c | 11 +++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/drivers/tty/Kconfig b/drivers/tty/Kconfig
index 63a494d36a1f..868aec2ccbb3 100644
--- a/drivers/tty/Kconfig
+++ b/drivers/tty/Kconfig
@@ -383,7 +383,20 @@ config NULL_TTY
available or desired.
In order to use this driver, you should redirect the console to this
- TTY, or boot the kernel with console=ttynull.
+ TTY, boot the kernel with console=ttynull, or enable
+ CONFIG_NULL_TTY_DEFAULT_CONSOLE.
+
+ If unsure, say N.
+
+config NULL_TTY_DEFAULT_CONSOLE
+ bool "Support for console on ttynull"
+ depends on NULL_TTY=y && !VT_CONSOLE
+ help
+ Say Y here if you want the NULL TTY to be used as a /dev/console
+ device.
+
+ This is similar to CONFIG_VT_CONSOLE, but without the dependency on
+ CONFIG_VT. It uses the ttynull driver as the system console.
If unsure, say N.
diff --git a/drivers/tty/ttynull.c b/drivers/tty/ttynull.c
index d8b51edde628..cb1e363b726d 100644
--- a/drivers/tty/ttynull.c
+++ b/drivers/tty/ttynull.c
@@ -96,6 +96,17 @@ static int __init ttynull_init(void)
return 0;
}
+#ifdef CONFIG_NULL_TTY_DEFAULT_CONSOLE
+static int __init ttynull_register(void)
+{
+ if (!console_set_on_cmdline)
+ add_preferred_console("ttynull", 0, NULL);;
+
+ return 0;
+}
+console_initcall(ttynull_register);
+#endif
+
static void __exit ttynull_exit(void)
{
unregister_console(&ttynull_console);
--
2.45.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v6 3/3] tty: Change order of ttynull to be linked sooner if enabled as a console.
2025-03-04 3:54 [PATCH v6 0/3] Optionally allow ttynull to be selected as a default console adamsimonelli
2025-03-04 3:54 ` [PATCH v6 1/3] ttynull: Always initialize console index to -1 adamsimonelli
2025-03-04 3:54 ` [PATCH v6 2/3] ttynull: Add an option to allow ttynull to be used as a console device adamsimonelli
@ 2025-03-04 3:54 ` adamsimonelli
2025-03-04 6:51 ` Andy Shevchenko
2 siblings, 1 reply; 14+ messages in thread
From: adamsimonelli @ 2025-03-04 3:54 UTC (permalink / raw)
To: linux-serial, linux-kernel, Jiri Slaby, Greg Kroah-Hartman,
Andy Shevchenko, Steven Rostedt, John Ogness, Sergey Senozhatsky,
Petr Mladek
Cc: Adam Simonelli
From: Adam Simonelli <adamsimonelli@gmail.com>
If CONFIG_NULL_TTY_DEFAULT_CONSOLE is enabled, and CONFIG_VT is disabled,
ttynull will become the default primary console device, based on the link
order.
Many distributions ship with CONFIG_VT enabled. On tested desktop hardware
if CONFIG_VT is disabled, the default console device falls back to
/dev/ttyS0 instead of /dev/tty.
This could cause issues in user space, and hardware problems:
1. The user space issues include the case where /dev/ttyS0 is
disconnected, and the TCGETS ioctl, which some user space libraries use
as a probe to determine if a file is a tty, is called on /dev/console and
fails. Programs that call isatty() on /dev/console and get an incorrect
false value may skip expected logging to /dev/console
2. The hardware issues include the case if a user has a science instrument
or other device connected to the /dev/ttyS0 port, and they were to upgrade
to a kernel that is disabling the CONFIG_VT option, kernel logs will then be
sent to the device connected to /dev/ttyS0 unless they edit their kernel
command line manually.
The new CONFIG_NULL_TTY_CONSOLE option will give users and distribution
maintainers an option to avoid this. Disabling CONFIG_VT and enabling
CONFIG_NULL_TTY_CONSOLE will ensure the default kernel console behavior
is not dependant on hardware configuration by default, and avoid
unexpected new behavior on devices connected to the /dev/ttyS0 serial
port.
Signed-off-by: Adam Simonelli <adamsimonelli@gmail.com>
---
drivers/tty/Makefile | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/tty/Makefile b/drivers/tty/Makefile
index 07aca5184a55..a4caf32a2014 100644
--- a/drivers/tty/Makefile
+++ b/drivers/tty/Makefile
@@ -11,6 +11,11 @@ obj-$(CONFIG_N_HDLC) += n_hdlc.o
obj-$(CONFIG_N_GSM) += n_gsm.o
obj-y += vt/
+# If ttynull is configured to be a console by default, ensure that it is linked
+# earlier before a real one is selected.
+obj-$(CONFIG_NULL_TTY_DEFAULT_CONSOLE) \
+ += ttynull.o
+
obj-$(CONFIG_HVC_DRIVER) += hvc/
obj-y += serial/
obj-$(CONFIG_SERIAL_DEV_BUS) += serdev/
@@ -20,7 +25,13 @@ obj-$(CONFIG_AMIGA_BUILTIN_SERIAL) += amiserial.o
obj-$(CONFIG_MOXA_INTELLIO) += moxa.o
obj-$(CONFIG_MOXA_SMARTIO) += mxser.o
obj-$(CONFIG_NOZOMI) += nozomi.o
+
+# If ttynull is enabled, but not as a boot console, it is linked and used later
+# after the real ones.
+ifneq ($(CONFIG_NULL_TTY_DEFAULT_CONSOLE),y)
obj-$(CONFIG_NULL_TTY) += ttynull.o
+endif
+
obj-$(CONFIG_SYNCLINK_GT) += synclink_gt.o
obj-$(CONFIG_PPC_EPAPR_HV_BYTECHAN) += ehv_bytechan.o
obj-$(CONFIG_GOLDFISH_TTY) += goldfish.o
--
2.45.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v6 1/3] ttynull: Always initialize console index to -1
2025-03-04 3:54 ` [PATCH v6 1/3] ttynull: Always initialize console index to -1 adamsimonelli
@ 2025-03-04 6:01 ` Andy Shevchenko
2025-03-04 8:53 ` John Ogness
0 siblings, 1 reply; 14+ messages in thread
From: Andy Shevchenko @ 2025-03-04 6:01 UTC (permalink / raw)
To: adamsimonelli
Cc: linux-serial, linux-kernel, Jiri Slaby, Greg Kroah-Hartman,
Steven Rostedt, John Ogness, Sergey Senozhatsky, Petr Mladek
On Tue, Mar 4, 2025 at 5:55 AM <adamsimonelli@gmail.com> wrote:
>
> From: Adam Simonelli <adamsimonelli@gmail.com>
In general we do not accept empty commit messages (yes, it was done in
the past and in some exceptional cases, but should be taken as a very
bad practice).
Should it also have Suggested-by: ?
> Signed-off-by: Adam Simonelli <adamsimonelli@gmail.com>
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 2/3] ttynull: Add an option to allow ttynull to be used as a console device
2025-03-04 3:54 ` [PATCH v6 2/3] ttynull: Add an option to allow ttynull to be used as a console device adamsimonelli
@ 2025-03-04 6:07 ` Andy Shevchenko
0 siblings, 0 replies; 14+ messages in thread
From: Andy Shevchenko @ 2025-03-04 6:07 UTC (permalink / raw)
To: adamsimonelli
Cc: linux-serial, linux-kernel, Jiri Slaby, Greg Kroah-Hartman,
Steven Rostedt, John Ogness, Sergey Senozhatsky, Petr Mladek
On Tue, Mar 4, 2025 at 5:55 AM <adamsimonelli@gmail.com> wrote:
>
> From: Adam Simonelli <adamsimonelli@gmail.com>
>
> The new config option, CONFIG_NULL_TTY_DEFAULT_ CONSOLE will allow
> ttynull to be initialized by console_initcall() and selected as a
> possible console device.
...
> In order to use this driver, you should redirect the console to this
> - TTY, or boot the kernel with console=ttynull.
> + TTY, boot the kernel with console=ttynull, or enable
> + CONFIG_NULL_TTY_DEFAULT_CONSOLE.
> +
> + If unsure, say N.
> +
> +config NULL_TTY_DEFAULT_CONSOLE
> + bool "Support for console on ttynull"
> + depends on NULL_TTY=y && !VT_CONSOLE
> + help
> + Say Y here if you want the NULL TTY to be used as a /dev/console
> + device.
> +
> + This is similar to CONFIG_VT_CONSOLE, but without the dependency on
> + CONFIG_VT. It uses the ttynull driver as the system console.
I'm now at the non-monospace font mail client, but it looks like you
have a TAB/space mix in the above for the indentation. Please, double
check that all lines, except the first in the option starts with a
single TAB and help lines (after the 'help' keyword) additionally
indented by 2 (two) spaces.
> If unsure, say N.
...
> +#ifdef CONFIG_NULL_TTY_DEFAULT_CONSOLE
> +static int __init ttynull_register(void)
> +{
> + if (!console_set_on_cmdline)
Invert this. It might be that we want more in the future and this
conditional is not-scalable for that. Inverted does the trick. To be
precise, do like the fb driver for xen does:
/* User defined console is present, avoid registering "ttynull" */
if (..._set_on_cmdline)
return 0;
> + add_preferred_console("ttynull", 0, NULL);;
> +
> + return 0;
> +}
> +console_initcall(ttynull_register);
> +#endif
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 3/3] tty: Change order of ttynull to be linked sooner if enabled as a console.
2025-03-04 3:54 ` [PATCH v6 3/3] tty: Change order of ttynull to be linked sooner if enabled as a console adamsimonelli
@ 2025-03-04 6:51 ` Andy Shevchenko
2025-03-05 2:06 ` Adam Simonelli
0 siblings, 1 reply; 14+ messages in thread
From: Andy Shevchenko @ 2025-03-04 6:51 UTC (permalink / raw)
To: adamsimonelli
Cc: linux-serial, linux-kernel, Jiri Slaby, Greg Kroah-Hartman,
Steven Rostedt, John Ogness, Sergey Senozhatsky, Petr Mladek
On Tue, Mar 4, 2025 at 5:55 AM <adamsimonelli@gmail.com> wrote:
>
> From: Adam Simonelli <adamsimonelli@gmail.com>
>
> If CONFIG_NULL_TTY_DEFAULT_CONSOLE is enabled, and CONFIG_VT is disabled,
> ttynull will become the default primary console device, based on the link
> order.
>
> Many distributions ship with CONFIG_VT enabled. On tested desktop hardware
> if CONFIG_VT is disabled, the default console device falls back to
> /dev/ttyS0 instead of /dev/tty.
>
> This could cause issues in user space, and hardware problems:
>
> 1. The user space issues include the case where /dev/ttyS0 is
> disconnected, and the TCGETS ioctl, which some user space libraries use
> as a probe to determine if a file is a tty, is called on /dev/console and
> fails. Programs that call isatty() on /dev/console and get an incorrect
> false value may skip expected logging to /dev/console
Missing period at the end.
> 2. The hardware issues include the case if a user has a science instrument
> or other device connected to the /dev/ttyS0 port, and they were to upgrade
> to a kernel that is disabling the CONFIG_VT option, kernel logs will then be
> sent to the device connected to /dev/ttyS0 unless they edit their kernel
> command line manually.
>
> The new CONFIG_NULL_TTY_CONSOLE option will give users and distribution
> maintainers an option to avoid this. Disabling CONFIG_VT and enabling
> CONFIG_NULL_TTY_CONSOLE will ensure the default kernel console behavior
> is not dependant on hardware configuration by default, and avoid
> unexpected new behavior on devices connected to the /dev/ttyS0 serial
> port.
...
> obj-y += vt/
+ blank line.
> +# If ttynull is configured to be a console by default, ensure that it is linked
> +# earlier before a real one is selected.
> +obj-$(CONFIG_NULL_TTY_DEFAULT_CONSOLE) \
> + += ttynull.o
Here is the question: are you sure that all console drivers that exist
in the kernel happen to be here? Have you grepped the source tree for
checking this?
...
> +# If ttynull is enabled, but not as a boot console, it is linked and used later
> +# after the real ones.
> +ifneq ($(CONFIG_NULL_TTY_DEFAULT_CONSOLE),y)
Also can be written as
ifeq ($(...),)
but it might be less explicit. Up to you.
> obj-$(CONFIG_NULL_TTY) += ttynull.o
> +endif
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 1/3] ttynull: Always initialize console index to -1
2025-03-04 6:01 ` Andy Shevchenko
@ 2025-03-04 8:53 ` John Ogness
0 siblings, 0 replies; 14+ messages in thread
From: John Ogness @ 2025-03-04 8:53 UTC (permalink / raw)
To: Andy Shevchenko, adamsimonelli
Cc: linux-serial, linux-kernel, Jiri Slaby, Greg Kroah-Hartman,
Steven Rostedt, Sergey Senozhatsky, Petr Mladek
On 2025-03-04, Andy Shevchenko <andy.shevchenko@gmail.com> wrote:
> In general we do not accept empty commit messages (yes, it was done in
> the past and in some exceptional cases, but should be taken as a very
> bad practice).
It would also be nice if the commit message explained _why_ the change
is done and how it affects the driver behavior as opposed to previously.
John Ogness
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 3/3] tty: Change order of ttynull to be linked sooner if enabled as a console.
2025-03-04 6:51 ` Andy Shevchenko
@ 2025-03-05 2:06 ` Adam Simonelli
2025-03-05 4:15 ` Adam Simonelli
2025-03-05 18:52 ` Andy Shevchenko
0 siblings, 2 replies; 14+ messages in thread
From: Adam Simonelli @ 2025-03-05 2:06 UTC (permalink / raw)
To: Andy Shevchenko
Cc: linux-serial, linux-kernel, Jiri Slaby, Greg Kroah-Hartman,
Steven Rostedt, John Ogness, Sergey Senozhatsky, Petr Mladek
On Tuesday, March 4, 2025 1:51:52 AM EST Andy Shevchenko wrote:
> On Tue, Mar 4, 2025 at 5:55 AM <adamsimonelli@gmail.com> wrote:
> >
> > From: Adam Simonelli <adamsimonelli@gmail.com>
> >
> > If CONFIG_NULL_TTY_DEFAULT_CONSOLE is enabled, and CONFIG_VT is disabled,
> > ttynull will become the default primary console device, based on the link
> > order.
> >
> > Many distributions ship with CONFIG_VT enabled. On tested desktop hardware
> > if CONFIG_VT is disabled, the default console device falls back to
> > /dev/ttyS0 instead of /dev/tty.
> >
> > This could cause issues in user space, and hardware problems:
> >
> > 1. The user space issues include the case where /dev/ttyS0 is
> > disconnected, and the TCGETS ioctl, which some user space libraries use
> > as a probe to determine if a file is a tty, is called on /dev/console and
> > fails. Programs that call isatty() on /dev/console and get an incorrect
> > false value may skip expected logging to /dev/console
>
> Missing period at the end.
>
> > 2. The hardware issues include the case if a user has a science instrument
> > or other device connected to the /dev/ttyS0 port, and they were to upgrade
> > to a kernel that is disabling the CONFIG_VT option, kernel logs will then be
> > sent to the device connected to /dev/ttyS0 unless they edit their kernel
> > command line manually.
> >
> > The new CONFIG_NULL_TTY_CONSOLE option will give users and distribution
> > maintainers an option to avoid this. Disabling CONFIG_VT and enabling
> > CONFIG_NULL_TTY_CONSOLE will ensure the default kernel console behavior
> > is not dependant on hardware configuration by default, and avoid
> > unexpected new behavior on devices connected to the /dev/ttyS0 serial
> > port.
>
> ...
>
> > obj-y += vt/
>
> + blank line.
>
> > +# If ttynull is configured to be a console by default, ensure that it is linked
> > +# earlier before a real one is selected.
> > +obj-$(CONFIG_NULL_TTY_DEFAULT_CONSOLE) \
> > + += ttynull.o
>
> Here is the question: are you sure that all console drivers that exist
> in the kernel happen to be here? Have you grepped the source tree for
> checking this?
>
Grepping for console_initcall, the only other places I see outside of
drivers/tty/ is
arch/mips/fw/arc/arc_con.c
arch/mips/sibyte/common/cfe_console.c
arch/powerpc/kernel/legacy_serial.c
arch/powerpc/kernel/udbg.c
arch/powerpc/platforms/powermac/setup.c
arch/um/drivers/stderr_console.c
arch/xtensa/platforms/iss/console.c
drivers/s390/char/con3215.c
drivers/s390/char/con3270.c
drivers/s390/char/sclp_con.c
drivers/s390/char/sclp_vt220.c
> ...
>
> > +# If ttynull is enabled, but not as a boot console, it is linked and used later
> > +# after the real ones.
> > +ifneq ($(CONFIG_NULL_TTY_DEFAULT_CONSOLE),y)
>
> Also can be written as
> ifeq ($(...),)
> but it might be less explicit. Up to you.
>
> > obj-$(CONFIG_NULL_TTY) += ttynull.o
> > +endif
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 3/3] tty: Change order of ttynull to be linked sooner if enabled as a console.
2025-03-05 2:06 ` Adam Simonelli
@ 2025-03-05 4:15 ` Adam Simonelli
2025-03-05 18:52 ` Andy Shevchenko
1 sibling, 0 replies; 14+ messages in thread
From: Adam Simonelli @ 2025-03-05 4:15 UTC (permalink / raw)
To: Andy Shevchenko
Cc: linux-serial, linux-kernel, Jiri Slaby, Greg Kroah-Hartman,
Steven Rostedt, John Ogness, Sergey Senozhatsky, Petr Mladek
On Tuesday, March 4, 2025 9:06:17 PM EST Adam Simonelli wrote:
> On Tuesday, March 4, 2025 1:51:52 AM EST Andy Shevchenko wrote:
> > On Tue, Mar 4, 2025 at 5:55 AM <adamsimonelli@gmail.com> wrote:
> > >
> > > From: Adam Simonelli <adamsimonelli@gmail.com>
> > >
> > > If CONFIG_NULL_TTY_DEFAULT_CONSOLE is enabled, and CONFIG_VT is disabled,
> > > ttynull will become the default primary console device, based on the link
> > > order.
> > >
> > > Many distributions ship with CONFIG_VT enabled. On tested desktop hardware
> > > if CONFIG_VT is disabled, the default console device falls back to
> > > /dev/ttyS0 instead of /dev/tty.
> > >
> > > This could cause issues in user space, and hardware problems:
> > >
> > > 1. The user space issues include the case where /dev/ttyS0 is
> > > disconnected, and the TCGETS ioctl, which some user space libraries use
> > > as a probe to determine if a file is a tty, is called on /dev/console and
> > > fails. Programs that call isatty() on /dev/console and get an incorrect
> > > false value may skip expected logging to /dev/console
> >
> > Missing period at the end.
> >
> > > 2. The hardware issues include the case if a user has a science instrument
> > > or other device connected to the /dev/ttyS0 port, and they were to upgrade
> > > to a kernel that is disabling the CONFIG_VT option, kernel logs will then be
> > > sent to the device connected to /dev/ttyS0 unless they edit their kernel
> > > command line manually.
> > >
> > > The new CONFIG_NULL_TTY_CONSOLE option will give users and distribution
> > > maintainers an option to avoid this. Disabling CONFIG_VT and enabling
> > > CONFIG_NULL_TTY_CONSOLE will ensure the default kernel console behavior
> > > is not dependant on hardware configuration by default, and avoid
> > > unexpected new behavior on devices connected to the /dev/ttyS0 serial
> > > port.
> >
> > ...
> >
> > > obj-y += vt/
> >
> > + blank line.
> >
> > > +# If ttynull is configured to be a console by default, ensure that it is linked
> > > +# earlier before a real one is selected.
> > > +obj-$(CONFIG_NULL_TTY_DEFAULT_CONSOLE) \
> > > + += ttynull.o
> >
> > Here is the question: are you sure that all console drivers that exist
> > in the kernel happen to be here? Have you grepped the source tree for
> > checking this?
> >
> Grepping for console_initcall, the only other places I see outside of
> drivers/tty/ is
>
and if I, as a wacky test try
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 05c5aa951da7..bcd248c44fc8 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -1159,6 +1159,8 @@ void __init setup_arch(char **cmdline_p)
e820__setup_pci_gap();
+ add_preferred_console("ttyS", 0, NULL);
+
#ifdef CONFIG_VT
#if defined(CONFIG_VGA_CONSOLE)
if (!efi_enabled(EFI_BOOT) || (efi_mem_type(0xa0000) != EFI_CONVENTIONAL_MEMORY))
just as a test, and do
cat /proc/consoles
I see
ttynull0 --- (EC ) 242:0
ttyS0 -W- (E p a) 4:64
where ttynull0 is at the top of the list
> arch/mips/fw/arc/arc_con.c
> arch/mips/sibyte/common/cfe_console.c
> arch/powerpc/kernel/legacy_serial.c
> arch/powerpc/kernel/udbg.c
> arch/powerpc/platforms/powermac/setup.c
> arch/um/drivers/stderr_console.c
> arch/xtensa/platforms/iss/console.c
> drivers/s390/char/con3215.c
> drivers/s390/char/con3270.c
> drivers/s390/char/sclp_con.c
> drivers/s390/char/sclp_vt220.c
>
> > ...
> >
> > > +# If ttynull is enabled, but not as a boot console, it is linked and used later
> > > +# after the real ones.
> > > +ifneq ($(CONFIG_NULL_TTY_DEFAULT_CONSOLE),y)
> >
> > Also can be written as
> > ifeq ($(...),)
> > but it might be less explicit. Up to you.
> >
> > > obj-$(CONFIG_NULL_TTY) += ttynull.o
> > > +endif
> >
> >
>
>
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v6 3/3] tty: Change order of ttynull to be linked sooner if enabled as a console.
2025-03-05 2:06 ` Adam Simonelli
2025-03-05 4:15 ` Adam Simonelli
@ 2025-03-05 18:52 ` Andy Shevchenko
2025-03-06 4:22 ` Adam Simonelli
1 sibling, 1 reply; 14+ messages in thread
From: Andy Shevchenko @ 2025-03-05 18:52 UTC (permalink / raw)
To: Adam Simonelli
Cc: linux-serial, linux-kernel, Jiri Slaby, Greg Kroah-Hartman,
Steven Rostedt, John Ogness, Sergey Senozhatsky, Petr Mladek
On Wed, Mar 5, 2025 at 4:06 AM Adam Simonelli <adamsimonelli@gmail.com> wrote:
> On Tuesday, March 4, 2025 1:51:52 AM EST Andy Shevchenko wrote:
> > On Tue, Mar 4, 2025 at 5:55 AM <adamsimonelli@gmail.com> wrote:
...
> > > obj-y += vt/
> >
> > + blank line.
> >
> > > +# If ttynull is configured to be a console by default, ensure that it is linked
> > > +# earlier before a real one is selected.
> > > +obj-$(CONFIG_NULL_TTY_DEFAULT_CONSOLE) \
> > > + += ttynull.o
> >
> > Here is the question: are you sure that all console drivers that exist
> > in the kernel happen to be here? Have you grepped the source tree for
> > checking this?
> >
> Grepping for console_initcall, the only other places I see outside of
> drivers/tty/ is
>
> arch/mips/fw/arc/arc_con.c
> arch/mips/sibyte/common/cfe_console.c
> arch/powerpc/kernel/legacy_serial.c
> arch/powerpc/kernel/udbg.c
> arch/powerpc/platforms/powermac/setup.c
> arch/um/drivers/stderr_console.c
> arch/xtensa/platforms/iss/console.c
> drivers/s390/char/con3215.c
> drivers/s390/char/con3270.c
> drivers/s390/char/sclp_con.c
> drivers/s390/char/sclp_vt220.c
Which means you need to test your stuff on those cases, to see how the
linker order is done there. It might be that your change wouldn't work
there as expected (quick workaround is to mark the new option as
depends on !S390 && !PPC and so on.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 3/3] tty: Change order of ttynull to be linked sooner if enabled as a console.
2025-03-05 18:52 ` Andy Shevchenko
@ 2025-03-06 4:22 ` Adam Simonelli
2025-03-06 7:10 ` Andy Shevchenko
0 siblings, 1 reply; 14+ messages in thread
From: Adam Simonelli @ 2025-03-06 4:22 UTC (permalink / raw)
To: Andy Shevchenko
Cc: linux-serial, linux-kernel, Jiri Slaby, Greg Kroah-Hartman,
Steven Rostedt, John Ogness, Sergey Senozhatsky, Petr Mladek
On Wednesday, March 5, 2025 1:52:00 PM EST Andy Shevchenko wrote:
> On Wed, Mar 5, 2025 at 4:06 AM Adam Simonelli <adamsimonelli@gmail.com> wrote:
> > On Tuesday, March 4, 2025 1:51:52 AM EST Andy Shevchenko wrote:
> > > On Tue, Mar 4, 2025 at 5:55 AM <adamsimonelli@gmail.com> wrote:
>
> ...
>
> > > > obj-y += vt/
> > >
> > > + blank line.
> > >
> > > > +# If ttynull is configured to be a console by default, ensure that it is linked
> > > > +# earlier before a real one is selected.
> > > > +obj-$(CONFIG_NULL_TTY_DEFAULT_CONSOLE) \
> > > > + += ttynull.o
> > >
> > > Here is the question: are you sure that all console drivers that exist
> > > in the kernel happen to be here? Have you grepped the source tree for
> > > checking this?
> > >
> > Grepping for console_initcall, the only other places I see outside of
> > drivers/tty/ is
> >
> > arch/mips/fw/arc/arc_con.c
> > arch/mips/sibyte/common/cfe_console.c
> > arch/powerpc/kernel/legacy_serial.c
> > arch/powerpc/kernel/udbg.c
> > arch/powerpc/platforms/powermac/setup.c
> > arch/um/drivers/stderr_console.c
> > arch/xtensa/platforms/iss/console.c
> > drivers/s390/char/con3215.c
> > drivers/s390/char/con3270.c
> > drivers/s390/char/sclp_con.c
> > drivers/s390/char/sclp_vt220.c
>
> Which means you need to test your stuff on those cases, to see how the
> linker order is done there. It might be that your change wouldn't work
> there as expected (quick workaround is to mark the new option as
> depends on !S390 && !PPC and so on.
>
>
It will be difficult to test other arches, I mean I guess it is possible with
QEMU, and cross-building, though I did do an experimental test on x86:
Making it temporarily adding an architecture specific console like
powerpc/some mips/s390/arches with Xen enabled.
-------------------------------------------------------------------------------
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 05c5aa951da7..bcd248c44fc8 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -1159,6 +1159,8 @@ void __init setup_arch(char **cmdline_p)
e820__setup_pci_gap();
+ add_preferred_console("ttyS", 0, NULL);
+
#ifdef CONFIG_VT
#if defined(CONFIG_VGA_CONSOLE)
if (!efi_enabled(EFI_BOOT) || (efi_mem_type(0xa0000) != EFI_CONVENTIONAL_MEMORY))
-------------------------------------------------------------------------------
to see what /proc/consoles will look like, to pretend that x86 is an arch that
sets a console somewhere, and I get:
ttynull0 --- (EC ) 242:0
ttyS0 -W- (E p a) 4:64
and I got console messages to ttyS0 with no issue.
which in my mind is acceptable I would think. ttynull is first in the list,
which is desired effect of CONFIG_NULL_TTY_DEFAULT_CONSOLE, it doesn't have to
be _exclusive_ AFAIK, especially if there are long-time default consoles that.
users or the hardware expects.
The only arch that seems to _unconditionally_ add a console without some other
circumstance, like boot loader env var, and command line option, or firmware
flag, or suboption (like CONFIG_SERIAL_PMACZILOG_CONSOLE) is Jazz.
Like platforms/powernv adds it if CONFIG_HVC_OPAL is disabled, or the firmware
is missing "FW_FEATURE_OPAL". I would assume that a user of this situation
turning on CONFIG_NULL_TTY_DEFAULT_CONSOLE in addition, will just get ttynull
and hvc in /proc/consoles instead of just hvc. Could that cause something to
break?
Correct me if I am wrong, I could very very very well be wrong.
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v6 3/3] tty: Change order of ttynull to be linked sooner if enabled as a console.
2025-03-06 4:22 ` Adam Simonelli
@ 2025-03-06 7:10 ` Andy Shevchenko
2025-03-12 13:42 ` Petr Mladek
0 siblings, 1 reply; 14+ messages in thread
From: Andy Shevchenko @ 2025-03-06 7:10 UTC (permalink / raw)
To: Adam Simonelli
Cc: linux-serial, linux-kernel, Jiri Slaby, Greg Kroah-Hartman,
Steven Rostedt, John Ogness, Sergey Senozhatsky, Petr Mladek
On Thu, Mar 6, 2025 at 6:22 AM Adam Simonelli <adamsimonelli@gmail.com> wrote:
>
> On Wednesday, March 5, 2025 1:52:00 PM EST Andy Shevchenko wrote:
> > On Wed, Mar 5, 2025 at 4:06 AM Adam Simonelli <adamsimonelli@gmail.com> wrote:
> > > On Tuesday, March 4, 2025 1:51:52 AM EST Andy Shevchenko wrote:
> > > > On Tue, Mar 4, 2025 at 5:55 AM <adamsimonelli@gmail.com> wrote:
...
> > > > > obj-y += vt/
> > > >
> > > > + blank line.
> > > >
> > > > > +# If ttynull is configured to be a console by default, ensure that it is linked
> > > > > +# earlier before a real one is selected.
> > > > > +obj-$(CONFIG_NULL_TTY_DEFAULT_CONSOLE) \
> > > > > + += ttynull.o
> > > >
> > > > Here is the question: are you sure that all console drivers that exist
> > > > in the kernel happen to be here? Have you grepped the source tree for
> > > > checking this?
> > > >
> > > Grepping for console_initcall, the only other places I see outside of
> > > drivers/tty/ is
> > >
> > > arch/mips/fw/arc/arc_con.c
> > > arch/mips/sibyte/common/cfe_console.c
> > > arch/powerpc/kernel/legacy_serial.c
> > > arch/powerpc/kernel/udbg.c
> > > arch/powerpc/platforms/powermac/setup.c
> > > arch/um/drivers/stderr_console.c
> > > arch/xtensa/platforms/iss/console.c
> > > drivers/s390/char/con3215.c
> > > drivers/s390/char/con3270.c
> > > drivers/s390/char/sclp_con.c
> > > drivers/s390/char/sclp_vt220.c
> >
> > Which means you need to test your stuff on those cases, to see how the
> > linker order is done there. It might be that your change wouldn't work
> > there as expected (quick workaround is to mark the new option as
> > depends on !S390 && !PPC and so on.
> It will be difficult to test other arches, I mean I guess it is possible with
> QEMU, and cross-building, though I did do an experimental test on x86:
>
> Making it temporarily adding an architecture specific console like
> powerpc/some mips/s390/arches with Xen enabled.
Thanks. Make sure the summary of this gets into the commit message.
Also consider updating the relevant documentation under
Documentation/, if any.
> -------------------------------------------------------------------------------
> diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> index 05c5aa951da7..bcd248c44fc8 100644
> --- a/arch/x86/kernel/setup.c
> +++ b/arch/x86/kernel/setup.c
> @@ -1159,6 +1159,8 @@ void __init setup_arch(char **cmdline_p)
>
> e820__setup_pci_gap();
>
> + add_preferred_console("ttyS", 0, NULL);
> +
> #ifdef CONFIG_VT
> #if defined(CONFIG_VGA_CONSOLE)
> if (!efi_enabled(EFI_BOOT) || (efi_mem_type(0xa0000) != EFI_CONVENTIONAL_MEMORY))
> -------------------------------------------------------------------------------
>
> to see what /proc/consoles will look like, to pretend that x86 is an arch that
> sets a console somewhere, and I get:
>
> ttynull0 --- (EC ) 242:0
> ttyS0 -W- (E p a) 4:64
>
> and I got console messages to ttyS0 with no issue.
>
> which in my mind is acceptable I would think. ttynull is first in the list,
> which is desired effect of CONFIG_NULL_TTY_DEFAULT_CONSOLE, it doesn't have to
> be _exclusive_ AFAIK, especially if there are long-time default consoles that.
> users or the hardware expects.
>
>
> The only arch that seems to _unconditionally_ add a console without some other
> circumstance, like boot loader env var, and command line option, or firmware
> flag, or suboption (like CONFIG_SERIAL_PMACZILOG_CONSOLE) is Jazz.
>
> Like platforms/powernv adds it if CONFIG_HVC_OPAL is disabled, or the firmware
> is missing "FW_FEATURE_OPAL". I would assume that a user of this situation
> turning on CONFIG_NULL_TTY_DEFAULT_CONSOLE in addition, will just get ttynull
> and hvc in /proc/consoles instead of just hvc. Could that cause something to
> break?
> Correct me if I am wrong, I could very very very well be wrong.
I leave this to Petr to comment as I'm not that expert in the area.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 3/3] tty: Change order of ttynull to be linked sooner if enabled as a console.
2025-03-06 7:10 ` Andy Shevchenko
@ 2025-03-12 13:42 ` Petr Mladek
0 siblings, 0 replies; 14+ messages in thread
From: Petr Mladek @ 2025-03-12 13:42 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Adam Simonelli, linux-serial, linux-kernel, Jiri Slaby,
Greg Kroah-Hartman, Steven Rostedt, John Ogness,
Sergey Senozhatsky
On Thu 2025-03-06 09:10:29, Andy Shevchenko wrote:
> On Thu, Mar 6, 2025 at 6:22 AM Adam Simonelli <adamsimonelli@gmail.com> wrote:
> >
> > On Wednesday, March 5, 2025 1:52:00 PM EST Andy Shevchenko wrote:
> > > On Wed, Mar 5, 2025 at 4:06 AM Adam Simonelli <adamsimonelli@gmail.com> wrote:
> > > > On Tuesday, March 4, 2025 1:51:52 AM EST Andy Shevchenko wrote:
> > > > > On Tue, Mar 4, 2025 at 5:55 AM <adamsimonelli@gmail.com> wrote:
>
> ...
>
> > > > > > obj-y += vt/
> > > > >
> > > > > + blank line.
> > > > >
> > > > > > +# If ttynull is configured to be a console by default, ensure that it is linked
> > > > > > +# earlier before a real one is selected.
> > > > > > +obj-$(CONFIG_NULL_TTY_DEFAULT_CONSOLE) \
> > > > > > + += ttynull.o
> > > > >
> > > > > Here is the question: are you sure that all console drivers that exist
> > > > > in the kernel happen to be here? Have you grepped the source tree for
> > > > > checking this?
> > > > >
> > > > Grepping for console_initcall, the only other places I see outside of
> > > > drivers/tty/ is
> > > >
> > > > arch/mips/fw/arc/arc_con.c
> > > > arch/mips/sibyte/common/cfe_console.c
> > > > arch/powerpc/kernel/legacy_serial.c
> > > > arch/powerpc/kernel/udbg.c
> > > > arch/powerpc/platforms/powermac/setup.c
> > > > arch/um/drivers/stderr_console.c
> > > > arch/xtensa/platforms/iss/console.c
> > > > drivers/s390/char/con3215.c
> > > > drivers/s390/char/con3270.c
> > > > drivers/s390/char/sclp_con.c
> > > > drivers/s390/char/sclp_vt220.c
> > >
> > > Which means you need to test your stuff on those cases, to see how the
> > > linker order is done there. It might be that your change wouldn't work
> > > there as expected (quick workaround is to mark the new option as
> > > depends on !S390 && !PPC and so on.
>
> > It will be difficult to test other arches, I mean I guess it is possible with
> > QEMU, and cross-building, though I did do an experimental test on x86:
> >
> > Making it temporarily adding an architecture specific console like
> > powerpc/some mips/s390/arches with Xen enabled.
>
> Thanks. Make sure the summary of this gets into the commit message.
> Also consider updating the relevant documentation under
> Documentation/, if any.
Honestly, I am not sure what is the preferred behavior here. I am not
familiar with the arch-specific consoles.
But it made me think and investigate the various console drivers.
It is a kind of a mess and I am not sure that I understand it correctly.
Anyway, I suggested to use "add_preferred_console()" in console_initcall()
in the v5 review, see https://lore.kernel.org/r/Z73teICMWNx7BiHT@pathway.suse.cz
And I expected that it would be enough and the hack with linking order
won't be needed anymore.
Now, I see that I was wrong. The problem is that many console drivers
call register_console() in console_initcall(). Such consoles would be
registered by default when their register_console() is called before
the ttynull.c calls add_preferred_console().
By other words, the hack with the linking order is still needed to
call add_preferred_console() in time.
Resume: From my POV, the solution with add_preferred_console() in
console_initcall() still relies on the linking order.
So, v6 is not better than v5.
IMHO, v6 is actually be worse, see below.
> > -------------------------------------------------------------------------------
> > diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> > index 05c5aa951da7..bcd248c44fc8 100644
> > --- a/arch/x86/kernel/setup.c
> > +++ b/arch/x86/kernel/setup.c
> > @@ -1159,6 +1159,8 @@ void __init setup_arch(char **cmdline_p)
> >
> > e820__setup_pci_gap();
> >
> > + add_preferred_console("ttyS", 0, NULL);
> > +
> > #ifdef CONFIG_VT
> > #if defined(CONFIG_VGA_CONSOLE)
> > if (!efi_enabled(EFI_BOOT) || (efi_mem_type(0xa0000) != EFI_CONVENTIONAL_MEMORY))
> > -------------------------------------------------------------------------------
> >
> > to see what /proc/consoles will look like, to pretend that x86 is an arch that
> > sets a console somewhere, and I get:
> >
> > ttynull0 --- (EC ) 242:0
> > ttyS0 -W- (E p a) 4:64
> >
> > and I got console messages to ttyS0 with no issue.
> >
> > which in my mind is acceptable I would think. ttynull is first in the list,
> > which is desired effect of CONFIG_NULL_TTY_DEFAULT_CONSOLE, it doesn't have to
> > be _exclusive_ AFAIK, especially if there are long-time default consoles that.
> > users or the hardware expects.
> >
> >
> > The only arch that seems to _unconditionally_ add a console without some other
> > circumstance, like boot loader env var, and command line option, or firmware
> > flag, or suboption (like CONFIG_SERIAL_PMACZILOG_CONSOLE) is Jazz.
> >
> > Like platforms/powernv adds it if CONFIG_HVC_OPAL is disabled, or the firmware
> > is missing "FW_FEATURE_OPAL". I would assume that a user of this situation
> > turning on CONFIG_NULL_TTY_DEFAULT_CONSOLE in addition, will just get ttynull
> > and hvc in /proc/consoles instead of just hvc. Could that cause something to
> > break?
>
> > Correct me if I am wrong, I could very very very well be wrong.
>
> I leave this to Petr to comment as I'm not that expert in the area.
It depends on the expectations. I see two possibilities:
1. view:
CONFIG_NULL_TTY_DEFAULT_CONSOLE is disabled by default.
We could assume that people would enable it only when they really
want to use ttynull for /dev/console. And they do not mind when
some other platform-specific console is enabled as well.
Note that we do not need the hack with the linking order for this.
A solution is to call add_preferred_console() directly in
console_init(). It has already been used in an earlier version, see
https://lore.kernel.org/all/10194425.EvYhyI6sBW@nerdopolis2/
To make it clear. I consider this as a cleaner and more reliable
solution than using the linking order hack.
2. view:
The new config option wants to prefer "ttynull" when CONFIG_CONSOLE_VT
is disabled. So, it is an alternative for "ttyX" from "vt".
A conservative approach would be to enable it by default in the same
situations where "ttyX" from "vt" is enabled by default.
To make "ttynull" behave the same as "vt" would require using:
+ register_console() in console_initcall().
+ the same console_initcall() ordering => move ttynull.o
linking order
=> going back to v5 approach.
I would normally prefer the conservative approach. But I hate the
dependency on the linking order. It is so non-intuitive and
fragile.
So, I personally prefer to call add_preffed_console() directly in
console_init() in the end. I guess that
CONFIG_NULL_TTY_DEFAULT_CONSOLE won't be used on architectures
with a better native console. So, it will be good enough
in practice.
Best Regards,
Petr
PS: I am sorry that you have already sent two more versions
in the meantime. But I was not able to answer this quickly.
I needed to find time and understand the various aspects.
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2025-03-12 13:42 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-04 3:54 [PATCH v6 0/3] Optionally allow ttynull to be selected as a default console adamsimonelli
2025-03-04 3:54 ` [PATCH v6 1/3] ttynull: Always initialize console index to -1 adamsimonelli
2025-03-04 6:01 ` Andy Shevchenko
2025-03-04 8:53 ` John Ogness
2025-03-04 3:54 ` [PATCH v6 2/3] ttynull: Add an option to allow ttynull to be used as a console device adamsimonelli
2025-03-04 6:07 ` Andy Shevchenko
2025-03-04 3:54 ` [PATCH v6 3/3] tty: Change order of ttynull to be linked sooner if enabled as a console adamsimonelli
2025-03-04 6:51 ` Andy Shevchenko
2025-03-05 2:06 ` Adam Simonelli
2025-03-05 4:15 ` Adam Simonelli
2025-03-05 18:52 ` Andy Shevchenko
2025-03-06 4:22 ` Adam Simonelli
2025-03-06 7:10 ` Andy Shevchenko
2025-03-12 13:42 ` Petr Mladek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox