|
[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 |