[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 3/4] x86/nmi: wait for all CPUs in check_nmi_watchdog()

The counting of a CPUs NMIs in check_nmi_watchdog() is only reliable
if all CPUs have been spinning for 5 or more ticks.  There may be
delays in waking other CPUs from deep power states that can mean that
when the counts are checked CPUs haven't run for long enough.

Fix this by waiting for all CPUs to have delayed in wait_for_nmis().

Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
 xen/arch/x86/nmi.c |    4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/xen/arch/x86/nmi.c b/xen/arch/x86/nmi.c
index 07488da..4f330d8 100644
--- a/xen/arch/x86/nmi.c
+++ b/xen/arch/x86/nmi.c
@@ -136,9 +136,7 @@ int __init check_nmi_watchdog (void)
     /* 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);
+    on_selected_cpus(&cpu_online_map, wait_for_nmis, NULL, 1);
     for_each_online_cpu ( cpu )

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.