diff options
author | Ian Campbell <ian.campbell@citrix.com> | 2010-10-22 15:14:51 +0100 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2010-10-22 15:14:51 +0100 |
commit | 2ac2a1c5d5f7238b454d0bb952e78e2220b23375 (patch) | |
tree | 4953e0d5595cd22dd9f15a213eb5d8a18d26dc02 /tools/libxc/xc_domain.c | |
parent | 6209471c3cd925fd33eeb15e7df70bf031a61229 (diff) | |
download | xen-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.c | 36 |
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; } |