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

[Xen-changelog] [linux-2.6.18-xen] xen/evtchn: clear secondary CPUs' cpu_evtchn_mask[] after restore



# HG changeset patch
# User Keir Fraser <keir@xxxxxxx>
# Date 1289907079 0
# Node ID 7de7453dee36455d418f8bb8092a329c662b126a
# Parent  f7dde31efff3be20157ea08bb15126aee7a8d4c2
xen/evtchn: clear secondary CPUs' cpu_evtchn_mask[] after restore

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@xxxxxxxxxx>
Signed-off-by: Keir Fraser <keir@xxxxxxx>
---
 drivers/xen/core/evtchn.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletion(-)

diff -r f7dde31efff3 -r 7de7453dee36 drivers/xen/core/evtchn.c
--- a/drivers/xen/core/evtchn.c Mon Nov 15 09:32:57 2010 +0000
+++ b/drivers/xen/core/evtchn.c Tue Nov 16 11:31:19 2010 +0000
@@ -161,7 +161,10 @@ static void init_evtchn_cpu_bindings(voi
                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)

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

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