aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxc/xc_mem_paging.c
diff options
context:
space:
mode:
authorAndres Lagar-Cavilla <andres@lagarcavilla.org>2011-12-01 18:14:24 +0000
committerAndres Lagar-Cavilla <andres@lagarcavilla.org>2011-12-01 18:14:24 +0000
commit49aabd5cf18258967eb424bc3c1d212372deb796 (patch)
tree5f6a943bec4ca4b241d5158b0f5f075ec1e92bb4 /tools/libxc/xc_mem_paging.c
parent26a5c829c8e6c2379fc45529accddf8b65fbbcef (diff)
downloadxen-49aabd5cf18258967eb424bc3c1d212372deb796.tar.gz
xen-49aabd5cf18258967eb424bc3c1d212372deb796.tar.bz2
xen-49aabd5cf18258967eb424bc3c1d212372deb796.zip
Tools: Libxc wrappers to automatically fill in page oud page contents on prepare
Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Tim Deegan <tim@xen.org>
Diffstat (limited to 'tools/libxc/xc_mem_paging.c')
-rw-r--r--tools/libxc/xc_mem_paging.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/tools/libxc/xc_mem_paging.c b/tools/libxc/xc_mem_paging.c
index f917403b39..f16d16b3ab 100644
--- a/tools/libxc/xc_mem_paging.c
+++ b/tools/libxc/xc_mem_paging.c
@@ -65,6 +65,29 @@ int xc_mem_paging_prep(xc_interface *xch, domid_t domain_id, unsigned long gfn)
NULL, NULL, gfn);
}
+int xc_mem_paging_load(xc_interface *xch, domid_t domain_id,
+ unsigned long gfn, void *buffer)
+{
+ int rc;
+
+ if ( !buffer )
+ return -EINVAL;
+
+ if ( ((unsigned long) buffer) & (XC_PAGE_SIZE - 1) )
+ return -EINVAL;
+
+ if ( mlock(buffer, XC_PAGE_SIZE) )
+ return -errno;
+
+ rc = xc_mem_event_control(xch, domain_id,
+ XEN_DOMCTL_MEM_EVENT_OP_PAGING_PREP,
+ XEN_DOMCTL_MEM_EVENT_OP_PAGING,
+ buffer, NULL, gfn);
+
+ (void)munlock(buffer, XC_PAGE_SIZE);
+ return rc;
+}
+
int xc_mem_paging_resume(xc_interface *xch, domid_t domain_id, unsigned long gfn)
{
return xc_mem_event_control(xch, domain_id,