Skip to content

Commit

Permalink
Merge tag 'printk-for-5.11' of git://git.kernel.org/pub/scm/linux/ker…
Browse files Browse the repository at this point in the history
…nel/git/printk/linux

Pull printk updates from Petr Mladek:

 - Finally allow parallel writes and reads into/from the lockless
   ringbuffer. But it is not a complete solution. Readers are still
   serialized against each other. And nested writes are still prevented
   by printk_safe per-CPU buffers.

 - Use ttynull as the ultimate fallback for /dev/console.

 - Officially allow disabling console output by using console="" or
   console=null

 - A few code cleanups

* tag 'printk-for-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux:
  printk: remove logbuf_lock writer-protection of ringbuffer
  printk: inline log_output(),log_store() in vprintk_store()
  printk: remove obsolete dead assignment
  printk/console: Allow to disable console output by using console="" or console=null
  init/console: Use ttynull as a fallback when there is no console
  printk: ringbuffer: Reference text_data_ring directly in callees.
  • Loading branch information
torvalds committed Dec 16, 2020
2 parents 5e60366 + 5ed3717 commit d3eb521
Show file tree
Hide file tree
Showing 7 changed files with 200 additions and 137 deletions.
14 changes: 0 additions & 14 deletions drivers/tty/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -401,20 +401,6 @@ config MIPS_EJTAG_FDC_KGDB_CHAN
help
FDC channel number to use for KGDB.

config NULL_TTY
tristate "NULL TTY driver"
help
Say Y here if you want a NULL TTY which simply discards messages.

This is useful to allow userspace applications which expect a console
device to work without modifications even when no console is
available or desired.

In order to use this driver, you should redirect the console to this
TTY, or boot the kernel with console=ttynull.

If unsure, say N.

config TRACE_ROUTER
tristate "Trace data router for MIPI P1149.7 cJTAG standard"
depends on TRACE_SINK
Expand Down
3 changes: 1 addition & 2 deletions drivers/tty/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
obj-$(CONFIG_TTY) += tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o \
tty_buffer.o tty_port.o tty_mutex.o \
tty_ldsem.o tty_baudrate.o tty_jobctrl.o \
n_null.o
n_null.o ttynull.o
obj-$(CONFIG_LEGACY_PTYS) += pty.o
obj-$(CONFIG_UNIX98_PTYS) += pty.o
obj-$(CONFIG_AUDIT) += tty_audit.o
Expand All @@ -25,7 +25,6 @@ obj-$(CONFIG_ISI) += isicom.o
obj-$(CONFIG_MOXA_INTELLIO) += moxa.o
obj-$(CONFIG_MOXA_SMARTIO) += mxser.o
obj-$(CONFIG_NOZOMI) += nozomi.o
obj-$(CONFIG_NULL_TTY) += ttynull.o
obj-$(CONFIG_ROCKETPORT) += rocket.o
obj-$(CONFIG_SYNCLINK_GT) += synclink_gt.o
obj-$(CONFIG_PPC_EPAPR_HV_BYTECHAN) += ehv_bytechan.o
Expand Down
18 changes: 18 additions & 0 deletions drivers/tty/ttynull.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@
/*
* Copyright (C) 2019 Axis Communications AB
*
* The console is useful for userspace applications which expect a console
* device to work without modifications even when no console is available
* or desired.
*
* In order to use this driver, you should redirect the console to this
* TTY, or boot the kernel with console=ttynull.
*
* Based on ttyprintk.c:
* Copyright (C) 2010 Samo Pogacnik
*/
Expand Down Expand Up @@ -59,6 +66,17 @@ static struct console ttynull_console = {
.device = ttynull_device,
};

void __init register_ttynull_console(void)
{
if (!ttynull_driver)
return;

if (add_preferred_console(ttynull_console.name, 0, NULL))
return;

register_console(&ttynull_console);
}

static int __init ttynull_init(void)
{
struct tty_driver *driver;
Expand Down
3 changes: 3 additions & 0 deletions include/linux/console.h
Original file line number Diff line number Diff line change
Expand Up @@ -186,9 +186,12 @@ extern int braille_register_console(struct console *, int index,
extern int braille_unregister_console(struct console *);
#ifdef CONFIG_TTY
extern void console_sysfs_notify(void);
extern void register_ttynull_console(void);
#else
static inline void console_sysfs_notify(void)
{ }
static inline void register_ttynull_console(void)
{ }
#endif
extern bool console_suspend_enabled;

Expand Down
10 changes: 8 additions & 2 deletions init/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1480,8 +1480,14 @@ void __init console_on_rootfs(void)
struct file *file = filp_open("/dev/console", O_RDWR, 0);

if (IS_ERR(file)) {
pr_err("Warning: unable to open an initial console.\n");
return;
pr_err("Warning: unable to open an initial console. Fallback to ttynull.\n");
register_ttynull_console();

file = filp_open("/dev/console", O_RDWR, 0);
if (IS_ERR(file)) {
pr_err("Warning: Failed to add ttynull console. No stdin, stdout, and stderr for the init process!\n");
return;
}
}
init_dup(file);
init_dup(file);
Expand Down
Loading

0 comments on commit d3eb521

Please sign in to comment.