[PATCH v2 08/17] tests: Add usb-legacy-device

Andrea Bolognani posted 17 patches 2 years ago
[PATCH v2 08/17] tests: Add usb-legacy-device
Posted by Andrea Bolognani 2 years ago
This provides coverage for the scenario in which an attempt is
made to use a USB device together with the legacy USB controller.

Note that, while the test case passes, the configuration it
produces doesn't actually work:

  $ qemu-system-x86_64 -M pc -usb -device usb-tablet,bus=usb.0
  Bus 'usb.0' not found

This is because the bus created by the legacy USB controller is
automatically assigned ID "usb-bus.0", but libvirt doesn't take
this into consideration when assigning addresses to USB devices.

In other words, the legacy USB controller will only work as long
as no attempt is made to attach devices to it, which arguably
doesn't make for a very useful controller.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
---
 .../usb-legacy-device.x86_64-latest.args      | 33 +++++++++++++++++++
 .../usb-legacy-device.x86_64-latest.xml       | 30 +++++++++++++++++
 tests/qemuxmlconfdata/usb-legacy-device.xml   | 15 +++++++++
 tests/qemuxmlconftest.c                       |  5 +++
 4 files changed, 83 insertions(+)
 create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args
 create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml
 create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.xml

diff --git a/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args
new file mode 100644
index 0000000000..1ef9965cbd
--- /dev/null
+++ b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args
@@ -0,0 +1,33 @@
+LC_ALL=C \
+PATH=/bin \
+HOME=/var/lib/libvirt/qemu/domain--1-guest \
+USER=test \
+LOGNAME=test \
+XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \
+XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \
+XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \
+/usr/bin/qemu-system-x86_64 \
+-name guest=guest,debug-threads=on \
+-S \
+-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \
+-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \
+-accel tcg \
+-cpu qemu64 \
+-m size=4194304k \
+-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":4294967296}' \
+-overcommit mem-lock=off \
+-smp 4,sockets=4,cores=1,threads=1 \
+-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
+-display none \
+-no-user-config \
+-nodefaults \
+-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \
+-mon chardev=charmonitor,id=monitor,mode=control \
+-rtc base=utc \
+-no-shutdown \
+-boot strict=on \
+-usb \
+-device '{"driver":"usb-tablet","id":"input0","bus":"usb.0","port":"1"}' \
+-audiodev '{"id":"audio1","driver":"none"}' \
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
+-msg timestamp=on
diff --git a/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml
new file mode 100644
index 0000000000..2204c03380
--- /dev/null
+++ b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml
@@ -0,0 +1,30 @@
+<domain type='qemu'>
+  <name>guest</name>
+  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
+  <memory unit='KiB'>4194304</memory>
+  <currentMemory unit='KiB'>4194304</currentMemory>
+  <vcpu placement='static'>4</vcpu>
+  <os>
+    <type arch='x86_64' machine='pc'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <cpu mode='custom' match='exact' check='none'>
+    <model fallback='forbid'>qemu64</model>
+  </cpu>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/bin/qemu-system-x86_64</emulator>
+    <controller type='usb' index='0'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+    </controller>
+    <controller type='pci' index='0' model='pci-root'/>
+    <input type='tablet' bus='usb'/>
+    <input type='mouse' bus='ps2'/>
+    <input type='keyboard' bus='ps2'/>
+    <audio id='1' type='none'/>
+    <memballoon model='none'/>
+  </devices>
+</domain>
diff --git a/tests/qemuxmlconfdata/usb-legacy-device.xml b/tests/qemuxmlconfdata/usb-legacy-device.xml
new file mode 100644
index 0000000000..f85b293022
--- /dev/null
+++ b/tests/qemuxmlconfdata/usb-legacy-device.xml
@@ -0,0 +1,15 @@
+<domain type='qemu'>
+  <name>guest</name>
+  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
+  <memory>4194304</memory>
+  <vcpu>4</vcpu>
+  <os>
+    <type arch='x86_64' machine='pc'>hvm</type>
+  </os>
+  <devices>
+    <emulator>/usr/bin/qemu-system-x86_64</emulator>
+    <controller type='usb'/>
+    <input type='tablet' bus='usb'/>
+    <memballoon model='none'/>
+  </devices>
+</domain>
diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c
index b9dcdb81b9..b7778975c3 100644
--- a/tests/qemuxmlconftest.c
+++ b/tests/qemuxmlconftest.c
@@ -1876,6 +1876,11 @@ mymain(void)
                  ARG_FLAGS, FLAG_EXPECT_FAILURE,
                  ARG_QEMU_CAPS_DEL, QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_LAST,
                  ARG_END);
