[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |