[libvirt] [PATCHv4 1/9] Allow omitting USB port
John Ferlan
jferlan at redhat.com
Wed Jul 13 20:43:18 UTC 2016
On 07/01/2016 11:38 AM, Ján Tomko wrote:
> We were requiring a USB port path in the schema, but not enforcing it.
> Omitting the USB port would lead to libvirt formatting it as (null).
> Such domain cannot be started and will disappear after libvirtd restart
> (since it cannot parse back the XML).
>
> Only format the port if it has been specified and mark it as optional
> in the XML schema.
> ---
> docs/schemas/domaincommon.rng | 8 +++--
> src/conf/domain_conf.c | 5 ++-
> src/qemu/qemu_command.c | 3 +-
> .../qemuxml2argv-usb-port-missing.args | 26 ++++++++++++++++
> .../qemuxml2argv-usb-port-missing.xml | 25 +++++++++++++++
> tests/qemuxml2argvtest.c | 3 ++
> .../qemuxml2xmlout-usb-port-missing.xml | 36 ++++++++++++++++++++++
> tests/qemuxml2xmltest.c | 1 +
> 8 files changed, 100 insertions(+), 7 deletions(-)
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.xml
> create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-usb-port-missing.xml
>
As pointed out to me during the LUKS changes, if your "data" XML is
essentially the same as your output XML, you could make a file link from
output to data. See the *gic* files for an example. All I did was copy
the output to data, removed output, and then recreated output as file
link to data. It's not a "requirement" and it doesn't really matter to
me, but I think in the effort to reduce the size of things is what
started that. Of course, it's hard to know without tripping across it a
few times...
As long as there's no ABI issues that you can come up with and you fix
the .args file, then ACK
John
> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> index 563cb3c..0876daa 100644
> --- a/docs/schemas/domaincommon.rng
> +++ b/docs/schemas/domaincommon.rng
> @@ -4055,9 +4055,11 @@
> <attribute name="bus">
> <ref name="usbAddr"/>
> </attribute>
> - <attribute name="port">
> - <ref name="usbPort"/>
> - </attribute>
> + <optional>
> + <attribute name="port">
> + <ref name="usbPort"/>
> + </attribute>
> + </optional>
> </define>
> <define name="spaprvioaddress">
> <optional>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index b88afbc..61ad136 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -4859,9 +4859,8 @@ virDomainDeviceInfoFormat(virBufferPtr buf,
> break;
>
> case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB:
> - virBufferAsprintf(buf, " bus='%d' port='%s'",
> - info->addr.usb.bus,
> - info->addr.usb.port);
> + virBufferAsprintf(buf, " bus='%d'", info->addr.usb.bus);
> + virBufferEscapeString(buf, " port='%s'", info->addr.usb.port);
> break;
>
> case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO:
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 3898ed7..90b7684 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -375,7 +375,8 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
> VIR_DOMAIN_CONTROLLER_TYPE_USB,
> info->addr.usb.bus)))
> goto cleanup;
> - virBufferAsprintf(buf, ",bus=%s.0,port=%s", contAlias, info->addr.usb.port);
> + virBufferAsprintf(buf, ",bus=%s.0", contAlias);
> + virBufferEscapeString(buf, ",port=%s", info->addr.usb.port);
> } else if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO) {
> if (info->addr.spaprvio.has_reg)
> virBufferAsprintf(buf, ",reg=0x%llx", info->addr.spaprvio.reg);
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args
> new file mode 100644
> index 0000000..d43c58d
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args
> @@ -0,0 +1,26 @@
> +LC_ALL=C \
> +PATH=/bin \
> +HOME=/home/test \
> +USER=test \
> +LOGNAME=test \
> +QEMU_AUDIO_DRV=none \
> +/usr/bin/qemu \
> +-name QEMUGuest1 \
> +-S \
> +-M pc \
> +-m 214 \
> +-smp 1 \
This will "fail" now without the ",sockets=1,cores=1,threads=1" due to
commit id 'e114b09157'
> +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
> +-nographic \
> +-nodefconfig \
> +-nodefaults \
> +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
> +server,nowait \
> +-mon chardev=charmonitor,id=monitor,mode=readline \
> +-no-acpi \
> +-boot c \
> +-usb \
> +-device usb-hub,id=hub0,bus=usb.0 \
> +-device usb-hub,id=hub1,bus=usb.0 \
> +-device usb-mouse,id=input0,bus=usb.0 \
> +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.xml
> new file mode 100644
> index 0000000..593fcd1
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.xml
> @@ -0,0 +1,25 @@
> +<domain type='qemu'>
> + <name>QEMUGuest1</name>
> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
> + <memory unit='KiB'>219136</memory>
> + <currentMemory unit='KiB'>219136</currentMemory>
> + <vcpu placement='static'>1</vcpu>
> + <os>
> + <type arch='i686' machine='pc'>hvm</type>
> + <boot dev='hd'/>
> + </os>
> + <devices>
> + <emulator>/usr/bin/qemu</emulator>
> + <controller type='usb' index='0'/>
> + <memballoon model='virtio'/>
> + <input type='mouse' bus='usb'>
> + <address type='usb' bus='0'/>
> + </input>
> + <hub type='usb'>
> + <address type='usb' bus='0'/>
> + </hub>
> + <hub type='usb'>
> + <address type='usb' bus='0'/>
> + </hub>
> + </devices>
> +</domain>
> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
> index a73db5e..4389e24 100644
> --- a/tests/qemuxml2argvtest.c
> +++ b/tests/qemuxml2argvtest.c
> @@ -1159,6 +1159,9 @@ mymain(void)
> DO_TEST("usb-hub",
> QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
> QEMU_CAPS_NODEFCONFIG);
> + DO_TEST("usb-port-missing",
> + QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
> + QEMU_CAPS_NODEFCONFIG);
> DO_TEST("usb-ports",
> QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
> QEMU_CAPS_NODEFCONFIG);
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-usb-port-missing.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-usb-port-missing.xml
> new file mode 100644
> index 0000000..2e29cbd
> --- /dev/null
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-usb-port-missing.xml
> @@ -0,0 +1,36 @@
> +<domain type='qemu'>
> + <name>QEMUGuest1</name>
> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
> + <memory unit='KiB'>219136</memory>
> + <currentMemory unit='KiB'>219136</currentMemory>
> + <vcpu placement='static'>1</vcpu>
> + <os>
> + <type arch='i686' machine='pc'>hvm</type>
> + <boot dev='hd'/>
> + </os>
> + <clock offset='utc'/>
> + <on_poweroff>destroy</on_poweroff>
> + <on_reboot>restart</on_reboot>
> + <on_crash>destroy</on_crash>
> + <devices>
> + <emulator>/usr/bin/qemu</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='mouse' bus='usb'>
> + <address type='usb' bus='0'/>
> + </input>
> + <input type='mouse' bus='ps2'/>
> + <input type='keyboard' bus='ps2'/>
> + <hub type='usb'>
> + <address type='usb' bus='0'/>
> + </hub>
> + <hub type='usb'>
> + <address type='usb' bus='0'/>
> + </hub>
> + <memballoon model='virtio'>
> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
> + </memballoon>
> + </devices>
> +</domain>
> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
> index 7db9cb7..c6ef28c 100644
> --- a/tests/qemuxml2xmltest.c
> +++ b/tests/qemuxml2xmltest.c
> @@ -535,6 +535,7 @@ mymain(void)
> DO_TEST("interface-server");
> DO_TEST("virtio-lun");
>
> + DO_TEST("usb-port-missing");
> DO_TEST("usb-redir");
> DO_TEST("usb-redir-filter");
> DO_TEST("usb-redir-filter-version");
>
More information about the libvir-list
mailing list