[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Export page offline hypercalls to user space tools.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1243861738 -3600 # Node ID 84c1f7c46444eaa33fc14fc519ebfc5f11098903 # Parent 50134a902c66d8c3d26a4bdca9257a8dfdd1c8c9 Export page offline hypercalls to user space tools. Signed-off-by: Jiang, Yunhong <yunhong.jiang@xxxxxxxxx> --- tools/libxc/Makefile | 1 tools/libxc/xc_offline_page.c | 100 ++++++++++++++++++++++++++++++++++++++++++ tools/libxc/xenguest.h | 9 +++ 3 files changed, 110 insertions(+) diff -r 50134a902c66 -r 84c1f7c46444 tools/libxc/Makefile --- a/tools/libxc/Makefile Mon Jun 01 14:07:46 2009 +0100 +++ b/tools/libxc/Makefile Mon Jun 01 14:08:58 2009 +0100 @@ -32,6 +32,7 @@ GUEST_SRCS-y := GUEST_SRCS-y := GUEST_SRCS-y += xg_private.c xc_suspend.c GUEST_SRCS-$(CONFIG_MIGRATE) += xc_domain_restore.c xc_domain_save.c +GUEST_SRCS-y += xc_offline_page.c GUEST_SRCS-$(CONFIG_HVM) += xc_hvm_build.c vpath %.c ../../xen/common/libelf diff -r 50134a902c66 -r 84c1f7c46444 tools/libxc/xc_offline_page.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/libxc/xc_offline_page.c Mon Jun 01 14:08:58 2009 +0100 @@ -0,0 +1,100 @@ +/****************************************************************************** + * xc_offline_page.c + * + * Helper functions to offline/online one page + * + * Copyright (c) 2003, K A Fraser. + * Copyright (c) 2009, Intel Corporation. + */ + +#include <inttypes.h> +#include <time.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/time.h> + +#include "xc_private.h" +#include "xc_dom.h" +#include "xg_private.h" +#include "xg_save_restore.h" + +int xc_mark_page_online(int xc, unsigned long start, + unsigned long end, uint32_t *status) +{ + DECLARE_SYSCTL; + int ret = -1; + + if ( !status || (end < start) ) + return -EINVAL; + + if (lock_pages(status, sizeof(uint32_t)*(end - start + 1))) + { + ERROR("Could not lock memory for xc_mark_page_online\n"); + return -EINVAL; + } + + sysctl.cmd = XEN_SYSCTL_page_offline_op; + sysctl.u.page_offline.start = start; + sysctl.u.page_offline.cmd = sysctl_page_online; + sysctl.u.page_offline.end = end; + set_xen_guest_handle(sysctl.u.page_offline.status, status); + ret = xc_sysctl(xc, &sysctl); + + unlock_pages(status, sizeof(uint32_t)*(end - start + 1)); + + return ret; +} + +int xc_mark_page_offline(int xc, unsigned long start, + unsigned long end, uint32_t *status) +{ + DECLARE_SYSCTL; + int ret = -1; + + if ( !status || (end < start) ) + return -EINVAL; + + if (lock_pages(status, sizeof(uint32_t)*(end - start + 1))) + { + ERROR("Could not lock memory for xc_mark_page_offline"); + return -EINVAL; + } + + sysctl.cmd = XEN_SYSCTL_page_offline_op; + sysctl.u.page_offline.start = start; + sysctl.u.page_offline.cmd = sysctl_page_offline; + sysctl.u.page_offline.end = end; + set_xen_guest_handle(sysctl.u.page_offline.status, status); + ret = xc_sysctl(xc, &sysctl); + + unlock_pages(status, sizeof(uint32_t)*(end - start + 1)); + + return ret; +} + +int xc_query_page_offline_status(int xc, unsigned long start, + unsigned long end, uint32_t *status) +{ + DECLARE_SYSCTL; + int ret = -1; + + if ( !status || (end < start) ) + return -EINVAL; + + if (lock_pages(status, sizeof(uint32_t)*(end - start + 1))) + { + ERROR("Could not lock memory for xc_query_page_offline_status\n"); + return -EINVAL; + } + + sysctl.cmd = XEN_SYSCTL_page_offline_op; + sysctl.u.page_offline.start = start; + sysctl.u.page_offline.cmd = sysctl_query_page_offline; + sysctl.u.page_offline.end = end; + set_xen_guest_handle(sysctl.u.page_offline.status, status); + ret = xc_sysctl(xc, &sysctl); + + unlock_pages(status, sizeof(uint32_t)*(end - start + 1)); + + return ret; +} diff -r 50134a902c66 -r 84c1f7c46444 tools/libxc/xenguest.h --- a/tools/libxc/xenguest.h Mon Jun 01 14:07:46 2009 +0100 +++ b/tools/libxc/xenguest.h Mon Jun 01 14:08:58 2009 +0100 @@ -154,4 +154,13 @@ int xc_suspend_evtchn_init(int xc, int x int xc_await_suspend(int xce, int suspend_evtchn); +int xc_mark_page_online(int xc, unsigned long start, + unsigned long end, uint32_t *status); + +int xc_mark_page_offline(int xc, unsigned long start, + unsigned long end, uint32_t *status); + +int xc_query_page_offline_status(int xc, unsigned long start, + unsigned long end, uint32_t *status); + #endif /* XENGUEST_H */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |