[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [win-pv-devel] [PATCH 1/3] Fix HvmGetParameter/HvmSetParameter



> -----Original Message-----
> From: win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx [mailto:win-pv-devel-
> bounces@xxxxxxxxxxxxxxxxxxxx] On Behalf Of Owen Smith
> Sent: 25 February 2015 15:05
> To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 1/3] Fix
> HvmGetParameter/HvmSetParameter
> 
> Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>

All 3 patches:

Acked-by: Paul Durrant <paul.durrant@xxxxxxxxxx>

...and applied. Thanks!

  Paul

> ---
>  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

_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.