From: Anthony PERARD <anthony.perard@xxxxxxxxxx>
As libxl switch to qdisk when blktap isn't available, this patch makes
libxl_device_disk_list also list qdisk device. So
libxl_build_device_model_args_new will be able to add qdisk device to
the command line options of Qemu.
Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
---
tools/libxl/libxl.c | 30 +++++++++++++++++++++++++++++-
1 files changed, 29 insertions(+), 1 deletions(-)
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 9dfd211..78dcf62 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -2492,7 +2492,7 @@ int libxl_device_vkb_hard_shutdown(libxl_ctx *ctx,
uint32_t domid)
libxl_device_disk *libxl_device_disk_list(libxl_ctx *ctx, uint32_t domid, int
*num)
{
libxl__gc gc = LIBXL_INIT_GC(ctx);
- char *be_path_tap, *be_path_vbd;
+ char *be_path_tap, *be_path_vbd, *be_path_qdisk;
libxl_device_disk *dend, *disks, *ret = NULL;
char **b, **l = NULL;
unsigned int numl, len;
@@ -2500,6 +2500,7 @@ libxl_device_disk *libxl_device_disk_list(libxl_ctx *ctx,
uint32_t domid, int *n
be_path_vbd = libxl__sprintf(&gc, "%s/backend/vbd/%d",
libxl__xs_get_dompath(&gc, 0), domid);
be_path_tap = libxl__sprintf(&gc, "%s/backend/tap/%d",
libxl__xs_get_dompath(&gc, 0), domid);
+ be_path_qdisk = libxl__sprintf(&gc, "%s/backend/qdisk/%d",
libxl__xs_get_dompath(&gc, 0), domid);
b = l = libxl__xs_directory(&gc, XBT_NULL, be_path_vbd, &numl);
if (l) {
@@ -2542,6 +2543,33 @@ libxl_device_disk *libxl_device_disk_list(libxl_ctx
*ctx, uint32_t domid, int *n
disks->is_cdrom = !strcmp(type, "cdrom");
}
}
+ b = l = libxl__xs_directory(&gc, XBT_NULL, be_path_qdisk, &numl);
+ if (l) {
+ ret = realloc(ret, sizeof(libxl_device_disk) * (*num + numl));
+ disks = ret + *num;
+ *num += numl;
+ for (dend = ret + *num; disks < dend; ++disks, ++l) {
+ char *physpath_tmp;
+ disks->backend_domid = 0;
+ disks->domid = domid;
+ physpath_tmp = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc,
"%s/%s/params", be_path_qdisk, *l), &len);
+ if (strchr(physpath_tmp, ':')) {
+ disks->physpath = strdup(strchr(physpath_tmp, ':') + 1);
+ free(physpath_tmp);
+ } else {
+ disks->physpath = physpath_tmp;
+ }
+ libxl_string_to_phystype(ctx, libxl__xs_read(&gc, XBT_NULL,
libxl__sprintf(&gc, "%s/%s/type", be_path_qdisk, *l)), &(disks->phystype));
+ disks->virtpath = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc,
"%s/%s/dev", be_path_qdisk, *l), &len);
+ disks->unpluggable = atoi(libxl__xs_read(&gc, XBT_NULL,
libxl__sprintf(&gc, "%s/%s/removable", be_path_qdisk, *l)));
+ if (!strcmp(libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc,
"%s/%s/mode", be_path_qdisk, *l)), "w"))
+ disks->readwrite = 1;
+ else
+ disks->readwrite = 0;
+ type = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc,
"%s/device-type", libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc,
"%s/%s/frontend", be_path_qdisk, *l))));
+ disks->is_cdrom = !strcmp(type, "cdrom");
+ }
+ }
libxl__free_all(&gc);
return ret;
}
--
1.7.1
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|