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

Re: [Xen-devel] [PATCH v3] x86/altp2m: Add a new hypercall to get the active altp2m index



Ping,

Any thoughts on this matter are appreciated.

Thanks,
Alex

On 07.06.2019 13:55, Alexandru Stefan ISAILA wrote:
> The patch adds a new lib xc function (xc_altp2m_get_vcpu_p2m_idx) that
> uses a new hvmop (HVMOP_altp2m_get_p2m_idx) to get the active altp2m
> index from a given vcpu.
> 
> Signed-off-by: Alexandru Isaila <aisaila@xxxxxxxxxxxxxxx>
> 
> ---
> Changes since V2:
>       - Update comment and title
>       - Remove redundant max_vcpu check.
> ---
>   tools/libxc/include/xenctrl.h   |  2 ++
>   tools/libxc/xc_altp2m.c         | 25 +++++++++++++++++++++++++
>   xen/arch/x86/hvm/hvm.c          | 23 +++++++++++++++++++++++
>   xen/include/public/hvm/hvm_op.h |  8 ++++++++
>   4 files changed, 58 insertions(+)
> 
> diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
> index 538007a6dc..87526af4b4 100644
> --- a/tools/libxc/include/xenctrl.h
> +++ b/tools/libxc/include/xenctrl.h
> @@ -1942,6 +1942,8 @@ int xc_altp2m_get_mem_access(xc_interface *handle, 
> uint32_t domid,
>   int xc_altp2m_change_gfn(xc_interface *handle, uint32_t domid,
>                            uint16_t view_id, xen_pfn_t old_gfn,
>                            xen_pfn_t new_gfn);
> +int xc_altp2m_get_vcpu_p2m_idx(xc_interface *handle, uint32_t domid,
> +                               uint32_t vcpuid, uint16_t *p2midx);
>   
>   /**
>    * Mem paging operations.
> diff --git a/tools/libxc/xc_altp2m.c b/tools/libxc/xc_altp2m.c
> index a86520c232..09dad0355e 100644
> --- a/tools/libxc/xc_altp2m.c
> +++ b/tools/libxc/xc_altp2m.c
> @@ -352,3 +352,28 @@ int xc_altp2m_get_mem_access(xc_interface *handle, 
> uint32_t domid,
>       xc_hypercall_buffer_free(handle, arg);
>       return rc;
>   }
> +
> +int xc_altp2m_get_vcpu_p2m_idx(xc_interface *handle, uint32_t domid,
> +                               uint32_t vcpuid, uint16_t *altp2m_idx)
> +{
> +    int rc;
> +
> +    DECLARE_HYPERCALL_BUFFER(xen_hvm_altp2m_op_t, arg);
> +
> +    arg = xc_hypercall_buffer_alloc(handle, arg, sizeof(*arg));
> +    if ( arg == NULL )
> +        return -1;
> +
> +    arg->version = HVMOP_ALTP2M_INTERFACE_VERSION;
> +    arg->cmd = HVMOP_altp2m_get_p2m_idx;
> +    arg->domain = domid;
> +    arg->u.get_vcpu_p2m_idx.vcpu_id = vcpuid;
> +
> +    rc = xencall2(handle->xcall, __HYPERVISOR_hvm_op, HVMOP_altp2m,
> +                 HYPERCALL_BUFFER_AS_ARG(arg));
> +    if ( !rc )
> +        *altp2m_idx = arg->u.get_vcpu_p2m_idx.altp2m_idx;
> +
> +    xc_hypercall_buffer_free(handle, arg);
> +    return rc;
> +}
> diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
> index 029eea3b85..4ee7e6ce47 100644
> --- a/xen/arch/x86/hvm/hvm.c
> +++ b/xen/arch/x86/hvm/hvm.c
> @@ -4500,6 +4500,7 @@ static int do_altp2m_op(
>       case HVMOP_altp2m_set_mem_access_multi:
>       case HVMOP_altp2m_get_mem_access:
>       case HVMOP_altp2m_change_gfn:
> +    case HVMOP_altp2m_get_p2m_idx:
>           break;
>   
>       default:
> @@ -4735,6 +4736,28 @@ static int do_altp2m_op(
>                       _gfn(a.u.change_gfn.old_gfn),
>                       _gfn(a.u.change_gfn.new_gfn));
>           break;
> +
> +    case HVMOP_altp2m_get_p2m_idx:
> +    {
> +        struct vcpu *v;
> +
> +        if ( !altp2m_active(d) )
> +        {
> +            rc = -EOPNOTSUPP;
> +            break;
> +        }
> +
> +        if ( (v = domain_vcpu(d, a.u.get_vcpu_p2m_idx.vcpu_id)) == NULL )
> +        {
> +            rc = -EINVAL;
> +            break;
> +        }
> +
> +        a.u.get_vcpu_p2m_idx.altp2m_idx = altp2m_vcpu_idx(v);
> +        rc = __copy_to_guest(arg, &a, 1) ? -EFAULT : 0;
> +        break;
> +    }
> +
>       default:
>           ASSERT_UNREACHABLE();
>       }
> diff --git a/xen/include/public/hvm/hvm_op.h b/xen/include/public/hvm/hvm_op.h
> index c6cd12f596..353f8034d9 100644
> --- a/xen/include/public/hvm/hvm_op.h
> +++ b/xen/include/public/hvm/hvm_op.h
> @@ -304,6 +304,11 @@ struct xen_hvm_altp2m_change_gfn {
>   typedef struct xen_hvm_altp2m_change_gfn xen_hvm_altp2m_change_gfn_t;
>   DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_change_gfn_t);
>   
> +struct xen_hvm_altp2m_get_vcpu_p2m_idx {
> +    uint32_t vcpu_id;
> +    uint16_t altp2m_idx;
> +};
> +
>   struct xen_hvm_altp2m_op {
>       uint32_t version;   /* HVMOP_ALTP2M_INTERFACE_VERSION */
>       uint32_t cmd;
> @@ -332,6 +337,8 @@ struct xen_hvm_altp2m_op {
>   #define HVMOP_altp2m_get_mem_access       12
>   /* Disable altp2m event notifications for a given VCPU */
>   #define HVMOP_altp2m_vcpu_disable_notify  13
> +/* Get the active vcpu p2m index */
> +#define HVMOP_altp2m_get_p2m_idx          14
>       domid_t domain;
>       uint16_t pad1;
>       uint32_t pad2;
> @@ -347,6 +354,7 @@ struct xen_hvm_altp2m_op {
>           struct xen_hvm_altp2m_set_mem_access_multi set_mem_access_multi;
>           struct xen_hvm_altp2m_suppress_ve          suppress_ve;
>           struct xen_hvm_altp2m_vcpu_disable_notify  disable_notify;
> +        struct xen_hvm_altp2m_get_vcpu_p2m_idx     get_vcpu_p2m_idx;
>           uint8_t pad[64];
>       } u;
>   };
> 
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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