From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH for 4.6 v4 1/3] libxc: introduce xc_domain_getvnuma Date: Fri, 11 Sep 2015 14:50:07 +0100 Message-ID: <1441979409-3064-2-git-send-email-wei.liu2@citrix.com> References: <1441979409-3064-1-git-send-email-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZaOiU-0008A6-Ub for xen-devel@lists.xenproject.org; Fri, 11 Sep 2015 13:50:15 +0000 In-Reply-To: <1441979409-3064-1-git-send-email-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Xen-devel Cc: Wei Liu , Ian Jackson , Ian Campbell List-Id: xen-devel@lists.xenproject.org A simple wrapper for XENMEM_get_vnumainfo. Signed-off-by: Wei Liu Acked-by: Ian Campbell --- v4: rebase on top of staging --- tools/libxc/include/xenctrl.h | 18 +++++++++++++++ tools/libxc/xc_domain.c | 53 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h index e019474..3482544 100644 --- a/tools/libxc/include/xenctrl.h +++ b/tools/libxc/include/xenctrl.h @@ -1287,6 +1287,24 @@ int xc_domain_setvnuma(xc_interface *xch, unsigned int *vdistance, unsigned int *vcpu_to_vnode, unsigned int *vnode_to_pnode); +/* + * Retrieve vnuma configuration + * domid: IN, target domid + * nr_vnodes: IN/OUT, number of vnodes, not NULL + * nr_vmemranges: IN/OUT, number of vmemranges, not NULL + * nr_vcpus: IN/OUT, number of vcpus, not NULL + * vmemranges: OUT, an array which has length of nr_vmemranges + * vdistance: OUT, an array which has length of nr_vnodes * nr_vnodes + * vcpu_to_vnode: OUT, an array which has length of nr_vcpus + */ +int xc_domain_getvnuma(xc_interface *xch, + uint32_t domid, + uint32_t *nr_vnodes, + uint32_t *nr_vmemranges, + uint32_t *nr_vcpus, + xen_vmemrange_t *vmemrange, + unsigned int *vdistance, + unsigned int *vcpu_to_vnode); int xc_domain_soft_reset(xc_interface *xch, uint32_t domid); diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c index 62b2e45..e7278dd 100644 --- a/tools/libxc/xc_domain.c +++ b/tools/libxc/xc_domain.c @@ -2493,6 +2493,59 @@ int xc_domain_setvnuma(xc_interface *xch, return rc; } +int xc_domain_getvnuma(xc_interface *xch, + uint32_t domid, + uint32_t *nr_vnodes, + uint32_t *nr_vmemranges, + uint32_t *nr_vcpus, + xen_vmemrange_t *vmemrange, + unsigned int *vdistance, + unsigned int *vcpu_to_vnode) +{ + int rc; + DECLARE_HYPERCALL_BOUNCE(vmemrange, sizeof(*vmemrange) * *nr_vmemranges, + XC_HYPERCALL_BUFFER_BOUNCE_OUT); + DECLARE_HYPERCALL_BOUNCE(vdistance, sizeof(*vdistance) * + *nr_vnodes * *nr_vnodes, + XC_HYPERCALL_BUFFER_BOUNCE_OUT); + DECLARE_HYPERCALL_BOUNCE(vcpu_to_vnode, sizeof(*vcpu_to_vnode) * *nr_vcpus, + XC_HYPERCALL_BUFFER_BOUNCE_OUT); + + struct xen_vnuma_topology_info vnuma_topo; + + if ( xc_hypercall_bounce_pre(xch, vmemrange) || + xc_hypercall_bounce_pre(xch, vdistance) || + xc_hypercall_bounce_pre(xch, vcpu_to_vnode) ) + { + rc = -1; + errno = ENOMEM; + goto vnumaget_fail; + } + + set_xen_guest_handle(vnuma_topo.vmemrange.h, vmemrange); + set_xen_guest_handle(vnuma_topo.vdistance.h, vdistance); + set_xen_guest_handle(vnuma_topo.vcpu_to_vnode.h, vcpu_to_vnode); + + vnuma_topo.nr_vnodes = *nr_vnodes; + vnuma_topo.nr_vcpus = *nr_vcpus; + vnuma_topo.nr_vmemranges = *nr_vmemranges; + vnuma_topo.domid = domid; + vnuma_topo.pad = 0; + + rc = do_memory_op(xch, XENMEM_get_vnumainfo, &vnuma_topo, + sizeof(vnuma_topo)); + + *nr_vnodes = vnuma_topo.nr_vnodes; + *nr_vcpus = vnuma_topo.nr_vcpus; + *nr_vmemranges = vnuma_topo.nr_vmemranges; + + vnumaget_fail: + xc_hypercall_bounce_post(xch, vmemrange); + xc_hypercall_bounce_post(xch, vdistance); + xc_hypercall_bounce_post(xch, vcpu_to_vnode); + + return rc; +} int xc_domain_soft_reset(xc_interface *xch, uint32_t domid) -- 2.1.4