Index: sys/arch/amd64/amd64/machdep.c
===================================================================
RCS file: /cvsroot/src/sys/arch/amd64/amd64/machdep.c,v
retrieving revision 1.163
diff -p -u -r1.163 machdep.c
--- sys/arch/amd64/amd64/machdep.c 10 Aug 2011 11:39:45 -0000 1.163
+++ sys/arch/amd64/amd64/machdep.c 11 Aug 2011 10:18:04 -0000
@@ -719,11 +719,7 @@ haltsys:
#endif /* XEN */
}
-#ifdef XEN
- xen_broadcast_ipi(XEN_IPI_HALT);
-#else /* XEN */
- x86_broadcast_ipi(X86_IPI_HALT);
-#endif
+ cpu_broadcast_halt();
if (howto & RB_HALT) {
#if NACPICA > 0
Index: sys/arch/i386/i386/machdep.c
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/i386/machdep.c,v
retrieving revision 1.707
diff -p -u -r1.707 machdep.c
--- sys/arch/i386/i386/machdep.c 10 Aug 2011 06:38:02 -0000 1.707
+++ sys/arch/i386/i386/machdep.c 11 Aug 2011 10:18:10 -0000
@@ -955,11 +955,7 @@ haltsys:
}
#ifdef MULTIPROCESSOR
-#ifdef XEN
- xen_broadcast_ipi(XEN_IPI_HALT);
-#else /* XEN */
- x86_broadcast_ipi(X86_IPI_HALT);
-#endif /* XEN */
+ cpu_broadcast_halt();
#endif /* MULTIPROCESSOR */
if (howto & RB_HALT) {
Index: sys/arch/x86/include/cpu.h
===================================================================
RCS file: /cvsroot/src/sys/arch/x86/include/cpu.h,v
retrieving revision 1.36
diff -p -u -r1.36 cpu.h
--- sys/arch/x86/include/cpu.h 10 Aug 2011 06:40:35 -0000 1.36
+++ sys/arch/x86/include/cpu.h 11 Aug 2011 10:18:14 -0000
@@ -314,6 +314,8 @@ void cpu_boot_secondary_processors(void)
void cpu_init_idle_lwps(void);
void cpu_init_msrs(struct cpu_info *, bool);
void cpu_load_pmap(struct pmap *);
+void cpu_broadcast_halt(void);
+void cpu_kick(struct cpu_info *);
extern uint32_t cpus_attached;
Index: sys/arch/x86/x86/cpu.c
===================================================================
RCS file: /cvsroot/src/sys/arch/x86/x86/cpu.c,v
retrieving revision 1.90
diff -p -u -r1.90 cpu.c
--- sys/arch/x86/x86/cpu.c 29 Jul 2011 21:21:43 -0000 1.90
+++ sys/arch/x86/x86/cpu.c 11 Aug 2011 10:18:15 -0000
@@ -1210,3 +1210,23 @@ cpu_load_pmap(struct pmap *pmap)
lcr3(pmap_pdirpa(pmap, 0));
#endif /* PAE */
}
+
+/*
+ * Notify all other cpus to halt.
+ */
+
+void
+cpu_broadcast_halt(struct cpu_info *ci)
+{
+ x86_broadcast_ipi(X86_IPI_HALT);
+}
+
+/*
+ * Send a dummy ipi to a cpu to force it to run splraise()/spllower()
+ */
+
+void
+cpu_kick(struct cpu_info *ci)
+{
+ x86_send_ipi(ci, 0);
+}
Index: sys/arch/x86/x86/x86_machdep.c
===================================================================
RCS file: /cvsroot/src/sys/arch/x86/x86/x86_machdep.c,v
retrieving revision 1.54
diff -p -u -r1.54 x86_machdep.c
--- sys/arch/x86/x86/x86_machdep.c 10 Aug 2011 11:39:45 -0000 1.54
+++ sys/arch/x86/x86/x86_machdep.c 11 Aug 2011 10:18:18 -0000
@@ -205,11 +205,7 @@ cpu_need_resched(struct cpu_info *ci, in
if (ci == cur)
return;
if (x86_cpu_idle_ipi != false) {
-#ifdef XEN
- xen_send_ipi(ci, XEN_IPI_KICK);
-#else /* XEN */
- x86_send_ipi(ci, 0);
-#endif /* XEN */
+ cpu_kick(ci);
}
return;
}
@@ -231,11 +227,7 @@ cpu_need_resched(struct cpu_info *ci, in
return;
}
if ((flags & RESCHED_IMMED) != 0) {
-#ifdef XEN
- xen_send_ipi(ci, XEN_IPI_KICK);
-#else /* XEN */
- x86_send_ipi(ci, 0);
-#endif /* XEN */
+ cpu_kick(ci);
}
}
@@ -246,11 +238,7 @@ cpu_signotify(struct lwp *l)
KASSERT(kpreempt_disabled());
aston(l, X86_AST_GENERIC);
if (l->l_cpu != curcpu())
-#ifdef XEN
- xen_send_ipi(l->l_cpu, XEN_IPI_KICK);
-#else /* XEN */
- x86_send_ipi(l->l_cpu, 0);
-#endif /* XEN */
+ cpu_kick(l->l_cpu);
}
void
Index: sys/arch/xen/x86/cpu.c
===================================================================
RCS file: /cvsroot/src/sys/arch/xen/x86/cpu.c,v
retrieving revision 1.60
diff -p -u -r1.60 cpu.c
--- sys/arch/xen/x86/cpu.c 16 Jul 2011 14:46:18 -0000 1.60
+++ sys/arch/xen/x86/cpu.c 11 Aug 2011 10:18:19 -0000
@@ -1177,3 +1177,23 @@ cpu_load_pmap(struct pmap *pmap)
}
#endif /* __x86_64__ */
}
+
+/*
+ * Notify all other cpus to halt.
+ */
+
+void
+cpu_broadcast_halt(void)
+{
+ xen_broadcast_ipi(XEN_IPI_HALT);
+}
+
+/*
+ * Send a dummy ipi to a cpu.
+ */
+
+void
+cpu_kick(struct cpu_info *ci)
+{
+ xen_send_ipi(ci, XEN_IPI_KICK);
+}