[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |