[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH V7 4/7] libxl: add libxl_device_usb_assignable_list API



On 25/09/15 03:11, Chunyan Liu wrote:
> Add API for listing assignable USB devices info.
> Assignable USB device means the USB device type is assignable and
> it's not assigned to any guest yet.
> 
> Signed-off-by: Chunyan Liu <cyliu@xxxxxxxx>
> ---
> This could be squashed with previous patch. Split because there is
> some dispute on this. If this is acceptable, could be squashed,
> otherwise could be removed.
> 
>  tools/libxl/libxl.h       |  3 +++
>  tools/libxl/libxl_pvusb.c | 55 
> +++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 58 insertions(+)
> 
> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> index 633bfc1..c41b9de 100644
> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -1450,6 +1450,9 @@ int libxl_device_usbctrl_getinfo(libxl_ctx *ctx, 
> uint32_t domid,
>                                   libxl_usbctrlinfo *usbctrlinfo);
>  
>  /* USB Devices */
> +libxl_device_usb *
> +libxl_device_usb_assignable_list(libxl_ctx *ctx, int *num);
> +
>  int libxl_device_usb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_usb 
> *usb,
>                           const libxl_asyncop_how *ao_how)
>                           LIBXL_EXTERNAL_CALLERS_ONLY;
> diff --git a/tools/libxl/libxl_pvusb.c b/tools/libxl/libxl_pvusb.c
> index d4b997f..b683e60 100644
> --- a/tools/libxl/libxl_pvusb.c
> +++ b/tools/libxl/libxl_pvusb.c
> @@ -573,6 +573,61 @@ static bool is_usb_assignable(libxl__gc *gc, 
> libxl_device_usb *usb)
>      return classcode != USBHUB_CLASS_CODE;
>  }
>  
> +libxl_device_usb *
> +libxl_device_usb_assignable_list(libxl_ctx *ctx, int *num)
> +{
> +    GC_INIT(ctx);
> +    libxl_device_usb *usbs = NULL;
> +    libxl_device_usb *assigned;
> +    int num_assigned;
> +    struct dirent *de;
> +    DIR *dir;
> +
> +    *num = 0;
> +
> +    if (get_assigned_devices(gc, &assigned, &num_assigned) < 0) {
> +        LOG(ERROR, "cannot determine if device is assigned");
> +        goto out;
> +    }
> +
> +    if (!(dir = opendir(SYSFS_USB_DEV)))
> +        goto out;
> +
> +    while ((de = readdir(dir))) {
> +        libxl_device_usb *usb;
> +        uint8_t bus = -1, addr = -1;
> +
> +        if (!de->d_name)
> +            continue;
> +
> +        usb_busaddr_from_busid(gc, de->d_name, &bus, &addr);
> +        if (bus < 1 || addr < 1)
> +            continue;
> +
> +        GCNEW(usb);
> +        usb->u.hostdev.hostbus = bus;
> +        usb->u.hostdev.hostaddr = addr;
> +
> +        if (!is_usb_assignable(gc, usb))
> +            continue;
> +
> +        if (is_usbdev_in_array(assigned, num_assigned, usb))
> +            continue;

Why are we allocating a new usb struct every loop, and then never using
it again?  Why not just put it on the stack and re-use it?

Other than that, looks OK.

 -George

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.