[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [win-pv-devel] FW: [PATCH 2/3] Attempt to reset event channel ABI to 2-Layer
> -----Original Message----- > From: win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx [mailto:win-pv-devel- > bounces@xxxxxxxxxxxxxxxxxxxx] On Behalf Of Owen Smith > Sent: 25 February 2015 10:30 > To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx > Subject: [win-pv-devel] FW: [PATCH 2/3] Attempt to reset event channel ABI > to 2-Layer > > Sent to wrong address! I'm afraid this is mangled. Best to send again. Paul > > > -----Original Message----- > > From: Owen Smith [mailto:owen.smith@xxxxxxxxxx] > > Sent: 24 February 2015 18:05 > > To: win-pv-devel@xxxxxxxxxxxxxxxxxxx > > Cc: Owen Smith > > Subject: [PATCH 2/3] Attempt to reset event channel ABI to 2-Layer > > > > Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> > > --- > > src/xencrsh/evtchn.c | 96 > > ++++++++++++++++++++++++++++++++++++++++++++++++++++ > > src/xencrsh/evtchn.h | 19 +++++++++++ > > src/xencrsh/store.c | 33 +++++++++++++++--- > > 3 files changed, 144 insertions(+), 4 deletions(-) > > > > diff --git a/src/xencrsh/evtchn.c b/src/xencrsh/evtchn.c index > > b0b5b93..ecf100b 100644 > > --- a/src/xencrsh/evtchn.c > > +++ b/src/xencrsh/evtchn.c > > @@ -87,6 +87,102 @@ fail1: > > } > > > > NTSTATUS > > +EventChannelReset( > > + VOID > > + ) > > +{ > > + struct evtchn_reset op; > > + LONG_PTR rc; > > + NTSTATUS status; > > + > > + op.dom = DOMID_SELF; > > + > > + rc = EventChannelOp(EVTCHNOP_reset, &op); > > + > > + if (rc < 0) { > > + ERRNO_TO_STATUS(-rc, status); > > + goto fail1; > > + } > > + > > + return STATUS_SUCCESS; > > + > > +fail1: > > + LogError("fail1 (%08x)\n", status); > > + > > + return status; > > +} > > + > > +NTSTATUS > > +EventChannelBindInterDomain( > > + IN USHORT RemoteDomain, > > + IN ULONG RemotePort, > > + OUT PULONG LocalPort > > + ) > > +{ > > + struct evtchn_bind_interdomain op; > > + LONG_PTR rc; > > + NTSTATUS status; > > + > > + op.remote_dom = RemoteDomain, > > + op.remote_port = RemotePort; > > + > > + rc = EventChannelOp(EVTCHNOP_bind_interdomain, &op); > > + > > + if (rc < 0) { > > + ERRNO_TO_STATUS(-rc, status); > > + goto fail1; > > + } > > + > > + *LocalPort = op.local_port; > > + > > + return STATUS_SUCCESS; > > + > > +fail1: > > + LogError("fail1 (%08x)\n", status); > > + > > + return status; > > +} > > + > > +NTSTATUS > > +EventChannelQueryInterDomain( > > + IN ULONG LocalPort, > > + OUT PUSHORT RemoteDomain, > > + OUT PULONG RemotePort > > + ) > > +{ > > + struct evtchn_status op; > > + LONG_PTR rc; > > + NTSTATUS status; > > + > > + op.dom = DOMID_SELF; > > + op.port = LocalPort; > > + > > + rc = EventChannelOp(EVTCHNOP_status, &op); > > + > > + if (rc < 0) { > > + ERRNO_TO_STATUS(-rc, status); > > + goto fail1; > > + } > > + > > + status = STATUS_INVALID_PARAMETER; > > + if (op.status != EVTCHNSTAT_interdomain) > > + goto fail2; > > + > > + *RemoteDomain = op.u.interdomain.dom; > > + *RemotePort = op.u.interdomain.port; > > + > > + return STATUS_SUCCESS; > > + > > +fail2: > > + LogError("fail2\n"); > > + > > +fail1: > > + LogError("fail1 (%08x)\n", status); > > + > > + return status; > > +} > > + > > +NTSTATUS > > EventChannelAllocate( > > IN ULONG Domain, > > OUT PULONG LocalPort > > diff --git a/src/xencrsh/evtchn.h b/src/xencrsh/evtchn.h index > > 2fa3812..9540bd8 100644 > > --- a/src/xencrsh/evtchn.h > > +++ b/src/xencrsh/evtchn.h > > @@ -42,6 +42,25 @@ EventChannelSend( > > ); > > > > NTSTATUS > > +EventChannelReset( > > + VOID > > + ); > > + > > +NTSTATUS > > +EventChannelBindInterDomain( > > + IN USHORT RemoteDomain, > > + IN ULONG RemotePort, > > + OUT PULONG LocalPort > > + ); > > + > > +NTSTATUS > > +EventChannelQueryInterDomain( > > + IN ULONG LocalPort, > > + OUT PUSHORT RemoteDomain, > > + OUT PULONG RemotePort > > + ); > > + > > +NTSTATUS > > EventChannelAllocate( > > IN ULONG Domain, > > OUT PULONG LocalPort > > diff --git a/src/xencrsh/store.c b/src/xencrsh/store.c index > d474d5e..163dcc5 > > 100644 > > --- a/src/xencrsh/store.c > > +++ b/src/xencrsh/store.c > > @@ -1063,7 +1063,10 @@ NTSTATUS > > StoreInitialize() > > { > > ULONGLONG Mfn; > > - ULONGLONG Port; > > + ULONGLONG Value; > > + ULONG LocalPort; > > + ULONG RemotePort; > > + USHORT RemoteDomain; > > PHYSICAL_ADDRESS PhysAddr; > > NTSTATUS Status; > > struct xenstore_domain_interface* StoreRingPtr; @@ -1071,12 > +1074,34 > > @@ StoreInitialize() > > InitializeListHead(&StoreContext.SubmittedList); > > InitializeListHead(&StoreContext.PendingList); > > > > - Status = HvmGetParameter(HVM_PARAM_STORE_EVTCHN, &Port); > > + Status = HvmGetParameter(HVM_PARAM_STORE_EVTCHN, &Value); > > if (!NT_SUCCESS(Status)) > > goto fail1; > > > > - LogVerbose("HVM_PARAM_STORE_EVTCHN = %08x\n", (ULONG)Port); > > - StoreContext.Port = (evtchn_port_t)Port; > > + LocalPort = (ULONG)Value; > > + > > + LogVerbose("OLD HVM_PARAM_STORE_EVTCHN = %08x\n", > LocalPort); > > + > > + Status = EventChannelQueryInterDomain(LocalPort, > > + &RemoteDomain, > > + &RemotePort); > > + LogTrace("EventChannelQueryInterDomain(&u) (%08x) %u:%u\n", > > + LocalPort, Status, RemoteDomain, RemotePort); > > + > > + Status = EventChannelReset(); > > + LogTrace("EventChannelReset() (%08x)\n", Status); > > + > > + Status = EventChannelBindInterDomain(RemoteDomain, > > + RemotePort, > > + &LocalPort); > > + LogTrace("EventChannelBindInterDomain(%u:%u) (%08x) %u\n", > > + RemoteDomain, RemotePort, Status, LocalPort); > > + > > + Value = LocalPort; > > + Status = HvmSetParameter(HVM_PARAM_STORE_EVTCHN, Value); > > + LogTrace("HvmSetParameter(STORE_EVTCHN, %u) (%08x)\n", Value, > > + Status); > > + > > + StoreContext.Port = (evtchn_port_t)LocalPort; > > > > Status = HvmGetParameter(HVM_PARAM_STORE_PFN, &Mfn); > > if (!NT_SUCCESS(Status)) > > -- > > 1.9.4.msysgit.1 > > > _______________________________________________ > win-pv-devel mailing list > win-pv-devel@xxxxxxxxxxxxxxxxxxxx > http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel _______________________________________________ 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 |