|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [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 |