|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] x86: fix boot-time watchdog test.
# HG changeset patch
# User Tim Deegan <Tim.Deegan@xxxxxxxxxx>
# Date 1309248973 -3600
# Node ID 6c7a23e08a041a1943b60ed0c4473112aa15c91f
# Parent c2c12b2dafb5b1d3bfcc4c05a60ca4f9051c90e7
x86: fix boot-time watchdog test.
Since the perf counter that the LAPIC NMI watchdog uses only
runs while the core isn't halted, and all APs are idle at
this point in the boot process, it's possible that remote
CPUs won't see any NMIs during the 10-tick waiting period.
Force all CPUs to busy-wait so we know the timers are running.
Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx>
---
diff -r c2c12b2dafb5 -r 6c7a23e08a04 xen/arch/x86/nmi.c
--- a/xen/arch/x86/nmi.c Tue Jun 28 09:13:53 2011 +0100
+++ b/xen/arch/x86/nmi.c Tue Jun 28 09:16:13 2011 +0100
@@ -95,6 +95,11 @@
(P4_CCCR_OVF_PMI0|P4_CCCR_THRESHOLD(15)|P4_CCCR_COMPLEMENT| \
P4_CCCR_COMPARE|P4_CCCR_REQUIRED|P4_CCCR_ESCR_SELECT(4)|P4_CCCR_ENABLE)
+static void __init wait_for_nmis(void *p)
+{
+ mdelay((10*1000)/nmi_hz); /* wait 10 ticks */
+}
+
int __init check_nmi_watchdog (void)
{
static unsigned int __initdata prev_nmi_count[NR_CPUS];
@@ -108,7 +113,12 @@
for_each_online_cpu ( cpu )
prev_nmi_count[cpu] = nmi_count(cpu);
local_irq_enable();
- mdelay((10*1000)/nmi_hz); /* wait 10 ticks */
+
+ /* Wait for 10 ticks. Busy-wait on all CPUs: the LAPIC counter that
+ * the NMI watchdog uses only runs while the core's not halted */
+ if ( nmi_watchdog == NMI_LOCAL_APIC )
+ smp_call_function(wait_for_nmis, NULL, 0);
+ wait_for_nmis(NULL);
for_each_online_cpu ( cpu )
{
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-unstable] x86: fix boot-time watchdog test.,
Xen patchbot-unstable <=
|
|
|
|
|