* [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
* 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 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
* [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
* 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
* [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 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 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