summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorFrank Rowand <frank.rowand@am.sony.com>2011-09-23 13:43:12 -0700
committerClark Williams <williams@redhat.com>2012-03-24 10:27:23 -0500
commitb0342eb6a919e2295a3b1704b1b1821e8b293dfa (patch)
tree10d26fe5b31dcfa28b990f204cb1355385f1a6cd /kernel
parent3791e470a922edbbb93770a7182158f376f851ae (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.c5
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