[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxc: add xc_domain_memory_exchange_pages to wrap XENMEM_exchange
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1287418447 -3600 # Node ID 835b06768104fbd54c5e1ab4fbd06c690fa7a39a # Parent 5ec79c06b18a4d26d93faf74f39e8dc8d1d1800a libxc: add xc_domain_memory_exchange_pages to wrap XENMEM_exchange Generalised from exchange_page in xc_offline_page.c Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- tools/libxc/xc_domain.c | 31 +++++++++++++++++++++++++++++++ tools/libxc/xc_offline_page.c | 33 +++------------------------------ tools/libxc/xenctrl.h | 9 +++++++++ 3 files changed, 43 insertions(+), 30 deletions(-) diff -r 5ec79c06b18a -r 835b06768104 tools/libxc/xc_domain.c --- a/tools/libxc/xc_domain.c Mon Oct 18 16:54:42 2010 +0100 +++ b/tools/libxc/xc_domain.c Mon Oct 18 17:14:07 2010 +0100 @@ -728,6 +728,37 @@ int xc_domain_populate_physmap_exact(xc_ return err; } +int xc_domain_memory_exchange_pages(xc_interface *xch, + int domid, + unsigned long nr_in_extents, + unsigned int in_order, + xen_pfn_t *in_extents, + unsigned long nr_out_extents, + unsigned int out_order, + xen_pfn_t *out_extents) +{ + int rc; + + struct xen_memory_exchange exchange = { + .in = { + .nr_extents = nr_in_extents, + .extent_order = in_order, + .domid = domid + }, + .out = { + .nr_extents = nr_out_extents, + .extent_order = out_order, + .domid = domid + } + }; + set_xen_guest_handle(exchange.in.extent_start, in_extents); + set_xen_guest_handle(exchange.out.extent_start, out_extents); + + rc = xc_memory_op(xch, XENMEM_exchange, &exchange); + + return rc; +} + static int xc_domain_pod_target(xc_interface *xch, int op, uint32_t domid, diff -r 5ec79c06b18a -r 835b06768104 tools/libxc/xc_offline_page.c --- a/tools/libxc/xc_offline_page.c Mon Oct 18 16:54:42 2010 +0100 +++ b/tools/libxc/xc_offline_page.c Mon Oct 18 17:14:07 2010 +0100 @@ -512,35 +512,6 @@ static int clear_pte(xc_interface *xch, __clear_pte, mfn); } -static int exchange_page(xc_interface *xch, xen_pfn_t mfn, - xen_pfn_t *new_mfn, int domid) -{ - int rc; - xen_pfn_t out_mfn; - - struct xen_memory_exchange exchange = { - .in = { - .nr_extents = 1, - .extent_order = 0, - .domid = domid - }, - .out = { - .nr_extents = 1, - .extent_order = 0, - .domid = domid - } - }; - set_xen_guest_handle(exchange.in.extent_start, &mfn); - set_xen_guest_handle(exchange.out.extent_start, &out_mfn); - - rc = xc_memory_op(xch, XENMEM_exchange, &exchange); - - if (!rc) - *new_mfn = out_mfn; - - return rc; -} - /* * Check if a page can be exchanged successfully */ @@ -704,7 +675,9 @@ int xc_exchange_page(xc_interface *xch, goto failed; } - rc = exchange_page(xch, mfn, &new_mfn, domid); + rc = xc_domain_memory_exchange_pages(xch, domid, + 1, 0, &mfn, + 1, 0, &new_mfn); if (rc) { diff -r 5ec79c06b18a -r 835b06768104 tools/libxc/xenctrl.h --- a/tools/libxc/xenctrl.h Mon Oct 18 16:54:42 2010 +0100 +++ b/tools/libxc/xenctrl.h Mon Oct 18 17:14:07 2010 +0100 @@ -828,6 +828,15 @@ int xc_domain_populate_physmap_exact(xc_ /* Temporary for compatibility */ #define xc_domain_memory_populate_physmap(x, d, nr, eo, mf, es) \ xc_domain_populate_physmap_exact(x, d, nr, eo, mf, es) + +int xc_domain_memory_exchange_pages(xc_interface *xch, + int domid, + unsigned long nr_in_extents, + unsigned int in_order, + xen_pfn_t *in_extents, + unsigned long nr_out_extents, + unsigned int out_order, + xen_pfn_t *out_extents); int xc_domain_set_pod_target(xc_interface *xch, uint32_t domid, _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |