diff options
author | Roger Pau Monne <roger.pau@citrix.com> | 2012-07-26 16:47:36 +0100 |
---|---|---|
committer | Roger Pau Monne <roger.pau@citrix.com> | 2012-07-26 16:47:36 +0100 |
commit | 2c5f57a30850ba8f6371222bcf14be9b8a747de8 (patch) | |
tree | 2a8a0dfc0c67255ffeb61e3a9874d7e7a6f8b938 | |
parent | 57ad6afe2a08a03c40bcd336bfb27e008e1d3e53 (diff) | |
download | xen-2c5f57a30850ba8f6371222bcf14be9b8a747de8.tar.gz xen-2c5f57a30850ba8f6371222bcf14be9b8a747de8.tar.bz2 xen-2c5f57a30850ba8f6371222bcf14be9b8a747de8.zip |
libxl: convert libxl_device_vkb_add to an async operation
Split libxl_device_vkb_add into libxl__device_vkb_add (to be used
inside already running ao's), and make libxl_device_vkb_add a stub to
call libxl__device_vkb_add.
Signed-off-by: Roger Pau Monne <roger.pau@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Campbell <ian.campbell@citrix.com>
-rw-r--r-- | tools/libxl/libxl.c | 22 | ||||
-rw-r--r-- | tools/libxl/libxl.h | 3 | ||||
-rw-r--r-- | tools/libxl/libxl_create.c | 4 | ||||
-rw-r--r-- | tools/libxl/libxl_dm.c | 2 | ||||
-rw-r--r-- | tools/libxl/libxl_internal.h | 4 | ||||
-rw-r--r-- | tools/ocaml/libs/xl/xenlight_stubs.c | 2 |
6 files changed, 29 insertions, 8 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 1f79865958..5a2c6e1974 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -2919,9 +2919,26 @@ static int libxl__device_from_vkb(libxl__gc *gc, uint32_t domid, return 0; } -int libxl_device_vkb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb) +int libxl_device_vkb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb, + const libxl_asyncop_how *ao_how) +{ + AO_CREATE(ctx, domid, ao_how); + int rc; + + rc = libxl__device_vkb_add(gc, domid, vkb); + if (rc) { + LOG(ERROR, "unable to add vkb device"); + goto out; + } + +out: + libxl__ao_complete(egc, ao, rc); + return AO_INPROGRESS; +} + +int libxl__device_vkb_add(libxl__gc *gc, uint32_t domid, + libxl_device_vkb *vkb) { - GC_INIT(ctx); flexarray_t *front; flexarray_t *back; libxl__device device; @@ -2966,7 +2983,6 @@ out_free: flexarray_free(back); flexarray_free(front); out: - GC_FREE; return rc; } diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index e6e549f318..70a1e78199 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -711,7 +711,8 @@ int libxl_device_nic_getinfo(libxl_ctx *ctx, uint32_t domid, libxl_device_nic *nic, libxl_nicinfo *nicinfo); /* Keyboard */ -int libxl_device_vkb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb); +int libxl_device_vkb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb, + const libxl_asyncop_how *ao_how); int libxl_device_vkb_remove(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb, const libxl_asyncop_how *ao_how); diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index 3fd33e7065..a9704dee65 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -960,7 +960,7 @@ static void domcreate_launch_dm(libxl__egc *egc, libxl__ao_devices *aodevs, libxl__device_console_dispose(&console); libxl_device_vkb_init(&vkb); - libxl_device_vkb_add(ctx, domid, &vkb); + libxl__device_vkb_add(gc, domid, &vkb); libxl_device_vkb_dispose(&vkb); dcs->dmss.dm.guest_domid = domid; @@ -977,7 +977,7 @@ static void domcreate_launch_dm(libxl__egc *egc, libxl__ao_devices *aodevs, for (i = 0; i < d_config->num_vfbs; i++) { libxl_device_vfb_add(ctx, domid, &d_config->vfbs[i]); - libxl_device_vkb_add(ctx, domid, &d_config->vkbs[i]); + libxl__device_vkb_add(gc, domid, &d_config->vkbs[i]); } ret = init_console_info(&console, 0); diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c index 606cc29cdd..47a812fd62 100644 --- a/tools/libxl/libxl_dm.c +++ b/tools/libxl/libxl_dm.c @@ -905,7 +905,7 @@ static void spawn_stub_launch_dm(libxl__egc *egc, ret = libxl_device_vfb_add(ctx, dm_domid, &dm_config->vfbs[0]); if (ret) goto out; - ret = libxl_device_vkb_add(ctx, dm_domid, &dm_config->vkbs[0]); + ret = libxl__device_vkb_add(gc, dm_domid, &dm_config->vkbs[0]); if (ret) goto out; diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index cf5ab712ad..b617df0482 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -1949,6 +1949,10 @@ _hidden void libxl__device_nic_add(libxl__egc *egc, uint32_t domid, libxl_device_nic *nic, libxl__ao_device *aodev); +/* Internal function to connect a vkb device */ +_hidden int libxl__device_vkb_add(libxl__gc *gc, uint32_t domid, + libxl_device_vkb *vkb); + /* Waits for the passed device to reach state XenbusStateInitWait. * This is not really useful by itself, but is important when executing * hotplug scripts, since we need to be sure the device is in the correct diff --git a/tools/ocaml/libs/xl/xenlight_stubs.c b/tools/ocaml/libs/xl/xenlight_stubs.c index 0e9c65e8cd..3d2493bfc0 100644 --- a/tools/ocaml/libs/xl/xenlight_stubs.c +++ b/tools/ocaml/libs/xl/xenlight_stubs.c @@ -315,7 +315,7 @@ value stub_xl_device_vkb_add(value info, value domid) device_vkb_val(&gc, &lg, &c_info, info); INIT_CTX(); - ret = libxl_device_vkb_add(ctx, Int_val(domid), &c_info); + ret = libxl_device_vkb_add(ctx, Int_val(domid), &c_info, 0); if (ret != 0) failwith_xl("vkb_add", &lg); FREE_CTX(); |