Define the ia64 crash_stop() interrupt handler and associated routines.

IPI_CRASH_STOP conflicts with the KDB vector.  This is deliberate, one
aim of the crash_stop() API is to remove all the interrupt code from
the various kernel debug patches and use the common crash_stop code
instead.

Signed-off-by: Keith Owens <[EMAIL PROTECTED]>
---
 arch/ia64/kernel/smp.c |   35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

Index: linux/arch/ia64/kernel/smp.c
===================================================================
--- linux.orig/arch/ia64/kernel/smp.c
+++ linux/arch/ia64/kernel/smp.c
@@ -30,6 +30,7 @@
 #include <linux/delay.h>
 #include <linux/efi.h>
 #include <linux/bitops.h>
+#include <linux/crash_stop.h>
 
 #include <asm/atomic.h>
 #include <asm/current.h>
@@ -66,6 +67,7 @@ static volatile struct call_data_struct 
 
 #define IPI_CALL_FUNC          0
 #define IPI_CPU_STOP           1
+#define IPI_CRASH_STOP         2
 
 /* This needs to be cacheline aligned because it is written to by *other* 
CPUs.  */
 static DEFINE_PER_CPU(u64, ipi_operation) ____cacheline_aligned;
@@ -156,6 +158,16 @@ handle_IPI (int irq, void *dev_id)
                                stop_this_cpu();
                                break;
 
+#ifdef CONFIG_CRASH_STOP_SUPPORTED
+                             case IPI_CRASH_STOP:
+                               {
+                                       extern void smp_crash_stop_interrupt(
+                                                   struct pt_regs *regs);
+                                       
smp_crash_stop_interrupt(get_irq_regs());
+                               }
+                               break;
+#endif /* CONFIG_CRASH_STOP_SUPPORTED */
+
                              default:
                                printk(KERN_CRIT "Unknown IPI on CPU %d: 
%lu\n", this_cpu, which);
                                break;
@@ -379,3 +391,26 @@ setup_profiling_timer (unsigned int mult
 {
        return -EINVAL;
 }
+
+#ifdef CONFIG_CRASH_STOP_SUPPORTED
+void
+cs_arch_send_ipi(int cpu)
+{
+       send_IPI_single(cpu, IPI_CRASH_STOP);
+}
+
+void
+cs_arch_send_nmi(int cpu)
+{
+       set_mb(cs_arch_monarch_cpu, smp_processor_id());
+       platform_send_ipi(cpu, 0, IA64_IPI_DM_INIT, 0);
+}
+
+void
+smp_crash_stop_interrupt(struct pt_regs *regs)
+{
+       struct pt_regs *old_regs = set_irq_regs(regs);
+       cs_common_ipi();
+       set_irq_regs(old_regs);
+}
+#endif /* CONFIG_CRASH_STOP_SUPPORTED */
-
To unsubscribe from this list: send the line "unsubscribe linux-arch" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to