All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86: fix trigger_all_cpu_backtrace() implementation
@ 2013-06-06 11:41 Michel Lespinasse
  2013-06-20 12:00 ` Ingo Molnar
  2013-06-20 14:48 ` [tip:x86/urgent] x86: Fix " tip-bot for Michel Lespinasse
  0 siblings, 2 replies; 3+ messages in thread
From: Michel Lespinasse @ 2013-06-06 11:41 UTC (permalink / raw)
  To: Linus Torvalds, Thomas Gleixner, Ingo Molnar, H. Peter Anvin
  Cc: Andrew Morton, linux-kernel, x86

The following change fixes the x86 implementation of
trigger_all_cpu_backtrace(), which was previously (accidentally, as
far as I can tell) disabled to always return false as on architectures
that do not implement this function.

Is there any chance that we could get this in before v3.10 ?

---------------------------------8<---------------------------------

trigger_all_cpu_backtrace(), as defined in include/linux/nmi.h,
should call arch_trigger_all_cpu_backtrace() if available, or return
false if the underlying arch doesn't implement this function.

x86 did provide a suitable arch_trigger_all_cpu_backtrace() implementation,
but it wasn't actually being used because it was declared in asm/nmi.h,
which linux/nmi.h doesn't include. Also, linux/nmi.h couldn't easily
be fixed by including asm/nmi.h, because that file is not available on
all architectures.

I am proposing to fix this by moving the x86 definition of
arch_trigger_all_cpu_backtrace() to asm/irq.h.

Tested: echo l > /proc/sysrq-trigger

Before the change, this uses a fallback implementation which shows
backtraces on active CPUs (using smp_call_function_interrupt() )

After the change, this shows NMI backtraces on all CPUs

Signed-off-by: Michel Lespinasse <walken@google.com>
---
 arch/x86/include/asm/irq.h    | 5 +++++
 arch/x86/include/asm/nmi.h    | 4 +---
 arch/x86/kernel/apic/hw_nmi.c | 1 +
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/arch/x86/include/asm/irq.h b/arch/x86/include/asm/irq.h
index ba870bb6dd8e..57873beb3292 100644
--- a/arch/x86/include/asm/irq.h
+++ b/arch/x86/include/asm/irq.h
@@ -41,4 +41,9 @@ extern int vector_used_by_percpu_irq(unsigned int vector);
 
 extern void init_ISA_irqs(void);
 
+#ifdef CONFIG_X86_LOCAL_APIC
+void arch_trigger_all_cpu_backtrace(void);
+#define arch_trigger_all_cpu_backtrace arch_trigger_all_cpu_backtrace
+#endif
+
 #endif /* _ASM_X86_IRQ_H */
diff --git a/arch/x86/include/asm/nmi.h b/arch/x86/include/asm/nmi.h
index c0fa356e90de..86f9301903c8 100644
--- a/arch/x86/include/asm/nmi.h
+++ b/arch/x86/include/asm/nmi.h
@@ -18,9 +18,7 @@ extern int proc_nmi_enabled(struct ctl_table *, int ,
 			void __user *, size_t *, loff_t *);
 extern int unknown_nmi_panic;
 
-void arch_trigger_all_cpu_backtrace(void);
-#define arch_trigger_all_cpu_backtrace arch_trigger_all_cpu_backtrace
-#endif
+#endif /* CONFIG_X86_LOCAL_APIC */
 
 #define NMI_FLAG_FIRST	1
 
diff --git a/arch/x86/kernel/apic/hw_nmi.c b/arch/x86/kernel/apic/hw_nmi.c
index 31cb9ae992b7..a698d7165c96 100644
--- a/arch/x86/kernel/apic/hw_nmi.c
+++ b/arch/x86/kernel/apic/hw_nmi.c
@@ -9,6 +9,7 @@
  *
  */
 #include <asm/apic.h>
+#include <asm/nmi.h>
 
 #include <linux/cpumask.h>
 #include <linux/kdebug.h>
-- 
1.8.3

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] x86: fix trigger_all_cpu_backtrace() implementation
  2013-06-06 11:41 [PATCH] x86: fix trigger_all_cpu_backtrace() implementation Michel Lespinasse
@ 2013-06-20 12:00 ` Ingo Molnar
  2013-06-20 14:48 ` [tip:x86/urgent] x86: Fix " tip-bot for Michel Lespinasse
  1 sibling, 0 replies; 3+ messages in thread
From: Ingo Molnar @ 2013-06-20 12:00 UTC (permalink / raw)
  To: Michel Lespinasse
  Cc: Linus Torvalds, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	Andrew Morton, linux-kernel, x86


* Michel Lespinasse <walken@google.com> wrote:

