[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 09/11] tools/xc: Add `node` argument to xc_domain_claim_pages()
Add a node argument to make an exact-node claim. NUMA_NO_NODE means to make a regular any-node claim. No functional change. Signed-off-by: Alejandro Vallejo <alejandro.vallejo@xxxxxxxxx> --- tools/include/xenctrl.h | 1 + tools/libs/ctrl/xc_domain.c | 13 ++++++++++++- tools/libs/guest/xg_dom_x86.c | 8 +++++--- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h index 495598123133..2b63992e1246 100644 --- a/tools/include/xenctrl.h +++ b/tools/include/xenctrl.h @@ -1322,6 +1322,7 @@ int xc_domain_populate_physmap_exact(xc_interface *xch, int xc_domain_claim_pages(xc_interface *xch, uint32_t domid, + unsigned int node, unsigned long nr_pages); int xc_domain_memory_exchange_pages(xc_interface *xch, diff --git a/tools/libs/ctrl/xc_domain.c b/tools/libs/ctrl/xc_domain.c index 2ddc3f4f426d..f2c6eda875dc 100644 --- a/tools/libs/ctrl/xc_domain.c +++ b/tools/libs/ctrl/xc_domain.c @@ -20,6 +20,7 @@ */ #include "xc_private.h" +#include "xenguest.h" #include <xen/memory.h> #include <xen/hvm/hvm_op.h> @@ -1072,13 +1073,23 @@ int xc_domain_remove_from_physmap(xc_interface *xch, int xc_domain_claim_pages(xc_interface *xch, uint32_t domid, + unsigned int node, unsigned long nr_pages) { int err; + unsigned int mem_flags = 0; + + if ( node != XC_NUMA_NO_NODE ) + { + if ( node >= 0xFF ) + return -EINVAL; + mem_flags = XENMEMF_exact_node(node); + } + struct xen_memory_reservation reservation = { .nr_extents = nr_pages, .extent_order = 0, - .mem_flags = 0, /* no flags */ + .mem_flags = mem_flags, .domid = domid }; diff --git a/tools/libs/guest/xg_dom_x86.c b/tools/libs/guest/xg_dom_x86.c index cba01384ae75..ac05106a8c1c 100644 --- a/tools/libs/guest/xg_dom_x86.c +++ b/tools/libs/guest/xg_dom_x86.c @@ -1199,6 +1199,7 @@ static int meminit_pv(struct xc_dom_image *dom) if ( dom->claim_enabled ) { rc = xc_domain_claim_pages(dom->xch, dom->guest_domid, + XC_NUMA_NO_NODE, dom->total_pages); if ( rc ) return rc; @@ -1327,7 +1328,8 @@ static int meminit_pv(struct xc_dom_image *dom) /* Ensure no unclaimed pages are left unused. * OK to call if hadn't done the earlier claim call. */ - xc_domain_claim_pages(dom->xch, dom->guest_domid, 0 /* cancel claim */); + xc_domain_claim_pages(dom->xch, dom->guest_domid, XC_NUMA_NO_NODE, + 0 /* cancel claim */); return rc; } @@ -1442,7 +1444,7 @@ static int meminit_hvm(struct xc_dom_image *dom) * allocated is pointless. */ if ( claim_enabled ) { - rc = xc_domain_claim_pages(xch, domid, + rc = xc_domain_claim_pages(xch, domid, XC_NUMA_NO_NODE, target_pages - dom->vga_hole_size); if ( rc != 0 ) { @@ -1642,7 +1644,7 @@ static int meminit_hvm(struct xc_dom_image *dom) out: /* ensure no unclaimed pages are left unused */ - xc_domain_claim_pages(xch, domid, 0 /* cancels the claim */); + xc_domain_claim_pages(xch, domid, XC_NUMA_NO_NODE, 0 /* cancel claim */); return rc; } -- 2.48.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |