[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/4] libxc: report how much memory a domain has on each NUMA node
On 05/03/14 14:36, Dario Faggioli wrote: > by means of a new interface: xc_domain_numainfo(). > > The caller is expected to allocate an array for the call to fill, > with the results of the XEN_DOMCTL_numainfo hypercall. The size of > the array is also passed to the function, which then returns back > the number of elements that have actually been filled by Xen. > > Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx> > --- > tools/libxc/xc_domain.c | 28 ++++++++++++++++++++++++++++ > tools/libxc/xenctrl.h | 18 ++++++++++++++++++ > 2 files changed, 46 insertions(+) > > diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c > index 369c3f3..a2b3c07 100644 > --- a/tools/libxc/xc_domain.c > +++ b/tools/libxc/xc_domain.c > @@ -362,6 +362,34 @@ int xc_domain_getinfo(xc_interface *xch, > return nr_doms; > } > > +int xc_domain_numainfo(xc_interface *xch, uint32_t domid, > + int *max_nodes, uint64_t *memkbs) max_nodes is an unsigned quantity. libxc is quite fast and loose with this, but lets not propage wrongness. > +{ > + DECLARE_DOMCTL; > + DECLARE_HYPERCALL_BOUNCE(memkbs, sizeof(uint64_t) * (*max_nodes), > + XC_HYPERCALL_BUFFER_BOUNCE_OUT); > + int ret = 0; Don't need the initialiser. > + > + if ( xc_hypercall_bounce_pre(xch, memkbs) ) > + { > + PERROR("Could not allocate bounce buffer for > DOMCTL_domain_numainfo"); > + return -1; > + } > + > + domctl.cmd = XEN_DOMCTL_numainfo; > + domctl.domain = (domid_t)domid; > + domctl.u.numainfo.max_node_index = *max_nodes - 1; > + set_xen_guest_handle(domctl.u.numainfo.memkb_on_node, memkbs); > + > + ret = do_domctl(xch, &domctl); > + > + *max_nodes = domctl.u.numainfo.max_node_index + 1; If the domctl fails, this should not be written back to *max_nodes. ~Andrew > + > + xc_hypercall_bounce_post(xch, memkbs); > + > + return ret; > +} > + > int xc_domain_getinfolist(xc_interface *xch, > uint32_t first_domain, > unsigned int max_domains, > diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h > index 13f816b..845d183 100644 > --- a/tools/libxc/xenctrl.h > +++ b/tools/libxc/xenctrl.h > @@ -657,6 +657,24 @@ int xc_domain_getinfolist(xc_interface *xch, > xc_domaininfo_t *info); > > /** > + * This function tells how much memory a domain has allocated on each > + * online NUMA node of the host. The information is stored in an array > + * that the caller provides, along with its size. The function updates > + * the latter parameter with the number of elements in the array that > + * have been actually filled. > + * > + * @param xch a handle to an open hypervisor interface > + * @param domid the domain id for which we want the information > + * @param max_nodes as an input, the size of the memkbs array; as an > + * output, the number of filled elements in it > + * @param memkbs an array with, in the i-eth element, the memory, in > + * Kb, allocated for the domain on the i-eth NUMA node > + * @return 0 on success, -1 on failure > + */ > +int xc_domain_numainfo(xc_interface *xch, uint32_t domid, > + int *max_nodes, uint64_t *memkbs); > + > +/** > * This function set p2m for broken page > * &parm xch a handle to an open hypervisor interface > * @parm domid the domain id which broken page belong to > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |