| From 3cffa06aeef7ece30f6b5ac0ea51f264e8fea4d0 Mon Sep 17 00:00:00 2001 |
| From: Petr Mladek <pmladek@suse.com> |
| Date: Wed, 11 Nov 2020 14:54:50 +0100 |
| Subject: printk/console: Allow to disable console output by using console="" or console=null |
| |
| From: Petr Mladek <pmladek@suse.com> |
| |
| commit 3cffa06aeef7ece30f6b5ac0ea51f264e8fea4d0 upstream. |
| |
| The commit 48021f98130880dd74 ("printk: handle blank console arguments |
| passed in.") prevented crash caused by empty console= parameter value. |
| |
| Unfortunately, this value is widely used on Chromebooks to disable |
| the console output. The above commit caused performance regression |
| because the messages were pushed on slow console even though nobody |
| was watching it. |
| |
| Use ttynull driver explicitly for console="" and console=null |
| parameters. It has been created for exactly this purpose. |
| |
| It causes that preferred_console is set. As a result, ttySX and ttyX |
| are not used as a fallback. And only ttynull console gets registered by |
| default. |
| |
| It still allows to register other consoles either by additional console= |
| parameters or SPCR. It prevents regression because it worked this way even |
| before. Also it is a sane semantic. Preventing output on all consoles |
| should be done another way, for example, by introducing mute_console |
| parameter. |
| |
| Link: https://lore.kernel.org/r/20201006025935.GA597@jagdpanzerIV.localdomain |
| Suggested-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> |
| Reviewed-by: Guenter Roeck <linux@roeck-us.net> |
| Tested-by: Guenter Roeck <linux@roeck-us.net> |
| Acked-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> |
| Signed-off-by: Petr Mladek <pmladek@suse.com> |
| Link: https://lore.kernel.org/r/20201111135450.11214-3-pmladek@suse.com |
| Cc: Yi Fan <yfa@google.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| kernel/printk/printk.c | 9 ++++++++- |
| 1 file changed, 8 insertions(+), 1 deletion(-) |
| |
| --- a/kernel/printk/printk.c |
| +++ b/kernel/printk/printk.c |
| @@ -2193,8 +2193,15 @@ static int __init console_setup(char *st |
| char *s, *options, *brl_options = NULL; |
| int idx; |
| |
| - if (str[0] == 0) |
| + /* |
| + * console="" or console=null have been suggested as a way to |
| + * disable console output. Use ttynull that has been created |
| + * for exacly this purpose. |
| + */ |
| + if (str[0] == 0 || strcmp(str, "null") == 0) { |
| + __add_preferred_console("ttynull", 0, NULL, NULL); |
| return 1; |
| + } |
| |
| if (_braille_console_setup(&str, &brl_options)) |
| return 1; |