aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxc/xc_domain.c
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2010-10-22 15:14:51 +0100
committerIan Campbell <ian.campbell@citrix.com>2010-10-22 15:14:51 +0100
commit2ac2a1c5d5f7238b454d0bb952e78e2220b23375 (patch)
tree4953e0d5595cd22dd9f15a213eb5d8a18d26dc02 /tools/libxc/xc_domain.c
parent6209471c3cd925fd33eeb15e7df70bf031a61229 (diff)
downloadxen-2ac2a1c5d5f7238b454d0bb952e78e2220b23375.tar.gz
xen-2ac2a1c5d5f7238b454d0bb952e78e2220b23375.tar.bz2
xen-2ac2a1c5d5f7238b454d0bb952e78e2220b23375.zip
libxc: convert hvmop interfaces over to hypercall buffers
Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: Ian Jackson <ian.jackson.citrix.com>
Diffstat (limited to 'tools/libxc/xc_domain.c')
-rw-r--r--tools/libxc/xc_domain.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c
index df33f4d5c6..d0b15bcfe7 100644
--- a/tools/libxc/xc_domain.c
+++ b/tools/libxc/xc_domain.c
@@ -1027,38 +1027,42 @@ int xc_domain_send_trigger(xc_interface *xch,
int xc_set_hvm_param(xc_interface *handle, domid_t dom, int param, unsigned long value)
{
DECLARE_HYPERCALL;
- xen_hvm_param_t arg;
+ DECLARE_HYPERCALL_BUFFER(xen_hvm_param_t, arg);
int rc;
+ arg = xc_hypercall_buffer_alloc(handle, arg, sizeof(*arg));
+ if ( arg == NULL )
+ return -1;
+
hypercall.op = __HYPERVISOR_hvm_op;
hypercall.arg[0] = HVMOP_set_param;
- hypercall.arg[1] = (unsigned long)&arg;
- arg.domid = dom;
- arg.index = param;
- arg.value = value;
- if ( lock_pages(handle, &arg, sizeof(arg)) != 0 )
- return -1;
+ hypercall.arg[1] = HYPERCALL_BUFFER_AS_ARG(arg);
+ arg->domid = dom;
+ arg->index = param;
+ arg->value = value;
rc = do_xen_hypercall(handle, &hypercall);
- unlock_pages(handle, &arg, sizeof(arg));
+ xc_hypercall_buffer_free(handle, arg);
return rc;
}
int xc_get_hvm_param(xc_interface *handle, domid_t dom, int param, unsigned long *value)
{
DECLARE_HYPERCALL;
- xen_hvm_param_t arg;
+ DECLARE_HYPERCALL_BUFFER(xen_hvm_param_t, arg);
int rc;
+ arg = xc_hypercall_buffer_alloc(handle, arg, sizeof(*arg));
+ if ( arg == NULL )
+ return -1;
+
hypercall.op = __HYPERVISOR_hvm_op;
hypercall.arg[0] = HVMOP_get_param;
- hypercall.arg[1] = (unsigned long)&arg;
- arg.domid = dom;
- arg.index = param;
- if ( lock_pages(handle, &arg, sizeof(arg)) != 0 )
- return -1;
+ hypercall.arg[1] = HYPERCALL_BUFFER_AS_ARG(arg);
+ arg->domid = dom;
+ arg->index = param;
rc = do_xen_hypercall(handle, &hypercall);
- unlock_pages(handle, &arg, sizeof(arg));
- *value = arg.value;
+ *value = arg->value;
+ xc_hypercall_buffer_free(handle, arg);
return rc;
}