[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH] Fix event channel unmasking for two-level ABI
The two-level ABI requires that an event is masked for the unmask hypercall to raise the event, so the test-and-clear operation in the guest basically means that pending events get stuck. The simple fix is to re-mask pending events before making the hypercall. This is unnecessary when the FIFO ABI is used, but it's safe. Hence this patch unconditionally re-masks pending events, regardless of ABI, before making the unmask hypercall. Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> --- src/xenbus/evtchn.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/xenbus/evtchn.c b/src/xenbus/evtchn.c index 63af079..3bb8d18 100644 --- a/src/xenbus/evtchn.c +++ b/src/xenbus/evtchn.c @@ -710,8 +710,16 @@ EvtchnUnmask( if (XENBUS_EVTCHN_ABI(PortUnmask, &Context->EvtchnAbi, - LocalPort)) + LocalPort)) { + // + // The event was pending so we must re-mask and use + // a hypercall to do the unmask and raise the event + // + XENBUS_EVTCHN_ABI(PortMask, + &Context->EvtchnAbi, + LocalPort); (VOID) EventChannelUnmask(LocalPort); + } done: if (!InUpcall) -- 2.1.1 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |