[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] FW: [PATCH 1/3] Fix HvmGetParameter/HvmSetParameter
Sent to wrong address! > -----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 1/3] Fix HvmGetParameter/HvmSetParameter > > Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> > --- > src/xencrsh/hvm.c | 64 ++++++++++++++++++++++++++++++++++--------- > ---------- > src/xencrsh/hvm.h | 4 ++-- > src/xencrsh/store.c | 8 +++---- > 3 files changed, 47 insertions(+), 29 deletions(-) > > diff --git a/src/xencrsh/hvm.c b/src/xencrsh/hvm.c index dcc72b6..db12256 > 100644 > --- a/src/xencrsh/hvm.c > +++ b/src/xencrsh/hvm.c > @@ -298,46 +298,64 @@ HvmOp( > > NTSTATUS > HvmGetParameter( > - IN ULONG Param, > - OUT PULONG_PTR Value > + IN ULONG Param, > + OUT PULONGLONG Value > ) > { > - struct xen_hvm_param a; > - LONG_PTR rc; > + struct xen_hvm_param op; > + LONG_PTR rc; > + NTSTATUS status; > > - a.domid = DOMID_SELF; > - a.index = Param; > - a.value = 0xf001dead; > + op.domid = DOMID_SELF; > + op.index = Param; > + op.value = 0xf001dead; > > - rc = HvmOp(HVMOP_get_param, &a); > - if (rc < 0) { > - return STATUS_UNSUCCESSFUL; > - } > + rc = HvmOp(HVMOP_get_param, &op); > + if (rc < 0) > + goto fail1; > > /* Horrible hack to cope with the transition from > return parameters through the hypercall return > value to returning them through an in-memory > structure. */ > - if (a.value != 0xf001dead) > - *Value = (ULONG_PTR)a.value; > + if (op.value != 0xf001dead) > + *Value = (ULONG_PTR)op.value; > else > *Value = (ULONG_PTR)rc; > > return STATUS_SUCCESS; > + > +fail1: > + ERRNO_TO_STATUS(-rc, status); > + LogError("fail1 (%08x)\n", status); > + > + return status; > } > > NTSTATUS > HvmSetParameter( > - IN ULONG Param, > - IN ULONG_PTR Value > + IN ULONG Param, > + IN ULONGLONG Value > ) > { > - struct xen_hvm_param a; > - a.domid = DOMID_SELF; > - a.index = Param; > - a.value = Value; > - if (HvmOp(HVMOP_set_param, &a) == 0) > - return STATUS_UNSUCCESSFUL; > - else > - return STATUS_SUCCESS; > + struct xen_hvm_param op; > + LONG_PTR rc; > + NTSTATUS status; > + > + op.domid = DOMID_SELF; > + op.index = Param; > + op.value = Value; > + > + rc = HvmOp(HVMOP_set_param, &op); > + > + if (rc < 0) > + goto fail1; > + > + return STATUS_SUCCESS; > + > +fail1: > + ERRNO_TO_STATUS(-rc, status); > + LogError("fail1 (%08x)\n", status); > + > + return status; > } > diff --git a/src/xencrsh/hvm.h b/src/xencrsh/hvm.h index 8784fbc..9b8f1df > 100644 > --- a/src/xencrsh/hvm.h > +++ b/src/xencrsh/hvm.h > @@ -50,13 +50,13 @@ HvmAddToPhysMap( > NTSTATUS > HvmGetParameter( > IN ULONG Param, > - OUT PULONG_PTR Value > + OUT PULONGLONG Value > ); > > NTSTATUS > HvmSetParameter( > IN ULONG Param, > - IN ULONG_PTR Value > + IN ULONGLONG Value > ); > > #endif // _XENVBD_HVM_H > diff --git a/src/xencrsh/store.c b/src/xencrsh/store.c index f182bf2..d474d5e > 100644 > --- a/src/xencrsh/store.c > +++ b/src/xencrsh/store.c > @@ -1062,8 +1062,8 @@ __Round( > NTSTATUS > StoreInitialize() > { > - ULONG_PTR Mfn; > - ULONG_PTR Port; > + ULONGLONG Mfn; > + ULONGLONG Port; > PHYSICAL_ADDRESS PhysAddr; > NTSTATUS Status; > struct xenstore_domain_interface* StoreRingPtr; @@ -1082,7 +1082,7 > @@ StoreInitialize() > if (!NT_SUCCESS(Status)) > goto fail2; > > - LogVerbose("HVM_PARAM_STORE_PFN = %p\n", (PVOID)Mfn); > + LogVerbose("HVM_PARAM_STORE_PFN = %p\n", > (PVOID)(ULONG_PTR)Mfn); > StoreRingPtr = __Round(&__StoreRingSection[0], PAGE_SIZE); > PhysAddr = MmGetPhysicalAddress(StoreRingPtr); > > @@ -1095,7 +1095,7 @@ StoreInitialize() > LogWarning("Page Swizzle to map store ring succeeded, but didn't > actually do anything!\n"); > } else { > LogVerbose("Page Swizzle failed\n"); > - PhysAddr.QuadPart = (ULONGLONG)Mfn << PAGE_SHIFT; > + PhysAddr.QuadPart = Mfn << PAGE_SHIFT; > StoreRingPtr = MmMapIoSpace(PhysAddr, PAGE_SIZE, MmCached); > if (StoreRingPtr == NULL) > goto fail3; > -- > 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |