diff options
author | Frank Rowand <frank.rowand@am.sony.com> | 2011-09-23 13:43:12 -0700 |
---|---|---|
committer | Clark Williams <williams@redhat.com> | 2012-01-16 13:00:36 -0600 |
commit | 3455718438c3b5ec2410d972df82ce16cbd9dd44 (patch) | |
tree | b9d94679f039f5470a752585d2c224b373d8ec46 /kernel | |
parent | f1ebbaf91523565ac8be42ee9f9ca3f4fc177fe3 (diff) |
sysrq: Allow immediate Magic SysRq output for PREEMPT_RT_FULL
Add a CONFIG option to allow the output from Magic SysRq to be output
immediately, even if this causes large latencies.
If PREEMPT_RT_FULL, printk() will not try to acquire the console lock
when interrupts or preemption are disabled. If the console lock is
not acquired the printk() output will be buffered, but will not be
output immediately. Some drivers call into the Magic SysRq code
with interrupts or preemption disabled, so the output of Magic SysRq
will be buffered instead of printing immediately if this option is
not selected.
Even with this option selected, Magic SysRq output will be delayed
if the attempt to acquire the console lock fails.
Signed-off-by: Frank Rowand <frank.rowand@am.sony.com>
Link: http://lkml.kernel.org/r/4E7CEF60.5020508@am.sony.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/printk.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/kernel/printk.c b/kernel/printk.c index 13ea6a9a7ce6..9eabbbbae463 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -21,6 +21,7 @@ #include <linux/tty.h> #include <linux/tty_driver.h> #include <linux/console.h> +#include <linux/sysrq.h> #include <linux/init.h> #include <linux/jiffies.h> #include <linux/nmi.h> @@ -834,8 +835,8 @@ static int console_trylock_for_printk(unsigned int cpu, unsigned long flags) { int retval = 0, wake = 0; #ifdef CONFIG_PREEMPT_RT_FULL - int lock = !early_boot_irqs_disabled && !irqs_disabled_flags(flags) && - !preempt_count(); + int lock = (!early_boot_irqs_disabled && !irqs_disabled_flags(flags) && + !preempt_count()) || sysrq_in_progress; #else int lock = 1; #endif |