|
@@ -223,7 +223,20 @@ static DECLARE_WORK(sysrq_showallcpus, sysrq_showregs_othercpus);
|
|
|
|
|
|
static void sysrq_handle_showallcpus(int key, struct tty_struct *tty)
|
|
|
{
|
|
|
- trigger_all_cpu_backtrace();
|
|
|
+ /*
|
|
|
+ * Fall back to the workqueue based printing if the
|
|
|
+ * backtrace printing did not succeed or the
|
|
|
+ * architecture has no support for it:
|
|
|
+ */
|
|
|
+ if (!trigger_all_cpu_backtrace()) {
|
|
|
+ struct pt_regs *regs = get_irq_regs();
|
|
|
+
|
|
|
+ if (regs) {
|
|
|
+ printk(KERN_INFO "CPU%d:\n", smp_processor_id());
|
|
|
+ show_regs(regs);
|
|
|
+ }
|
|
|
+ schedule_work(&sysrq_showallcpus);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static struct sysrq_key_op sysrq_showallcpus_op = {
|