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-04-11 11:07:52 -0500
commit3917ba1f7d36e2023ffe0d77327f92df2ccbee01 (patch)
tree9662b501ea8d15707686dc88c2488622187d8479 /kernel
parent1a0d71775e6ed5165291f72620fed7c7bf19f282 (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 28baa3622fab..d3f22ec24196 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>
@@ -846,8 +847,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