+    DO_TEST_FULL("usb-legacy-device", ".x86_64-latest",
+                 ARG_CAPS_ARCH, "x86_64",
+                 ARG_CAPS_VER, "latest",
+                 ARG_QEMU_CAPS_DEL, QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_LAST,
+                 ARG_END);
 
     DO_TEST_CAPS_LATEST("usb-none");
 
-- 
2.43.0
_______________________________________________
Devel mailing list -- devel@lists.libvirt.org
To unsubscribe send an email to devel-leave@lists.libvirt.org
Re: [PATCH v2 08/17] tests: Add usb-legacy-device
Posted by Peter Krempa 2 years ago
On Wed, Feb 14, 2024 at 18:11:15 +0100, Andrea Bolognani wrote:
> This provides coverage for the scenario in which an attempt is
> made to use a USB device together with the legacy USB controller.
> 
> Note that, while the test case passes, the configuration it
> produces doesn't actually work:
> 
>   $ qemu-system-x86_64 -M pc -usb -device usb-tablet,bus=usb.0
>   Bus 'usb.0' not found
> 
> This is because the bus created by the legacy USB controller is
> automatically assigned ID "usb-bus.0", but libvirt doesn't take
> this into consideration when assigning addresses to USB devices.
> 
> In other words, the legacy USB controller will only work as long
> as no attempt is made to attach devices to it, which arguably
> doesn't make for a very useful controller.

Looking at the history the change of the bus name is documented in
commit f9618633a86cc74b33f178f05154d4edbc08c0fc :

    usb: update docs for bus name change

    At some point the default usb bus name changed from 'usb.0' to
    'usb-bus.0' (probably as part of the qom conversion).  Update
    the usb documentation accordingly.

Released in qemu-1.5.0. The most likely commit which did the change was
0d936928ef87ca1bb7b41b5b89c400c699a7691c ("convert busses to QOM")

Thus arguably we can remove support for '-usb' at least for x86_64, but
almost certainly for anything else too.

> 
> Signed-off-by: Andrea Bolognani <abologna@redhat.com>
> ---
>  .../usb-legacy-device.x86_64-latest.args      | 33 +++++++++++++++++++
>  .../usb-legacy-device.x86_64-latest.xml       | 30 +++++++++++++++++
>  tests/qemuxmlconfdata/usb-legacy-device.xml   | 15 +++++++++
>  tests/qemuxmlconftest.c                       |  5 +++
>  4 files changed, 83 insertions(+)
>  create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args
>  create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml
>  create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.xml

Preliminarily:

Reviewed-by: Peter Krempa <pkrempa@redhat.com>

and I'll see how this changes after the patches reworking the code.
_______________________________________________
Devel mailing list -- devel@lists.libvirt.org
To unsubscribe send an email to devel-leave@lists.libvirt.org
Re: [PATCH v2 08/17] tests: Add usb-legacy-device
Posted by Andrea Bolognani 2 years ago
On Thu, Feb 15, 2024 at 02:29:32PM +0100, Peter Krempa wrote:
> On Wed, Feb 14, 2024 at 18:11:15 +0100, Andrea Bolognani wrote:
> > This provides coverage for the scenario in which an attempt is
> > made to use a USB device together with the legacy USB controller.
> >
> > Note that, while the test case passes, the configuration it
> > produces doesn't actually work:
> >
> >   $ qemu-system-x86_64 -M pc -usb -device usb-tablet,bus=usb.0
> >   Bus 'usb.0' not found
> >
> > This is because the bus created by the legacy USB controller is
> > automatically assigned ID "usb-bus.0", but libvirt doesn't take
> > this into consideration when assigning addresses to USB devices.
> >
> > In other words, the legacy USB controller will only work as long
> > as no attempt is made to attach devices to it, which arguably
> > doesn't make for a very useful controller.
>
> Looking at the history the change of the bus name is documented in
> commit f9618633a86cc74b33f178f05154d4edbc08c0fc :
>
>     usb: update docs for bus name change
>
>     At some point the default usb bus name changed from 'usb.0' to
>     'usb-bus.0' (probably as part of the qom conversion).  Update
>     the usb documentation accordingly.
>
> Released in qemu-1.5.0. The most likely commit which did the change was
> 0d936928ef87ca1bb7b41b5b89c400c699a7691c ("convert busses to QOM")

Good spelunking. I didn't go that far back, I just checked that QEMU
4.2.0 also behaved like this.

> Thus arguably we can remove support for '-usb' at least for x86_64, but
> almost certainly for anything else too.

Spoiler: that's exactly what happens a few additional patches in ;)

-- 
Andrea Bolognani / Red Hat / Virtualization
_______________________________________________
Devel mailing list -- devel@lists.libvirt.org
To unsubscribe send an email to devel-leave@lists.libvirt.org