> The following change fixes the x86 implementation of
> trigger_all_cpu_backtrace(), which was previously (accidentally, as
> far as I can tell) disabled to always return false as on architectures
> that do not implement this function.
> 
> Is there any chance that we could get this in before v3.10 ?

Looks good at first glance - I'll test it and push Linuswards.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [tip:x86/urgent] x86: Fix trigger_all_cpu_backtrace() implementation
  2013-06-06 11:41 [PATCH] x86: fix trigger_all_cpu_backtrace() implementation Michel Lespinasse
  2013-06-20 12:00 ` Ingo Molnar
@ 2013-06-20 14:48 ` tip-bot for Michel Lespinasse
  1 sibling, 0 replies; 3+ messages in thread
From: tip-bot for Michel Lespinasse @ 2013-06-20 14:48 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, torvalds, tglx, walken

Commit-ID:  b52e0a7c4e4100f8683af508664e60e1603070f9
Gitweb:     http://git.kernel.org/tip/b52e0a7c4e4100f8683af508664e60e1603070f9
Author:     Michel Lespinasse <walken@google.com>
AuthorDate: Thu, 6 Jun 2013 04:41:15 -0700
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 20 Jun 2013 14:00:21 +0200

x86: Fix trigger_all_cpu_backtrace() implementation

The following change fixes the x86 implementation of
trigger_all_cpu_backtrace(), which was previously (accidentally,
as far as I can tell) disabled to always return false as on
architectures that do not implement this function.

trigger_all_cpu_backtrace(), as defined in include/linux/nmi.h,
should call arch_trigger_all_cpu_backtrace() if available, or
return false if the underlying arch doesn't implement this
function.

x86 did provide a suitable arch_trigger_all_cpu_backtrace()
implementation, but it wasn't actually being used because it was
declared in asm/nmi.h, which linux/nmi.h doesn't include. Also,
linux/nmi.h couldn't easily be fixed by including asm/nmi.h,
because that file is not available on all architectures.

I am proposing to fix this by moving the x86 definition of
arch_trigger_all_cpu_backtrace() to asm/irq.h.

Tested via: echo l > /proc/sysrq-trigger

Before the change, this uses a fallback implementation which
shows backtraces on active CPUs (using
smp_call_function_interrupt() )

After the change, this shows NMI backtraces on all CPUs

Signed-off-by: Michel Lespinasse <walken@google.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: http://lkml.kernel.org/r/1370518875-1346-1-git-send-email-walken@google.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/include/asm/irq.h    | 5 +++++
 arch/x86/include/asm/nmi.h    | 4 +---
 arch/x86/kernel/apic/hw_nmi.c | 1 +
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/arch/x86/include/asm/irq.h b/arch/x86/include/asm/irq.h
index ba870bb..57873be 100644
--- a/arch/x86/include/asm/irq.h
+++ b/arch/x86/include/asm/irq.h
@@ -41,4 +41,9 @@ extern int vector_used_by_percpu_irq(unsigned int vector);
 
 extern void init_ISA_irqs(void);
 
+#ifdef CONFIG_X86_LOCAL_APIC
+void arch_trigger_all_cpu_backtrace(void);
+#define arch_trigger_all_cpu_backtrace arch_trigger_all_cpu_backtrace
+#endif
+
 #endif /* _ASM_X86_IRQ_H */
diff --git a/arch/x86/include/asm/nmi.h b/arch/x86/include/asm/nmi.h
index c0fa356..86f9301 100644
--- a/arch/x86/include/asm/nmi.h
+++ b/arch/x86/include/asm/nmi.h
@@ -18,9 +18,7 @@ extern int proc_nmi_enabled(struct ctl_table *, int ,
 			void __user *, size_t *, loff_t *);
 extern int unknown_nmi_panic;
 
-void arch_trigger_all_cpu_backtrace(void);
-#define arch_trigger_all_cpu_backtrace arch_trigger_all_cpu_backtrace
-#endif
+#endif /* CONFIG_X86_LOCAL_APIC */
 
 #define NMI_FLAG_FIRST	1
 
diff --git a/arch/x86/kernel/apic/hw_nmi.c b/arch/x86/kernel/apic/hw_nmi.c
index 31cb9ae..a698d71 100644
--- a/arch/x86/kernel/apic/hw_nmi.c
+++ b/arch/x86/kernel/apic/hw_nmi.c
@@ -9,6 +9,7 @@
  *
  */
 #include <asm/apic.h>
+#include <asm/nmi.h>
 
 #include <linux/cpumask.h>
 #include <linux/kdebug.h>

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-06-20 14:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-06 11:41 [PATCH] x86: fix trigger_all_cpu_backtrace() implementation Michel Lespinasse
2013-06-20 12:00 ` Ingo Molnar
2013-06-20 14:48 ` [tip:x86/urgent] x86: Fix " tip-bot for Michel Lespinasse

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.