• Ian Campbell's avatar
    xen: ensure that all event channels start off bound to VCPU 0 · b0097ade
    Ian Campbell authored
    All event channels startbound to VCPU 0 so ensure that cpu_evtchn_mask
    is initialised to reflect this. Otherwise there is a race after registering an
    event channel but before the affinity is explicitly set where the event channel
    can be delivered. If this happens then the event channel remains pending in the
    L1 (evtchn_pending) array but is cleared in L2 (evtchn_pending_sel), this means
    the event channel cannot be reraised until another event channel happens to
    trigger the same L2 entry on that VCPU.
    
    sizeof(cpu_evtchn_mask(0))==sizeof(unsigned long*) which is not correct, and
    causes only the first 32 or 64 event channels (depending on architecture) to be
    initially bound to VCPU0. Use sizeof(struct cpu_evtchn_s) instead.
    Signed-off-by: default avatarIan Campbell <ian.campbell@citrix.com>
    Cc: Jeremy Fitzhardinge <jeremy@goop.org>
    Cc: stable@kernel.org
    b0097ade
events.c 23.4 KB