@@ -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,
@@ -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
};
@@ -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;
}
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@cloud.com> --- 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(-)