[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 1 of 2] libxl: Allow multiple USB devices on HVM domain creation
# HG changeset patch # User George Dunlap <george.dunlap@xxxxxxxxxxxxx> # Date 1354101445 0 # Node ID 538d9ffbd71b41e8cf6d7da0ded9e0a0b07f3c0d # Parent ae6fb202b233af815466055d9f1a635802a50855 libxl: Allow multiple USB devices on HVM domain creation This patch allows an HVM domain to be created with multiple USB devices. Since the previous interface only allowed the passing of a single device, this requires us to add a new element to the hvm struct of libxl_domain_build_info -- usbdevice_list. For API compatibility, the old element, usbdevice, remains. If b_info->hvm.usbdevice is non-NULL, then it will be used exclusively; otherwise, libxl will check for b_info->hvm.usbdevice_list instead. Each device listed will cause an extra "-usbdevice [foo]" to be appended to the qemu command line. In order to allow users of libxl to write software compatible with older versions of libxl, also define LIBXL_HAVE_BUILDINFO_USBDEVICE_LIST. If this is present, the caller should use b_info->hvm.usbdevice_list; otherwise they should use b_info->hvm.usbdevice. Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -266,6 +266,23 @@ #endif #endif +/* + * LIBXL_HAVE_BUILDINFO_USBDEVICE_LIST + * + * If this is defined, then the libxl_domain_build_info structure will + * contain hvm.usbdevice_list, a libxl_string_list type that contains + * a list of USB devices to specify on the qemu command-line. + * + * If it is set, callers may use either hvm.usbdevice or + * hvm.usbdevice_list, but not both; if both are set, only + * hvm.usbdevice will be used. + * + * If this is not defined, callers should only use hvm.usbdevice. + * Note that this means only one device can be added at domain build + * time. + */ +#define LIBXL_HAVE_BUILDINFO_USBDEVICE_LIST 1 + /* Functions annotated with LIBXL_EXTERNAL_CALLERS_ONLY may not be * called from within libxl itself. Callers outside libxl, who * do not #include libxl_internal.h, are fine. */ diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c --- a/tools/libxl/libxl_dm.c +++ b/tools/libxl/libxl_dm.c @@ -191,6 +191,15 @@ static char ** libxl__build_device_model if (b_info->u.hvm.usbdevice) { flexarray_vappend(dm_args, "-usbdevice", b_info->u.hvm.usbdevice, NULL); + } else if (b_info->u.hvm.usbdevice_list) { + char **p; + for (p = b_info->u.hvm.usbdevice_list; + *p; + p++) { + flexarray_vappend(dm_args, + "-usbdevice", + *p, NULL); + } } } if (b_info->u.hvm.soundhw) { diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -326,6 +326,7 @@ libxl_domain_build_info = Struct("domain ("usbdevice", string), ("soundhw", string), ("xen_platform_pci", libxl_defbool), + ("usbdevice_list", libxl_string_list), ])), ("pv", Struct(None, [("kernel", string), ("slack_memkb", MemKB), _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |