George Dunlap
2012-Nov-28 12:16 UTC
[PATCH 2 of 2] xl: Accept a list for usbdevice in config file
# HG changeset patch # User George Dunlap <george.dunlap@eu.citrix.com> # Date 1354104851 0 # Node ID e87d8fad28e00090591b65b2682dea9112f8830d # Parent 538d9ffbd71b41e8cf6d7da0ded9e0a0b07f3c0d xl: Accept a list for usbdevice in config file Allow the "usbdevice" key to accept a list of USB devices, and pass them in using the new usbdevice_list domain build element. For backwards compatibility, still accept singleton values. Also update the xl.cfg manpage, adding information about how to pass through host devices. Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com> diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 --- a/docs/man/xl.cfg.pod.5 +++ b/docs/man/xl.cfg.pod.5 @@ -1103,15 +1103,22 @@ device. Enables or disables a USB bus in the guest. -=item B<usbdevice=DEVICE> +=item B<usbdevice=[ "DEVICE", "DEVICE", ...]> -Adds B<DEVICE> to the USB bus. The USB bus must also be enabled using -B<usb=1>. The most common use for this option is B<usbdevice=tablet> -which adds pointer device using absolute coordinates. Such devices -function better than relative coordinate devices (such as a standard -mouse) since many methods of exporting guest graphics (such as VNC) -work better in this mode. Note that this is independent of the actual -pointer device you are using on the host/client side. +Adds B<DEVICE>s to the emulated USB bus. The USB bus must also be +enabled using B<usb=1>. The most common use for this option is +B<usbdevice=[''tablet'']> which adds pointer device using absolute +coordinates. Such devices function better than relative coordinate +devices (such as a standard mouse) since many methods of exporting +guest graphics (such as VNC) work better in this mode. Note that this +is independent of the actual pointer device you are using on the +host/client side. + +Host devices can also be passed through in this way, by specifying +host:USBID, where USBID is of the form xxxx:yyyy. The USBID can +typically be found by using lsusb or usb-devices. + +The form usbdevice=DEVICE is also accepted for backwards compatibility. =back diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -1485,8 +1485,23 @@ skip_vfb: xlu_cfg_replace_string (config, "serial", &b_info->u.hvm.serial, 0); xlu_cfg_replace_string (config, "boot", &b_info->u.hvm.boot, 0); xlu_cfg_get_defbool(config, "usb", &b_info->u.hvm.usb, 0); - xlu_cfg_replace_string (config, "usbdevice", - &b_info->u.hvm.usbdevice, 0); + switch (xlu_cfg_get_list_as_string_list(config, "usbdevice", + &b_info->u.hvm.usbdevice_list, + 1)) + { + + case 0: break; /* Success */ + case ESRCH: break; /* Option not present */ + case EINVAL: + /* If it''s not a valid list, try reading it as an atom, falling through to + * an error if it fails */ + if (!xlu_cfg_replace_string(config, "usbdevice", &b_info->u.hvm.usbdevice, 0)) + break; + /* FALLTHRU */ + default: + fprintf(stderr,"xl: Unable to parse usbdevice.\n"); + exit(-ERROR_FAIL); + } xlu_cfg_replace_string (config, "soundhw", &b_info->u.hvm.soundhw, 0); xlu_cfg_get_defbool(config, "xen_platform_pci", &b_info->u.hvm.xen_platform_pci, 0);
Pasi Kärkkäinen
2012-Nov-28 15:11 UTC
Re: [PATCH 2 of 2] xl: Accept a list for usbdevice in config file
On Wed, Nov 28, 2012 at 12:16:06PM +0000, George Dunlap wrote:> # HG changeset patch > # User George Dunlap <george.dunlap@eu.citrix.com> > # Date 1354104851 0 > # Node ID e87d8fad28e00090591b65b2682dea9112f8830d > # Parent 538d9ffbd71b41e8cf6d7da0ded9e0a0b07f3c0d > xl: Accept a list for usbdevice in config file > > Allow the "usbdevice" key to accept a list of USB devices, and pass > them in using the new usbdevice_list domain build element. > > For backwards compatibility, still accept singleton values. > > Also update the xl.cfg manpage, adding information about how to pass > through host devices. > > Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com> > > diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 > --- a/docs/man/xl.cfg.pod.5 > +++ b/docs/man/xl.cfg.pod.5 > @@ -1103,15 +1103,22 @@ device. > > Enables or disables a USB bus in the guest. >Should we add "HVM" there ?> -=item B<usbdevice=DEVICE> > +=item B<usbdevice=[ "DEVICE", "DEVICE", ...]> > > -Adds B<DEVICE> to the USB bus. The USB bus must also be enabled using > -B<usb=1>. The most common use for this option is B<usbdevice=tablet> > -which adds pointer device using absolute coordinates. Such devices > -function better than relative coordinate devices (such as a standard > -mouse) since many methods of exporting guest graphics (such as VNC) > -work better in this mode. Note that this is independent of the actual > -pointer device you are using on the host/client side. > +Adds B<DEVICE>s to the emulated USB bus. The USB bus must also be > +enabled using B<usb=1>. The most common use for this option is > +B<usbdevice=[''tablet'']> which adds pointer device using absolute > +coordinates. Such devices function better than relative coordinate > +devices (such as a standard mouse) since many methods of exporting > +guest graphics (such as VNC) work better in this mode. Note that this > +is independent of the actual pointer device you are using on the > +host/client side. > + > +Host devices can also be passed through in this way, by specifying > +host:USBID, where USBID is of the form xxxx:yyyy. The USBID can > +typically be found by using lsusb or usb-devices. > + > +The form usbdevice=DEVICE is also accepted for backwards compatibility. >Should we mention the difference between qemu-traditional and qemu-upstream here? qemu-traditional only supports USB 1.1 devices, while qemu-upstream offers USB 2.0 (and 3.0) emulation. Is there currently a way to control to which virtual usb controller the host device gets added to? See here for help how to configure that with qemu/kvm: http://www.linux-kvm.com/content/qemu-kvm-11-adds-experimental-support-usb-30 -- Pasi
George Dunlap
2012-Nov-28 16:52 UTC
Re: [PATCH 2 of 2] xl: Accept a list for usbdevice in config file
On Wed, Nov 28, 2012 at 3:11 PM, Pasi Kärkkäinen <pasik@iki.fi> wrote:> On Wed, Nov 28, 2012 at 12:16:06PM +0000, George Dunlap wrote: > > # HG changeset patch > > # User George Dunlap <george.dunlap@eu.citrix.com> > > # Date 1354104851 0 > > # Node ID e87d8fad28e00090591b65b2682dea9112f8830d > > # Parent 538d9ffbd71b41e8cf6d7da0ded9e0a0b07f3c0d > > xl: Accept a list for usbdevice in config file > > > > Allow the "usbdevice" key to accept a list of USB devices, and pass > > them in using the new usbdevice_list domain build element. > > > > For backwards compatibility, still accept singleton values. > > > > Also update the xl.cfg manpage, adding information about how to pass > > through host devices. > > > > Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com> > > > > diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 > > --- a/docs/man/xl.cfg.pod.5 > > +++ b/docs/man/xl.cfg.pod.5 > > @@ -1103,15 +1103,22 @@ device. > > > > Enables or disables a USB bus in the guest. > > > > Should we add "HVM" there ? >I could make this say, "...in an HVM guest". (I''ll wait to see if I get other comments before re-sending the patch.)> > > > -=item B<usbdevice=DEVICE> > > +=item B<usbdevice=[ "DEVICE", "DEVICE", ...]> > > > > -Adds B<DEVICE> to the USB bus. The USB bus must also be enabled using > > -B<usb=1>. The most common use for this option is B<usbdevice=tablet> > > -which adds pointer device using absolute coordinates. Such devices > > -function better than relative coordinate devices (such as a standard > > -mouse) since many methods of exporting guest graphics (such as VNC) > > -work better in this mode. Note that this is independent of the actual > > -pointer device you are using on the host/client side. > > +Adds B<DEVICE>s to the emulated USB bus. The USB bus must also be > > +enabled using B<usb=1>. The most common use for this option is > > +B<usbdevice=[''tablet'']> which adds pointer device using absolute > > +coordinates. Such devices function better than relative coordinate > > +devices (such as a standard mouse) since many methods of exporting > > +guest graphics (such as VNC) work better in this mode. Note that this > > +is independent of the actual pointer device you are using on the > > +host/client side. > > + > > +Host devices can also be passed through in this way, by specifying > > +host:USBID, where USBID is of the form xxxx:yyyy. The USBID can > > +typically be found by using lsusb or usb-devices. > > + > > +The form usbdevice=DEVICE is also accepted for backwards compatibility. > > > > Should we mention the difference between qemu-traditional and > qemu-upstream here? > > qemu-traditional only supports USB 1.1 devices, while qemu-upstream offers > USB 2.0 (and 3.0) emulation. > Is there currently a way to control to which virtual usb controller the > host device gets added to? > > See here for help how to configure that with qemu/kvm: > > http://www.linux-kvm.com/content/qemu-kvm-11-adds-experimental-support-usb-30 >I think this level of detail is probably too high for a man page -- this kind of thing should be on a wiki somewhere I think. In general though, I think xl''s approach to USB stuff is really simplistic. It would be nice to have it be more fully-featured, but I''m not sure that''s on anyone''s priority list. -George _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Ian Campbell
2012-Nov-29 11:06 UTC
Re: [PATCH 2 of 2] xl: Accept a list for usbdevice in config file
On Wed, 2012-11-28 at 16:52 +0000, George Dunlap wrote:> On Wed, Nov 28, 2012 at 3:11 PM, Pasi Kärkkäinen <pasik@iki.fi> wrote: > On Wed, Nov 28, 2012 at 12:16:06PM +0000, George Dunlap wrote: > > # HG changeset patch > > # User George Dunlap <george.dunlap@eu.citrix.com> > > # Date 1354104851 0 > > # Node ID e87d8fad28e00090591b65b2682dea9112f8830d > > # Parent 538d9ffbd71b41e8cf6d7da0ded9e0a0b07f3c0d > > xl: Accept a list for usbdevice in config file > > > > Allow the "usbdevice" key to accept a list of USB devices, > and pass > > them in using the new usbdevice_list domain build element. > > > > For backwards compatibility, still accept singleton values. > > > > Also update the xl.cfg manpage, adding information about how > to pass > > through host devices. > > > > Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com> > > > > diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 > > --- a/docs/man/xl.cfg.pod.5 > > +++ b/docs/man/xl.cfg.pod.5 > > @@ -1103,15 +1103,22 @@ device. > > > > Enables or disables a USB bus in the guest. > > > > > Should we add "HVM" there ? > > I could make this say, "...in an HVM guest". (I'll wait to see if I > get other comments before re-sending the patch.)FWIW other similar options simply begin the paragraph with "(HVM only)" But actually this particular option is already underneath a section which begins "The following options apply only to HVM guests." and we don't seem to reiterate that in the other options.> > -=item B<usbdevice=DEVICE> > > +=item B<usbdevice=[ "DEVICE", "DEVICE", ...]> > > > > -Adds B<DEVICE> to the USB bus. The USB bus must also be > enabled using > > -B<usb=1>. The most common use for this option is > B<usbdevice=tablet>Are there other non-host* options?> I think this level of detail is probably too high for a man page -- > this kind of thing should be on a wiki somewhere I think.Its a bit of a cop-out but we do reference qemu(1) in some other places, which might suffice here? Ian. _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
George Dunlap
2012-Nov-29 11:44 UTC
Re: [PATCH 2 of 2] xl: Accept a list for usbdevice in config file
On 29/11/12 11:06, Ian Campbell wrote:> On Wed, 2012-11-28 at 16:52 +0000, George Dunlap wrote: >> On Wed, Nov 28, 2012 at 3:11 PM, Pasi Kärkkäinen <pasik@iki.fi> wrote: >> On Wed, Nov 28, 2012 at 12:16:06PM +0000, George Dunlap wrote: >> > # HG changeset patch >> > # User George Dunlap <george.dunlap@eu.citrix.com> >> > # Date 1354104851 0 >> > # Node ID e87d8fad28e00090591b65b2682dea9112f8830d >> > # Parent 538d9ffbd71b41e8cf6d7da0ded9e0a0b07f3c0d >> > xl: Accept a list for usbdevice in config file >> > >> > Allow the "usbdevice" key to accept a list of USB devices, >> and pass >> > them in using the new usbdevice_list domain build element. >> > >> > For backwards compatibility, still accept singleton values. >> > >> > Also update the xl.cfg manpage, adding information about how >> to pass >> > through host devices. >> > >> > Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com> >> > >> > diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 >> > --- a/docs/man/xl.cfg.pod.5 >> > +++ b/docs/man/xl.cfg.pod.5 >> > @@ -1103,15 +1103,22 @@ device. >> > >> > Enables or disables a USB bus in the guest. >> > >> >> >> Should we add "HVM" there ? >> >> I could make this say, "...in an HVM guest". (I'll wait to see if I >> get other comments before re-sending the patch.) > FWIW other similar options simply begin the paragraph with "(HVM only)" > > But actually this particular option is already underneath a section > which begins "The following options apply only to HVM guests." and we > don't seem to reiterate that in the other options.Ah, right -- now I remember, I thought about it, saw that it was in an "HVM only" section, and decided that was sufficient. :-)> >> > -=item B<usbdevice=DEVICE> >> > +=item B<usbdevice=[ "DEVICE", "DEVICE", ...]> >> > >> > -Adds B<DEVICE> to the USB bus. The USB bus must also be >> enabled using >> > -B<usb=1>. The most common use for this option is >> B<usbdevice=tablet> > Are there other non-host* options?qemu.git/vl.c suggests other options might include, "disk:", "serial:", "net:" and "bt:"; other non-colon-including options include "keyboard", "mouse", "wacom-tablet", and "braile". On the other hand, a number of these seem to require supplementary options to work well; e.g., network and bt (bluetooth) require one argument to hook up a USB device, and another option to say how it's connected to what. It's also interesting to note that the KVM documentation doesnt' mention using "-usb" and "-usbdevice" at all -- they seem to prefer using "-device" to specify hubs &c. But still, it might be useful to say that these are passed via "usbdevice" to the qemu command line, and so you can find more information on the qemu man page. -George _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
George Dunlap
2012-Nov-29 12:20 UTC
Re: [PATCH 2 of 2] xl: Accept a list for usbdevice in config file
On Thu, Nov 29, 2012 at 11:44 AM, George Dunlap <george.dunlap@eu.citrix.com> wrote:> qemu.git/vl.c suggests other options might include, "disk:", "serial:", > "net:" and "bt:"; other non-colon-including options include "keyboard", > "mouse", "wacom-tablet", and "braile". > > On the other hand, a number of these seem to require supplementary options > to work well; e.g., network and bt (bluetooth) require one argument to hook > up a USB device, and another option to say how it''s connected to what. > > It''s also interesting to note that the KVM documentation doesnt'' mention > using "-usb" and "-usbdevice" at all -- they seem to prefer using "-device" > to specify hubs &c. >Speaking of which, the KVM docs refer to "-usb" and "-usbdevice" as "legacy interfaces", which will only get you piix3. It seems like exposing the full capabilities of qemu would mean either 1) coming up with a full specifciation which we can then translate into qemu directives, as libvirt seems to do, or 2) just recommend people construct their own qemu command-line options to pass through. It''s not 100% clear to me that 1 is actually less complicated from a user perspective in the long run than 2, and it''s certainly a lot more work... -George _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Ian Campbell
2012-Nov-29 12:25 UTC
Re: [PATCH 2 of 2] xl: Accept a list for usbdevice in config file
On Thu, 2012-11-29 at 12:20 +0000, George Dunlap wrote:> On Thu, Nov 29, 2012 at 11:44 AM, George Dunlap > <george.dunlap@eu.citrix.com> wrote: > qemu.git/vl.c suggests other options might include, "disk:", > "serial:", "net:" and "bt:"; other non-colon-including options > include "keyboard", "mouse", "wacom-tablet", and "braile". > > On the other hand, a number of these seem to require > supplementary options to work well; e.g., network and bt > (bluetooth) require one argument to hook up a USB device, and > another option to say how it''s connected to what. > > It''s also interesting to note that the KVM documentation > doesnt'' mention using "-usb" and "-usbdevice" at all -- they > seem to prefer using "-device" to specify hubs &c. > > Speaking of which, the KVM docs refer to "-usb" and "-usbdevice" as > "legacy interfaces", which will only get you piix3.This is a concern for other types of device too. We seem to invoke new qemu with a mixture of legacy and new-style interfaces.> It seems like exposing the full capabilities of qemu would mean > either 1) coming up with a full specifciation which we can then > translate into qemu directives, as libvirt seems to do, or 2) just > recommend people construct their own qemu command-line options to pass > through.Does libvirt let you care about topologies or just it just automatically create a new USB controller for every N devices you add and hook things up in some order?> It''s not 100% clear to me that 1 is actually less complicated from a > user perspective in the long run than 2, and it''s certainly a lot more > work... > > -George >
George Dunlap
2012-Nov-29 12:27 UTC
Re: [PATCH 2 of 2] xl: Accept a list for usbdevice in config file
On 29/11/12 12:25, Ian Campbell wrote:> On Thu, 2012-11-29 at 12:20 +0000, George Dunlap wrote: >> On Thu, Nov 29, 2012 at 11:44 AM, George Dunlap >> <george.dunlap@eu.citrix.com> wrote: >> qemu.git/vl.c suggests other options might include, "disk:", >> "serial:", "net:" and "bt:"; other non-colon-including options >> include "keyboard", "mouse", "wacom-tablet", and "braile". >> >> On the other hand, a number of these seem to require >> supplementary options to work well; e.g., network and bt >> (bluetooth) require one argument to hook up a USB device, and >> another option to say how it''s connected to what. >> >> It''s also interesting to note that the KVM documentation >> doesnt'' mention using "-usb" and "-usbdevice" at all -- they >> seem to prefer using "-device" to specify hubs &c. >> >> Speaking of which, the KVM docs refer to "-usb" and "-usbdevice" as >> "legacy interfaces", which will only get you piix3. > This is a concern for other types of device too. We seem to invoke new > qemu with a mixture of legacy and new-style interfaces. > >> It seems like exposing the full capabilities of qemu would mean >> either 1) coming up with a full specifciation which we can then >> translate into qemu directives, as libvirt seems to do, or 2) just >> recommend people construct their own qemu command-line options to pass >> through. > Does libvirt let you care about topologies or just it just automatically > create a new USB controller for every N devices you add and hook things > up in some order?No idea -- I took a quick glance through the libvirt docs and I didn''t see anything particular about a topology. I don''t have a system set up with libvirt, so I can''t try it and see what the resulting qemu command line looks like :-) http://libvirt.org/formatdomain.html#elementsUSB -George
Pasi Kärkkäinen
2012-Nov-29 15:03 UTC
Re: [PATCH 2 of 2] xl: Accept a list for usbdevice in config file
On Thu, Nov 29, 2012 at 12:25:56PM +0000, Ian Campbell wrote:> On Thu, 2012-11-29 at 12:20 +0000, George Dunlap wrote: > > On Thu, Nov 29, 2012 at 11:44 AM, George Dunlap > > <george.dunlap@eu.citrix.com> wrote: > > qemu.git/vl.c suggests other options might include, "disk:", > > "serial:", "net:" and "bt:"; other non-colon-including options > > include "keyboard", "mouse", "wacom-tablet", and "braile". > > > > On the other hand, a number of these seem to require > > supplementary options to work well; e.g., network and bt > > (bluetooth) require one argument to hook up a USB device, and > > another option to say how it''s connected to what. > > > > It''s also interesting to note that the KVM documentation > > doesnt'' mention using "-usb" and "-usbdevice" at all -- they > > seem to prefer using "-device" to specify hubs &c. > > > > Speaking of which, the KVM docs refer to "-usb" and "-usbdevice" as > > "legacy interfaces", which will only get you piix3. > > This is a concern for other types of device too. We seem to invoke new > qemu with a mixture of legacy and new-style interfaces. > > > It seems like exposing the full capabilities of qemu would mean > > either 1) coming up with a full specifciation which we can then > > translate into qemu directives, as libvirt seems to do, or 2) just > > recommend people construct their own qemu command-line options to pass > > through. > > Does libvirt let you care about topologies or just it just automatically > create a new USB controller for every N devices you add and hook things > up in some order? >Not sure about libvirt.. quick googling suggests that libvirt doesn''t allow specifying the usb controller. with qemu-kvm you can assign host usb devices to specific usb controllers using the "bus=" option: http://www.linux-kvm.com/content/qemu-kvm-11-adds-experimental-support-usb-30 qemu-kvm -device nec-usb-xhci,id=xhci -device usb-storage,bus=xhci.0,drive=usbstick -- Pasi