From 3cd42786e2d975600ad84b354c60dfc9d2724eda Mon Sep 17 00:00:00 2001 From: Simon Arlott Date: Sun, 24 Dec 2006 13:49:12 +0000 Subject: Output ALL printks above DEBUG via netconsole, regardless of log_level. --- drivers/net/netconsole.c | 2 +- include/linux/console.h | 1 + kernel/printk.c | 36 ++++++++++++++++++------------------ 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 69233f6..295c984 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -87,7 +87,7 @@ static void write_msg(struct console *con, const char *msg, unsigned int len) static struct console netconsole = { .name = "netcon", - .flags = CON_ENABLED | CON_PRINTBUFFER, + .flags = CON_ENABLED | CON_PRINTBUFFER | CON_ALL, .write = write_msg }; diff --git a/include/linux/console.h b/include/linux/console.h index 7d04202..eb2fcb9 100644 --- a/include/linux/console.h +++ b/include/linux/console.h @@ -90,6 +90,7 @@ void give_up_console(const struct consw *sw); #define CON_ENABLED (4) #define CON_BOOT (8) #define CON_ANYTIME (16) /* Safe to call when cpu is offline */ +#define CON_ALL (32) struct console { diff --git a/kernel/printk.c b/kernel/printk.c index c770e1a..ea83d71 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -318,48 +318,48 @@ asmlinkage long sys_syslog(int type, char __user *buf, int len) return do_syslog(type, buf, len); } +static int __read_mostly ignore_loglevel; + +static int __init ignore_loglevel_setup(char *str) +{ + ignore_loglevel = 1; + printk(KERN_INFO "debug: ignoring loglevel setting.\n"); + + return 1; +} + +__setup("ignore_loglevel", ignore_loglevel_setup); + /* * Call the console drivers on a range of log_buf */ -static void __call_console_drivers(unsigned long start, unsigned long end) +static void __call_console_drivers(unsigned long start, unsigned long end, int msg_log_level) { struct console *con; for (con = console_drivers; con; con = con->next) { if ((con->flags & CON_ENABLED) && con->write && + (msg_log_level < console_loglevel || ignore_loglevel || ((con->flags & CON_ALL) && msg_log_level < 7)) && (cpu_online(smp_processor_id()) || (con->flags & CON_ANYTIME))) con->write(con, &LOG_BUF(start), end - start); } } -static int __read_mostly ignore_loglevel; - -static int __init ignore_loglevel_setup(char *str) -{ - ignore_loglevel = 1; - printk(KERN_INFO "debug: ignoring loglevel setting.\n"); - - return 1; -} - -__setup("ignore_loglevel", ignore_loglevel_setup); - /* * Write out chars from start to end - 1 inclusive */ static void _call_console_drivers(unsigned long start, unsigned long end, int msg_log_level) { - if ((msg_log_level < console_loglevel || ignore_loglevel) && - console_drivers && start != end) { + if (console_drivers && start != end) { if ((start & LOG_BUF_MASK) > (end & LOG_BUF_MASK)) { /* wrapped write */ __call_console_drivers(start & LOG_BUF_MASK, - log_buf_len); - __call_console_drivers(0, end & LOG_BUF_MASK); + log_buf_len, msg_log_level); + __call_console_drivers(0, end & LOG_BUF_MASK, msg_log_level); } else { - __call_console_drivers(start, end); + __call_console_drivers(start, end, msg_log_level); } } } -- 1.5.0.1