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

Re: [Xen-devel] [PATCH v6 1/2] libxl: Introduce functions to add and remove USB devices to an HVM guest



On Wed, 2013-04-24 at 14:37 +0100, George Dunlap wrote:
> On 24/04/13 13:53, Ian Campbell wrote:
> > On Wed, 2013-04-24 at 13:48 +0100, George Dunlap wrote:
> >
> >>>> +
> >>>> +/*
> >>>>     * libxl ABI compatibility
> >>>>     *
> >>>>     * The only guarantee which libxl makes regarding ABI compatibility
> >>>> @@ -735,6 +741,37 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t 
> >>>> domid, libxl_device_disk *disk,
> >>>>                           const libxl_asyncop_how *ao_how)
> >>>>                           LIBXL_EXTERNAL_CALLERS_ONLY;
> >>>>
> >>>> +/*
> >>>> + * USB
> >>>> + *
> >>>> + * For each device removed or added, one of these protocols is 
> >>>> available:
> >>>> + * - PV (i.e., PVUSB)
> >>>> + * - DEVICEMODEL (i.e, qemu)
> >>>> + *
> >>>> + * PV is available for either PV or HVM domains.  DEVICEMODEL is only
> >>>> + * available for HVM domains.  The caller can additionally specify
> >>>> + * "AUTO", in which case the library will try to determine the best
> >>>> + * protocol automatically.
> >>>> + *
> >>>> + * At the moment, the only protocol implemented is DEVICEMODEL, and the 
> >>>> only
> >>>> + * device type impelmented is HOSTDEV.
> >>>                    implemented
> >>>
> >>> If PV isn't implemented I think we should leave it out of the API for
> >>> now, when it is implemented it will need a LIBXL_HAVE_DEVICE_USB_TYPE_PV
> >>> or whatever anyway.
> >> If we return -ENOTIMP or -ENOSYS from usb_add, would that be sufficient?
> > How would the application know whether it should expose this
> > functionality to its users or not?
> >
> > It'd be pretty lame for them (either the app or the end user) to have to
> > try it and see if it worked.
> 
> On the whole, I'm beginning to think that we should just punt the whole 
> USB thing to 4.4 and do it properly the first time, instead of doing it 
> piecemeal.

I'm also starting to wonder about this amount of code so far into the
freeze.

> 
> >>>> + *
> >>>> + * This uses the qmp functionality, and is thus only available for
> >>>> + * qemu-xen, not qemu-traditional.
> >>>> + */
> >>>> +#define LIBXL_DEVICE_USB_BACKEND_DEFAULT (-1)
> >>>> +int libxl_device_usb_add(libxl_ctx *ctx, uint32_t domid,
> >>>> +                         libxl_device_usb *dev,
> >>>> +                         const libxl_asyncop_how *ao_how)
> >>>> +                         LIBXL_EXTERNAL_CALLERS_ONLY;
> >>>> +int libxl_device_usb_remove(libxl_ctx *ctx, uint32_t domid,
> >>>> +                            libxl_device_usb *dev,
> >>>> +                            const libxl_asyncop_how *ao_how)
> >>>> +                            LIBXL_EXTERNAL_CALLERS_ONLY;
> >>> No _destroy or _getinfo?
> >>>
> >>> _getinfo might be optional if there isn't any interesting info, but
> >>> _destroy is a must IMHO.
> >> I'm not exactly sure what the difference at this point would be between
> >> remove and destroy.
> >  From libxl.h:
> >
> >   * libxl_device_<type>_remove(ctx, domid, device):
> >   *
> >   *   Removes the given device from the specified domain by performing
> >   *   an orderly unplug with guest co-operation. This requires that the
> >   *   guest is running.
> >   *
> >   *   This method is currently synchronous and therefore can block
> >   *   while interacting with the guest.
> >   *
> >   * libxl_device_<type>_destroy(ctx, domid, device):
> >   *
> >   *   Removes the given device from the specified domain without guest
> >   *   co-operation. It is guest specific what affect this will have on
> >   *   a running guest.
> >   *
> >   *   This function does not interact with the guest and therefore
> >   *   cannot block on the guest.
> 
> I saw that, but AFAICT there is not and never will be a distinguishable 
> difference.

I expect there will be when the PV USB front and backends are involved.

> I see that the same is true for pci devices, as there are two functions 
> which call the same function internally.  I'll do the same thing. :-)

For now that'll do I think.



_______________________________________________
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®.