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 | 79647c5bc9c62feeed8a1e50e7c73001ae10b23d (patch) | |
tree | a3132a6db9d4cea23c2936efd23e4078057d6341 /tools/libxc/xc_dom_boot.c | |
parent | 70d20aed9a6406842d3d957583fbe15c60fd84ec (diff) | |
download | xen-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.c | 18 |
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; } |