[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 10/15] Simplify EVTCHN Unmask
Just use the hypercall if the event channel is pending. It's a lot safer than trying to avoid it. Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> --- src/xenbus/evtchn.c | 48 ++++-------------------------------------------- 1 file changed, 4 insertions(+), 44 deletions(-) diff --git a/src/xenbus/evtchn.c b/src/xenbus/evtchn.c index 453f9d6..e33a68e 100644 --- a/src/xenbus/evtchn.c +++ b/src/xenbus/evtchn.c @@ -493,9 +493,7 @@ EvtchnUnmask( { PXENBUS_EVTCHN_CONTEXT Context = Interface->Context; KIRQL Irql = PASSIVE_LEVEL; - BOOLEAN Pending; ULONG LocalPort; - ULONG Cpu; ASSERT3U(Channel->Magic, ==, XENBUS_EVTCHN_CHANNEL_MAGIC); @@ -504,59 +502,21 @@ EvtchnUnmask( ASSERT3U(KeGetCurrentIrql(), >=, DISPATCH_LEVEL); - Pending = FALSE; - if (!Channel->Active) goto done; LocalPort = Channel->LocalPort; - Pending = XENBUS_EVTCHN_ABI(PortUnmask, - &Context->EvtchnAbi, - LocalPort); - - if (!Pending) - goto done; - - // - // If we are in context of the upcall then use a hypercall - // to schedule the pending event. - // - if (InUpcall) { - (VOID) EventChannelUnmask(LocalPort); - - Pending = FALSE; - goto done; - } - - // - // If we are not unmasking on the same CPU to which the - // event channel is bound, then we need to use a hypercall - // to schedule the upcall on the correct CPU. - // - Cpu = KeGetCurrentProcessorNumber(); - - if (Channel->Cpu != Cpu) { - (VOID) EventChannelUnmask(LocalPort); - - Pending = FALSE; - goto done; - } - - if (Channel->Mask) - XENBUS_EVTCHN_ABI(PortMask, + if (XENBUS_EVTCHN_ABI(PortUnmask, &Context->EvtchnAbi, - LocalPort); - - XENBUS_EVTCHN_ABI(PortAck, - &Context->EvtchnAbi, - LocalPort); + LocalPort)) + (VOID) EventChannelUnmask(LocalPort); done: if (!InUpcall) KeReleaseSpinLock(&Channel->Lock, Irql); - return Pending; + return FALSE; } static NTSTATUS -- 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 |