On 11/15/2010 08:56 AM, Jan Beulich wrote:
> 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.
Yes, that would be awkward.
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
>
> --- a/drivers/xen/core/evtchn.c
> +++ b/drivers/xen/core/evtchn.c
> @@ -161,7 +161,8 @@ 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, sizeof(cpu_evtchn_mask[i]));
-!i? Really? Golf-clap and all, but I think something a bit more
explicit would be better ;)
J
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|