]> xenbits.xensource.com Git - legacy/linux-2.6.18-xen.git/commitdiff
xen/evtchn: clear secondary CPUs' cpu_evtchn_mask[] after restore
authorKeir Fraser <keir@xen.org>
Tue, 16 Nov 2010 11:31:19 +0000 (11:31 +0000)
committerKeir Fraser <keir@xen.org>
Tue, 16 Nov 2010 11:31:19 +0000 (11:31 +0000)
To bind all event channels to CPU#0, it is not sufficient to set all
of its cpu_evtchn_mask[] bits; all other CPUs also need to get their
bits cleared. Otherwise, evtchn_do_upcall() will start handling
interrupts on CPUs they're not intended to run on, which can be
particularly bad for per-CPU ones.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Keir Fraser <keir@xen.org>
drivers/xen/core/evtchn.c

index 2024c0843b9b2675a31546df2e02b8ba719e4ec1..b15b94e1990199a3a18735c6881f56027a266e43 100644 (file)
@@ -161,7 +161,10 @@ static void init_evtchn_cpu_bindings(void)
                set_native_irq_info(i, cpumask_of_cpu(0));
 
        memset(cpu_evtchn, 0, sizeof(cpu_evtchn));
-       memset(cpu_evtchn_mask[0], ~0, sizeof(cpu_evtchn_mask[0]));
+       for_each_possible_cpu(i)
+               memset(cpu_evtchn_mask[i],
+                      (i == 0) ? ~0 : 0,
+                      sizeof(cpu_evtchn_mask[i]));
 }
 
 static inline unsigned int cpu_from_evtchn(unsigned int evtchn)