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>
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)