Messages in this thread Patch in this message |  | | Date | Fri, 28 Nov 2025 03:43:50 +0800 | | From | Chris Down <> | | Subject | [PATCH v8 11/21] printk: Add ignore_per_console_loglevel module parameter |
| |
With per-console loglevels now functional, there are scenarios where administrators need to quickly disable them and revert to the global console_loglevel for all consoles. This is useful for debugging message emission issues or when needing to break glass in emergencies.
This commit introduces the ignore_per_console_loglevel parameter which can be set via the kernel command line or at runtime through /sys/module/printk/parameters/ignore_per_console_loglevel or on the kernel command line. When set, per-console loglevels are bypassed and the global console_loglevel is used for all consoles.
Reviewed-by: Petr Mladek <pmladek@suse.com> Signed-off-by: Chris Down <chris@chrisdown.name> --- Documentation/admin-guide/kernel-parameters.txt | 7 +++++++ include/linux/printk.h | 2 ++ kernel/printk/printk.c | 17 ++++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 3edc5ce0e2a3..7b62a99489b8 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -2177,6 +2177,13 @@ could change it dynamically, usually by /sys/module/printk/parameters/ignore_loglevel. + ignore_per_console_loglevel [KNL,EARLY] + Ignore all per-console loglevel settings + and use only the global console_loglevel for all + consoles. This can also be set at runtime via + /sys/module/printk/parameters/ignore_per_console_loglevel. + See Documentation/admin-guide/per-console-loglevel.rst. + ignore_rlimit_data Ignore RLIMIT_DATA setting for data mappings, print warning at first misuse. Can be changed via diff --git a/include/linux/printk.h b/include/linux/printk.h index 45c663124c9b..0aa8cb8ddc09 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -73,6 +73,8 @@ extern int console_printk[]; #define minimum_console_loglevel (console_printk[2]) #define default_console_loglevel (console_printk[3]) +extern bool ignore_per_console_loglevel; + extern void console_verbose(void); /* strlen("ratelimit") + 1 */ diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 98d2f4466aad..e5b6a926135e 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -104,6 +104,9 @@ DEFINE_STATIC_SRCU(console_srcu); */ int __read_mostly suppress_printk; +/* The sysrq infrastructure needs this even on !CONFIG_PRINTK. */ +bool __read_mostly ignore_per_console_loglevel; + #ifdef CONFIG_LOCKDEP static struct lockdep_map console_lock_dep_map = { .name = "console_lock" @@ -1280,6 +1283,18 @@ module_param(ignore_loglevel, bool, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(ignore_loglevel, "ignore loglevel setting (prints all kernel messages to the console)"); +static int __init ignore_per_console_loglevel_setup(char *str) +{ + ignore_per_console_loglevel = true; + return 0; +} + +early_param("ignore_per_console_loglevel", ignore_per_console_loglevel_setup); +module_param(ignore_per_console_loglevel, bool, 0644); +MODULE_PARM_DESC( + ignore_per_console_loglevel, + "ignore per-console loglevel setting (only respect global console loglevel)"); + /** * is_valid_per_console_loglevel - Check if a loglevel is valid for per-console * @@ -1317,7 +1332,7 @@ console_effective_loglevel_source(int con_level) if (ignore_loglevel) return LLS_IGNORE_LOGLEVEL; - if (is_valid_per_console_loglevel(con_level)) + if (!ignore_per_console_loglevel && is_valid_per_console_loglevel(con_level)) return LLS_LOCAL; return LLS_GLOBAL; -- 2.51.2
|  |