[libvirt] [PATCH V2 2/2] libxl: allow vendor/product addressing for USB hostdevs

Martin Kletzander mkletzan at redhat.com
Fri Sep 2 13:24:15 UTC 2016


On Wed, Aug 10, 2016 at 06:39:12PM -0600, Jim Fehlig wrote:
>From: Cédric Bosdonnat <cbosdonnat at suse.com>
>
>libxl only has API to address the host USB devices by bus/device.
>Find the bus/device if the user only provided the vendor/product
>of the USB device.
>
>Signed-off-by: Jim Fehlig <jfehlig at suse.com>
>---
>
>V2:
>- Initialize local 'usb' variable
>- Use 'bus' and 'device' from virUSBDevice retrieved from
>  virHostdevFindUSBDevice instead of relying on the function's
>  side-affects
>
> src/libxl/libxl_conf.c | 33 +++++++++++++++++++++++----------
> 1 file changed, 23 insertions(+), 10 deletions(-)
>
>diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
>index 5202ca1..06cbc2c 100644
>--- a/src/libxl/libxl_conf.c
>+++ b/src/libxl/libxl_conf.c
>@@ -1559,23 +1559,36 @@ int
> libxlMakeUSB(virDomainHostdevDefPtr hostdev, libxl_device_usbdev *usbdev)
> {
>     virDomainHostdevSubsysUSBPtr usbsrc = &hostdev->source.subsys.u.usb;
>+    virUSBDevicePtr usb = NULL;
>+    int ret = -1;
>
>     if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
>-        return -1;
>+        goto cleanup;

There's no need to have 'ret' and cleanup section, you can still return
-1 here, since...

>     if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB)
>-        return -1;
>+        goto cleanup;
>
>-    if (usbsrc->bus <= 0 || usbsrc->device <= 0) {
>-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>-                       _("libxenlight supports only USB device "
>-                         "specified by busnum:devnum"));
>-        return -1;
>+    if (usbsrc->bus > 0 && usbsrc->device > 0) {
>+        usbdev->u.hostdev.hostbus = usbsrc->bus;
>+        usbdev->u.hostdev.hostaddr = usbsrc->device;
>+    } else {
>+        if (virHostdevFindUSBDevice(hostdev, true, &usb) < 0) {
>+            virReportError(VIR_ERR_OPERATION_FAILED,
>+                           _("failed to find USB device busnum:devnum "
>+                             "for %x:%x"),
>+                           usbsrc->vendor, usbsrc->product);

... this and ...

>+            goto cleanup;
>+        }
>+
>+        usbdev->u.hostdev.hostbus = virUSBDeviceGetBus(usb);
>+        usbdev->u.hostdev.hostaddr = virUSBDeviceGetDevno(usb);

... this is the only place you need to clean stuff up.  But whatever
floats your boat, this is just a suggestion ;)

ACK, preferably after release, unless this fixes something for you guys.

Martin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160902/7873c0f1/attachment-0001.sig>


More information about the libvir-list mailing list