aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxc/xc_dom_boot.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
commit79647c5bc9c62feeed8a1e50e7c73001ae10b23d (patch)
treea3132a6db9d4cea23c2936efd23e4078057d6341 /tools/libxc/xc_dom_boot.c
parent70d20aed9a6406842d3d957583fbe15c60fd84ec (diff)
downloadxen-79647c5bc9c62feeed8a1e50e7c73001ae10b23d.tar.gz
xen-79647c5bc9c62feeed8a1e50e7c73001ae10b23d.tar.bz2
xen-79647c5bc9c62feeed8a1e50e7c73001ae10b23d.zip
libxc: convert domctl interfaces over to hypercall buffers
(defer save/restore and shadow related interfaces til a later patch) Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: Ian Jackson <ian.jackson.citrix.com>
Diffstat (limited to 'tools/libxc/xc_dom_boot.c')
-rw-r--r--tools/libxc/xc_dom_boot.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/tools/libxc/xc_dom_boot.c b/tools/libxc/xc_dom_boot.c
index 21496f5b4f..28698a3827 100644
--- a/tools/libxc/xc_dom_boot.c
+++ b/tools/libxc/xc_dom_boot.c
@@ -61,9 +61,10 @@ static int setup_hypercall_page(struct xc_dom_image *dom)
return rc;
}
-static int launch_vm(xc_interface *xch, domid_t domid, void *ctxt)
+static int launch_vm(xc_interface *xch, domid_t domid, xc_hypercall_buffer_t *ctxt)
{
DECLARE_DOMCTL;
+ DECLARE_HYPERCALL_BUFFER_ARGUMENT(ctxt);
int rc;
xc_dom_printf(xch, "%s: called, ctxt=%p", __FUNCTION__, ctxt);
@@ -71,7 +72,7 @@ static int launch_vm(xc_interface *xch, domid_t domid, void *ctxt)
domctl.cmd = XEN_DOMCTL_setvcpucontext;
domctl.domain = domid;
domctl.u.vcpucontext.vcpu = 0;
- set_xen_guest_handle(domctl.u.vcpucontext.ctxt, ctxt);
+ xc_set_xen_guest_handle(domctl.u.vcpucontext.ctxt, ctxt);
rc = do_domctl(xch, &domctl);
if ( rc != 0 )
xc_dom_panic(xch, XC_INTERNAL_ERROR,
@@ -202,9 +203,13 @@ void *xc_dom_boot_domU_map(struct xc_dom_image *dom, xen_pfn_t pfn,
int xc_dom_boot_image(struct xc_dom_image *dom)
{
DECLARE_DOMCTL;
- vcpu_guest_context_any_t ctxt;
+ DECLARE_HYPERCALL_BUFFER(vcpu_guest_context_any_t, ctxt);
int rc;
+ ctxt = xc_hypercall_buffer_alloc(dom->xch, ctxt, sizeof(*ctxt));
+ if ( ctxt == NULL )
+ return -1;
+
DOMPRINTF_CALLED(dom->xch);
/* misc ia64 stuff*/
@@ -260,12 +265,13 @@ int xc_dom_boot_image(struct xc_dom_image *dom)
return rc;
/* let the vm run */
- memset(&ctxt, 0, sizeof(ctxt));
- if ( (rc = dom->arch_hooks->vcpu(dom, &ctxt)) != 0 )
+ memset(ctxt, 0, sizeof(ctxt));
+ if ( (rc = dom->arch_hooks->vcpu(dom, ctxt)) != 0 )
return rc;
xc_dom_unmap_all(dom);
- rc = launch_vm(dom->xch, dom->guest_domid, &ctxt);
+ rc = launch_vm(dom->xch, dom->guest_domid, HYPERCALL_BUFFER(ctxt));
+ xc_hypercall_buffer_free(dom->xch, ctxt);
return rc;
}