libvirt/libvirt-qemustatusxml2xml-Add-test-case-capturing-virtio-video-device.patch
Jiri Denemark ea91cce6f3 libvirt-11.10.0-15.el9
- qemu: capabilities: Apply 'capability_filters' configration option on all capabilities (RHEL-177646)
- qemu: capabilities: Export 'virQEMUCapsNewCopy' outside of 'qemu_capspriv' (RHEL-177646)
- qemu: Allow reuse of 'qemuProcessStartUpdateCustomCaps' (RHEL-177646)
- qemu: validate: Validate VM config with qemuCaps influenced by <qemu:capabilities> (RHEL-177646)
- qemu: postparse: Process VM config with qemuCaps influenced by <qemu:capabilities> (RHEL-177646)
- virQEMUCapsCacheLookupDefault: Fix error message when no emulators are installed (RHEL-177646)
- qemuxmlconfdata: un-symlink 'video-virtio-vga-gpu-gl' output (RHEL-177646)
- qemuxmlconftest: Add 'video-virtio-vga' invocation with QEMU_CAPS_DEVICE_VIRTIO_VGA disabled (RHEL-177646)
- qemuxmlconftest: Add test cases for configs asking for 'virtio-gpu-gl' or 'virtio-vga-gl' without the capability (RHEL-177646)
- qemuxmlconftest: Add invocation of 'video-virtio-vga-gpu-gl' with missing caps and VIR_DOMAIN_DEF_PARSE_ABI_UPDATE (RHEL-177646)
- qemustatusxml2xml: Add test case capturing virtio video device (RHEL-177646)
- virDomainVideoDefFormat: Use 'virXMLFormatElement' instead of custom formatter (RHEL-177646)
- conf: Add fields for recording actually-selected virtio video device (RHEL-177646)
- qemuxmlconftest: Add test case for specifying 'virtio-gpu' where 'virtio-vga' would be picked (RHEL-177646)
- qemuDeviceVideoGetModel: Directly return picked model (RHEL-177646)
- qemu: postparse: Fill in selected virtio video frondend device in the XML (RHEL-177646)
- qemuValidateDomainDeviceDefVideo: Fix checks of virtio video devices (RHEL-177646)
- qemuDeviceVideoGetModel: Remove logic for selecting 'virtio' devices (RHEL-177646)
- qemuDeviceVideoGetModel: Simplify by relying on checks from 'qemuValidateDomainDeviceDefVideo' (RHEL-177646)
- qemu: Remove 'qemuDomainSupportsVideoVga' (RHEL-177646)

Resolves: RHEL-177646
2026-07-17 16:12:12 +02:00

1909 lines
72 KiB
Diff

From 5cbc7dbe68ca1743a45567d4bb9d15ad3b8687d9 Mon Sep 17 00:00:00 2001
Message-ID: <5cbc7dbe68ca1743a45567d4bb9d15ad3b8687d9.1784297532.git.jdenemar@redhat.com>
From: Peter Krempa <pkrempa@redhat.com>
Date: Mon, 8 Jun 2026 17:30:50 +0200
Subject: [PATCH] qemustatusxml2xml: Add test case capturing virtio video
device
Add example of two running configs with distinct recorded capabilities
(presence of QEMU_CAPS_DEVICE_VIRTIO_VGA at startup) which will
demonstrate the recording of the picked actual device type on the
commandline.
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 7d4b510bc7f18fc0605efa1cb9aac282c3c24fe6)
https://redhat.atlassian.net/browse/RHEL-186019
Conflicts:
- tests/qemustatusxml2xmldata/virtio-vga-upgrade-in.xml
- tests/qemustatusxml2xmldata/virtio-vga-upgrade-missing-in.xml
- tests/qemustatusxml2xmldata/virtio-vga-upgrade-missing-out.xml
- tests/qemustatusxml2xmldata/virtio-vga-upgrade-out.xml
Context; some qemu capabilities weren't yet backported upstream.
They are not essential to the test
https://redhat.atlassian.net/browse/RHEL-177646 (rhel-9.9)
---
.../virtio-vga-upgrade-in.xml | 461 ++++++++++++++++++
.../virtio-vga-upgrade-missing-in.xml | 459 +++++++++++++++++
.../virtio-vga-upgrade-missing-out.xml | 452 +++++++++++++++++
.../virtio-vga-upgrade-out.xml | 454 +++++++++++++++++
tests/qemuxmlactivetest.c | 6 +
5 files changed, 1832 insertions(+)
create mode 100644 tests/qemustatusxml2xmldata/virtio-vga-upgrade-in.xml
create mode 100644 tests/qemustatusxml2xmldata/virtio-vga-upgrade-missing-in.xml
create mode 100644 tests/qemustatusxml2xmldata/virtio-vga-upgrade-missing-out.xml
create mode 100644 tests/qemustatusxml2xmldata/virtio-vga-upgrade-out.xml
diff --git a/tests/qemustatusxml2xmldata/virtio-vga-upgrade-in.xml b/tests/qemustatusxml2xmldata/virtio-vga-upgrade-in.xml
new file mode 100644
index 0000000000..9be9e920f3
--- /dev/null
+++ b/tests/qemustatusxml2xmldata/virtio-vga-upgrade-in.xml
@@ -0,0 +1,461 @@
+<!--
+WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
+OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
+ virsh edit virtio-vga-test
+or other application using the libvirt API.
+-->
+
+<domstatus state='running' reason='booted' pid='1348839'>
+ <monitor path='/var/lib/libvirt/qemu/domain-2-virtio-vga-test/monitor.sock' type='unix'/>
+ <namespaces>
+ <mount/>
+ </namespaces>
+ <vcpus>
+ <vcpu id='0' pid='1348848'/>
+ <vcpu id='1' pid='1348850'/>
+ </vcpus>
+ <qemuCaps>
+ <flag name='kvm'/>
+ <flag name='sdl'/>
+ <flag name='spice'/>
+ <flag name='hda-duplex'/>
+ <flag name='ccid-emulated'/>
+ <flag name='ccid-passthru'/>
+ <flag name='piix3-usb-uhci'/>
+ <flag name='piix4-usb-uhci'/>
+ <flag name='usb-ehci'/>
+ <flag name='ich9-usb-ehci1'/>
+ <flag name='pci-ohci'/>
+ <flag name='usb-redir'/>
+ <flag name='usb-hub'/>
+ <flag name='ich9-ahci'/>
+ <flag name='scsi-disk.channel'/>
+ <flag name='scsi-block'/>
+ <flag name='hda-micro'/>
+ <flag name='nec-usb-xhci'/>
+ <flag name='lsi'/>
+ <flag name='virtio-scsi-pci'/>
+ <flag name='usb-redir.filter'/>
+ <flag name='seccomp-sandbox'/>
+ <flag name='vnc'/>
+ <flag name='qxl'/>
+ <flag name='VGA'/>
+ <flag name='cirrus-vga'/>
+ <flag name='vmware-svga'/>
+ <flag name='usb-serial'/>
+ <flag name='virtio-rng'/>
+ <flag name='rng-random'/>
+ <flag name='rng-egd'/>
+ <flag name='megasas'/>
+ <flag name='tpm-passthrough'/>
+ <flag name='tpm-tis'/>
+ <flag name='pci-bridge'/>
+ <flag name='vfio-pci'/>
+ <flag name='dmi-to-pci-bridge'/>
+ <flag name='usb-storage'/>
+ <flag name='virtio-mmio'/>
+ <flag name='ich9-intel-hda'/>
+ <flag name='kvm-pit-lost-tick-policy'/>
+ <flag name='pvpanic'/>
+ <flag name='usb-kbd'/>
+ <flag name='usb-audio'/>
+ <flag name='rtc-reset-reinjection'/>
+ <flag name='VGA.vgamem_mb'/>
+ <flag name='vmware-svga.vgamem_mb'/>
+ <flag name='qxl.vgamem_mb'/>
+ <flag name='pc-dimm'/>
+ <flag name='machine-vmport-opt'/>
+ <flag name='pci-serial'/>
+ <flag name='ioh3420'/>
+ <flag name='x3130-upstream'/>
+ <flag name='xio3130-downstream'/>
+ <flag name='rtl8139'/>
+ <flag name='e1000'/>
+ <flag name='virtio-net'/>
+ <flag name='virtio-gpu'/>
+ <flag name='virtio-keyboard'/>
+ <flag name='virtio-mouse'/>
+ <flag name='virtio-tablet'/>
+ <flag name='virtio-input-host'/>
+ <flag name='virtio-balloon-pci.deflate-on-oom'/>
+ <flag name='mptsas1068'/>
+ <flag name='spice-gl'/>
+ <flag name='qxl.vram64_size_mb'/>
+ <flag name='pxb'/>
+ <flag name='pxb-pcie'/>
+ <flag name='intel-iommu'/>
+ <flag name='virtio-vga'/>
+ <flag name='ivshmem-plain'/>
+ <flag name='ivshmem-doorbell'/>
+ <flag name='vhost-scsi'/>
+ <flag name='query-cpu-model-expansion'/>
+ <flag name='spice-rendernode'/>
+ <flag name='nvdimm'/>
+ <flag name='pcie-root-port'/>
+ <flag name='query-cpu-definitions'/>
+ <flag name='qemu-xhci'/>
+ <flag name='intel-iommu.intremap'/>
+ <flag name='intel-iommu.caching-mode'/>
+ <flag name='intel-iommu.eim'/>
+ <flag name='intel-iommu.device-iotlb'/>
+ <flag name='vmcoreinfo'/>
+ <flag name='isa-serial'/>
+ <flag name='pcie-pci-bridge'/>
+ <flag name='nbd-tls'/>
+ <flag name='tpm-crb'/>
+ <flag name='pr-manager-helper'/>
+ <flag name='screendump_device'/>
+ <flag name='hda-output'/>
+ <flag name='vmgenid'/>
+ <flag name='vhost-vsock'/>
+ <flag name='tpm-emulator'/>
+ <flag name='mch'/>
+ <flag name='mch.extended-tseg-mbytes'/>
+ <flag name='egl-headless'/>
+ <flag name='memory-backend-memfd'/>
+ <flag name='memory-backend-memfd.hugetlb'/>
+ <flag name='egl-headless.rendernode'/>
+ <flag name='nvdimm.unarmed'/>
+ <flag name='virtio-pci-non-transitional'/>
+ <flag name='x86-max-cpu'/>
+ <flag name='cpu-unavailable-features'/>
+ <flag name='canonical-cpu-features'/>
+ <flag name='bochs-display'/>
+ <flag name='migration-file-drop-cache'/>
+ <flag name='dbus-vmstate'/>
+ <flag name='vhost-user-gpu'/>
+ <flag name='vhost-user-vga'/>
+ <flag name='query-cpu-model-baseline'/>
+ <flag name='query-cpu-model-comparison'/>
+ <flag name='ramfb'/>
+ <flag name='drive-nvme'/>
+ <flag name='smp-dies'/>
+ <flag name='i8042'/>
+ <flag name='rng-builtin'/>
+ <flag name='vhost-user-fs'/>
+ <flag name='fsdev.multidevs'/>
+ <flag name='pcie-root-port.hotplug'/>
+ <flag name='aio.io_uring'/>
+ <flag name='tcg'/>
+ <flag name='pvscsi'/>
+ <flag name='cpu.migratable'/>
+ <flag name='intel-iommu.aw-bits'/>
+ <flag name='numa.hmat'/>
+ <flag name='usb-host.hostdevice'/>
+ <flag name='virtio-balloon.free-page-reporting'/>
+ <flag name='netdev.vhost-vdpa'/>
+ <flag name='dc390'/>
+ <flag name='am53c974'/>
+ <flag name='virtio-pmem-pci'/>
+ <flag name='vhost-user-fs.bootindex'/>
+ <flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
+ <flag name='memory-backend-file.x-use-canonical-path-for-ramblock-id'/>
+ <flag name='vnc-power-control'/>
+ <flag name='rotation-rate'/>
+ <flag name='acpi-index'/>
+ <flag name='input-linux'/>
+ <flag name='virtio-gpu-gl-pci'/>
+ <flag name='virtio-vga-gl'/>
+ <flag name='confidential-guest-support'/>
+ <flag name='set-action'/>
+ <flag name='virtio-blk.queue-size'/>
+ <flag name='virtio-mem-pci'/>
+ <flag name='memory-backend-file.reserve'/>
+ <flag name='piix4.acpi-root-pci-hotplug'/>
+ <flag name='netdev.json'/>
+ <flag name='query-dirty-rate'/>
+ <flag name='rbd-encryption'/>
+ <flag name='sev-guest-kernel-hashes'/>
+ <flag name='sev-inject-launch-secret'/>
+ <flag name='device.json+hotplug'/>
+ <flag name='virtio-mem-pci.prealloc'/>
+ <flag name='calc-dirty-rate'/>
+ <flag name='dirtyrate-param.mode'/>
+ <flag name='blockdev.nbd.tls-hostname'/>
+ <flag name='memory-backend-file.prealloc-threads'/>
+ <flag name='virtio-iommu-pci'/>
+ <flag name='virtio-iommu.boot-bypass'/>
+ <flag name='virtio-net.rss'/>
+ <flag name='chardev.qemu-vdagent'/>
+ <flag name='display-dbus'/>
+ <flag name='iothread.thread-pool-max'/>
+ <flag name='usb-host.guest-resets-all'/>
+ <flag name='migration.blocked-reasons'/>
+ <flag name='query-stats'/>
+ <flag name='query-stats-schemas'/>
+ <flag name='thread-context'/>
+ <flag name='screenshot-format-png'/>
+ <flag name='machine-hpet'/>
+ <flag name='netdev.stream'/>
+ <flag name='virtio-crypto'/>
+ <flag name='cryptodev-backend-lkcf'/>
+ <flag name='pvpanic-pci'/>
+ <flag name='virtio-gpu.blob'/>
+ <flag name='rbd-encryption-layering'/>
+ <flag name='rbd-encryption-luks-any'/>
+ <flag name='qcow2-discard-no-unref'/>
+ <flag name='run-with.async-teardown'/>
+ <flag name='virtio-blk-vhost-vdpa'/>
+ <flag name='virtio-blk.iothread-mapping'/>
+ <flag name='smp-clusters'/>
+ <flag name='virtio-mem-pci.dynamic-memslots'/>
+ <flag name='blockjob.backing-mask-protocol'/>
+ <flag name='display-reload'/>
+ <flag name='usb-mtp'/>
+ <flag name='virtio-sound'/>
+ <flag name='netdev.user'/>
+ <flag name='acpi-erst'/>
+ <flag name='intel-iommu.dma-translation'/>
+ <flag name='machine-i8042-opt'/>
+ <flag name='chardev-reconnect-miliseconds'/>
+ <flag name='netdev-stream-reconnect-miliseconds'/>
+ <flag name='query-cpu-model-expansion.deprecated-props'/>
+ <flag name='migrate-incoming.exit-on-error'/>
+ <flag name='blockdev-set-active'/>
+ <flag name='shim'/>
+ <flag name='virtio-scsi.iothread-mapping'/>
+ <flag name='bus-floppy'/>
+ <flag name='nvme'/>
+ <flag name='nvme-ns'/>
+ <flag name='amd-iommu'/>
+ <flag name='amd-iommu.pci-id'/>
+ <flag name='usb-bot'/>
+ <flag name='qom-list-get'/>
+ <flag name='acpi-generic-initiator'/>
+ <flag name='disk-timed-stats'/>
+ <flag name='query-accelerators'/>
+ <flag name='scsi-block.migrate-pr'/>
+ <flag name='iommufd'/>
+ </qemuCaps>
+ <devices>
+ <device alias='input0'/>
+ <device alias='pci.7'/>
+ <device alias='pci.13'/>
+ <device alias='pci.4'/>
+ <device alias='pci.1'/>
+ <device alias='pci.10'/>
+ <device alias='video0'/>
+ <device alias='serial0'/>
+ <device alias='balloon0'/>
+ <device alias='pci.9'/>
+ <device alias='pci.12'/>
+ <device alias='pci.6'/>
+ <device alias='usb'/>
+ <device alias='pci.3'/>
+ <device alias='pci.8'/>
+ <device alias='pci.14'/>
+ <device alias='pci.5'/>
+ <device alias='pci.11'/>
+ <device alias='pci.2'/>
+ <device alias='channel0'/>
+ <device alias='virtio-serial0'/>
+ <device alias='rng0'/>
+ </devices>
+ <libDir path='/var/lib/libvirt/qemu/domain-2-virtio-vga-test'/>
+ <channelTargetDir path='/run/libvirt/qemu/channel/2-virtio-vga-test'/>
+ <memoryBackingDir path='/var/lib/libvirt/qemu/ram/2-virtio-vga-test'/>
+ <cpu mode='host-passthrough' check='none' migratable='on'/>
+ <chardevStdioLogd/>
+ <rememberOwner/>
+ <nodename index='0'/>
+ <fdset index='0'/>
+ <blockjobs active='no'/>
+ <agentTimeout>-2</agentTimeout>
+ <domain type='kvm' id='2'>
+ <name>virtio-vga-test</name>
+ <uuid>9ccb5ed0-fda4-4760-a38c-83e5f9eba7cf</uuid>
+ <metadata>
+ <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
+ <libosinfo:os id="http://fedoraproject.org/fedora/43"/>
+ </libosinfo:libosinfo>
+ </metadata>
+ <memory unit='KiB'>4194304</memory>
+ <currentMemory unit='KiB'>4194304</currentMemory>
+ <vcpu placement='static'>2</vcpu>
+ <resource>
+ <partition>/machine</partition>
+ </resource>
+ <os>
+ <type arch='x86_64' machine='pc-q35-11.0'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <features>
+ <acpi/>
+ <apic/>
+ <vmport state='off'/>
+ </features>
+ <cpu mode='host-passthrough' check='none' migratable='on'/>
+ <clock offset='utc'>
+ <timer name='rtc' tickpolicy='catchup'/>
+ <timer name='pit' tickpolicy='delay'/>
+ <timer name='hpet' present='no'/>
+ </clock>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <pm>
+ <suspend-to-mem enabled='no'/>
+ <suspend-to-disk enabled='no'/>
+ </pm>
+ <devices>
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
+ <controller type='usb' index='0' model='qemu-xhci' ports='15'>
+ <alias name='usb'/>
+ <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
+ </controller>
+ <controller type='pci' index='0' model='pcie-root'>
+ <alias name='pcie.0'/>
+ </controller>
+ <controller type='pci' index='1' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='1' port='0x10'/>
+ <alias name='pci.1'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
+ </controller>
+ <controller type='pci' index='2' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='2' port='0x11'/>
+ <alias name='pci.2'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
+ </controller>
+ <controller type='pci' index='3' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='3' port='0x12'/>
+ <alias name='pci.3'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
+ </controller>
+ <controller type='pci' index='4' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='4' port='0x13'/>
+ <alias name='pci.4'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
+ </controller>
+ <controller type='pci' index='5' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='5' port='0x14'/>
+ <alias name='pci.5'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
+ </controller>
+ <controller type='pci' index='6' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='6' port='0x15'/>
+ <alias name='pci.6'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
+ </controller>
+ <controller type='pci' index='7' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='7' port='0x16'/>
+ <alias name='pci.7'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
+ </controller>
+ <controller type='pci' index='8' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='8' port='0x17'/>
+ <alias name='pci.8'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x7'/>
+ </controller>
+ <controller type='pci' index='9' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='9' port='0x18'/>
+ <alias name='pci.9'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='on'/>
+ </controller>
+ <controller type='pci' index='10' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='10' port='0x19'/>
+ <alias name='pci.10'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/>
+ </controller>
+ <controller type='pci' index='11' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='11' port='0x1a'/>
+ <alias name='pci.11'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x2'/>
+ </controller>
+ <controller type='pci' index='12' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='12' port='0x1b'/>
+ <alias name='pci.12'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x3'/>
+ </controller>
+ <controller type='pci' index='13' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='13' port='0x1c'/>
+ <alias name='pci.13'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x4'/>
+ </controller>
+ <controller type='pci' index='14' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='14' port='0x1d'/>
+ <alias name='pci.14'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x5'/>
+ </controller>
+ <controller type='sata' index='0'>
+ <alias name='ide'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
+ </controller>
+ <controller type='virtio-serial' index='0'>
+ <alias name='virtio-serial0'/>
+ <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
+ </controller>
+ <serial type='pty'>
+ <source path='/dev/pts/3'/>
+ <target type='isa-serial' port='0'>
+ <model name='isa-serial'/>
+ </target>
+ <alias name='serial0'/>
+ </serial>
+ <console type='pty' tty='/dev/pts/3'>
+ <source path='/dev/pts/3'/>
+ <target type='serial' port='0'/>
+ <alias name='serial0'/>
+ </console>
+ <channel type='unix'>
+ <source mode='bind' path='/run/libvirt/qemu/channel/2-virtio-vga-test/org.qemu.guest_agent.0'/>
+ <target type='virtio' name='org.qemu.guest_agent.0' state='disconnected'/>
+ <alias name='channel0'/>
+ <address type='virtio-serial' controller='0' bus='0' port='1'/>
+ </channel>
+ <input type='tablet' bus='usb'>
+ <alias name='input0'/>
+ <address type='usb' bus='0' port='1'/>
+ </input>
+ <input type='mouse' bus='ps2'>
+ <alias name='input1'/>
+ </input>
+ <input type='keyboard' bus='ps2'>
+ <alias name='input2'/>
+ </input>
+ <graphics type='vnc' port='5901' autoport='yes' websocketGenerated='no' listen='127.0.0.1'>
+ <listen type='address' address='127.0.0.1' fromConfig='1' autoGenerated='no'/>
+ </graphics>
+ <audio id='1' type='none'/>
+ <video>
+ <model type='virtio' heads='1' primary='yes'/>
+ <alias name='video0'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
+ </video>
+ <watchdog model='itco' action='reset'>
+ <alias name='watchdog0'/>
+ </watchdog>
+ <memballoon model='virtio'>
+ <alias name='balloon0'/>
+ <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
+ </memballoon>
+ <rng model='virtio'>
+ <backend model='random'>/dev/urandom</backend>
+ <alias name='rng0'/>
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
+ </rng>
+ </devices>
+ <seclabel type='dynamic' model='selinux' relabel='yes'>
+ <label>unconfined_u:unconfined_r:svirt_t:s0:c369,c928</label>
+ <imagelabel>unconfined_u:object_r:svirt_image_t:s0:c369,c928</imagelabel>
+ </seclabel>
+ <seclabel type='dynamic' model='dac' relabel='yes'>
+ <label>+107:+107</label>
+ <imagelabel>+107:+107</imagelabel>
+ </seclabel>
+ </domain>
+</domstatus>
diff --git a/tests/qemustatusxml2xmldata/virtio-vga-upgrade-missing-in.xml b/tests/qemustatusxml2xmldata/virtio-vga-upgrade-missing-in.xml
new file mode 100644
index 0000000000..1c4a5b4d02
--- /dev/null
+++ b/tests/qemustatusxml2xmldata/virtio-vga-upgrade-missing-in.xml
@@ -0,0 +1,459 @@
+<!--
+WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
+OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
+ virsh edit virtio-vga-test
+or other application using the libvirt API.
+-->
+
+<domstatus state='running' reason='booted' pid='1348839'>
+ <monitor path='/var/lib/libvirt/qemu/domain-2-virtio-vga-test/monitor.sock' type='unix'/>
+ <namespaces>
+ <mount/>
+ </namespaces>
+ <vcpus>
+ <vcpu id='0' pid='1348848'/>
+ <vcpu id='1' pid='1348850'/>
+ </vcpus>
+ <qemuCaps>
+ <flag name='kvm'/>
+ <flag name='sdl'/>
+ <flag name='spice'/>
+ <flag name='hda-duplex'/>
+ <flag name='ccid-emulated'/>
+ <flag name='ccid-passthru'/>
+ <flag name='piix3-usb-uhci'/>
+ <flag name='piix4-usb-uhci'/>
+ <flag name='usb-ehci'/>
+ <flag name='ich9-usb-ehci1'/>
+ <flag name='pci-ohci'/>
+ <flag name='usb-redir'/>
+ <flag name='usb-hub'/>
+ <flag name='ich9-ahci'/>
+ <flag name='scsi-disk.channel'/>
+ <flag name='scsi-block'/>
+ <flag name='hda-micro'/>
+ <flag name='nec-usb-xhci'/>
+ <flag name='lsi'/>
+ <flag name='virtio-scsi-pci'/>
+ <flag name='usb-redir.filter'/>
+ <flag name='seccomp-sandbox'/>
+ <flag name='vnc'/>
+ <flag name='qxl'/>
+ <flag name='VGA'/>
+ <flag name='cirrus-vga'/>
+ <flag name='vmware-svga'/>
+ <flag name='usb-serial'/>
+ <flag name='virtio-rng'/>
+ <flag name='rng-random'/>
+ <flag name='rng-egd'/>
+ <flag name='megasas'/>
+ <flag name='tpm-passthrough'/>
+ <flag name='tpm-tis'/>
+ <flag name='pci-bridge'/>
+ <flag name='vfio-pci'/>
+ <flag name='dmi-to-pci-bridge'/>
+ <flag name='usb-storage'/>
+ <flag name='virtio-mmio'/>
+ <flag name='ich9-intel-hda'/>
+ <flag name='kvm-pit-lost-tick-policy'/>
+ <flag name='pvpanic'/>
+ <flag name='usb-kbd'/>
+ <flag name='usb-audio'/>
+ <flag name='rtc-reset-reinjection'/>
+ <flag name='VGA.vgamem_mb'/>
+ <flag name='vmware-svga.vgamem_mb'/>
+ <flag name='qxl.vgamem_mb'/>
+ <flag name='pc-dimm'/>
+ <flag name='machine-vmport-opt'/>
+ <flag name='pci-serial'/>
+ <flag name='ioh3420'/>
+ <flag name='x3130-upstream'/>
+ <flag name='xio3130-downstream'/>
+ <flag name='rtl8139'/>
+ <flag name='e1000'/>
+ <flag name='virtio-net'/>
+ <flag name='virtio-gpu'/>
+ <flag name='virtio-keyboard'/>
+ <flag name='virtio-mouse'/>
+ <flag name='virtio-tablet'/>
+ <flag name='virtio-input-host'/>
+ <flag name='virtio-balloon-pci.deflate-on-oom'/>
+ <flag name='mptsas1068'/>
+ <flag name='spice-gl'/>
+ <flag name='qxl.vram64_size_mb'/>
+ <flag name='pxb'/>
+ <flag name='pxb-pcie'/>
+ <flag name='intel-iommu'/>
+ <flag name='ivshmem-plain'/>
+ <flag name='ivshmem-doorbell'/>
+ <flag name='vhost-scsi'/>
+ <flag name='query-cpu-model-expansion'/>
+ <flag name='spice-rendernode'/>
+ <flag name='nvdimm'/>
+ <flag name='pcie-root-port'/>
+ <flag name='query-cpu-definitions'/>
+ <flag name='qemu-xhci'/>
+ <flag name='intel-iommu.intremap'/>
+ <flag name='intel-iommu.caching-mode'/>
+ <flag name='intel-iommu.eim'/>
+ <flag name='intel-iommu.device-iotlb'/>
+ <flag name='vmcoreinfo'/>
+ <flag name='isa-serial'/>
+ <flag name='pcie-pci-bridge'/>
+ <flag name='nbd-tls'/>
+ <flag name='tpm-crb'/>
+ <flag name='pr-manager-helper'/>
+ <flag name='screendump_device'/>
+ <flag name='hda-output'/>
+ <flag name='vmgenid'/>
+ <flag name='vhost-vsock'/>
+ <flag name='tpm-emulator'/>
+ <flag name='mch'/>
+ <flag name='mch.extended-tseg-mbytes'/>
+ <flag name='egl-headless'/>
+ <flag name='memory-backend-memfd'/>
+ <flag name='memory-backend-memfd.hugetlb'/>
+ <flag name='egl-headless.rendernode'/>
+ <flag name='nvdimm.unarmed'/>
+ <flag name='virtio-pci-non-transitional'/>
+ <flag name='x86-max-cpu'/>
+ <flag name='cpu-unavailable-features'/>
+ <flag name='canonical-cpu-features'/>
+ <flag name='bochs-display'/>
+ <flag name='migration-file-drop-cache'/>
+ <flag name='dbus-vmstate'/>
+ <flag name='vhost-user-gpu'/>
+ <flag name='vhost-user-vga'/>
+ <flag name='query-cpu-model-baseline'/>
+ <flag name='query-cpu-model-comparison'/>
+ <flag name='ramfb'/>
+ <flag name='drive-nvme'/>
+ <flag name='smp-dies'/>
+ <flag name='i8042'/>
+ <flag name='rng-builtin'/>
+ <flag name='vhost-user-fs'/>
+ <flag name='fsdev.multidevs'/>
+ <flag name='pcie-root-port.hotplug'/>
+ <flag name='aio.io_uring'/>
+ <flag name='tcg'/>
+ <flag name='pvscsi'/>
+ <flag name='cpu.migratable'/>
+ <flag name='intel-iommu.aw-bits'/>
+ <flag name='numa.hmat'/>
+ <flag name='usb-host.hostdevice'/>
+ <flag name='virtio-balloon.free-page-reporting'/>
+ <flag name='netdev.vhost-vdpa'/>
+ <flag name='dc390'/>
+ <flag name='am53c974'/>
+ <flag name='virtio-pmem-pci'/>
+ <flag name='vhost-user-fs.bootindex'/>
+ <flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
+ <flag name='memory-backend-file.x-use-canonical-path-for-ramblock-id'/>
+ <flag name='vnc-power-control'/>
+ <flag name='rotation-rate'/>
+ <flag name='acpi-index'/>
+ <flag name='input-linux'/>
+ <flag name='virtio-gpu-gl-pci'/>
+ <flag name='confidential-guest-support'/>
+ <flag name='set-action'/>
+ <flag name='virtio-blk.queue-size'/>
+ <flag name='virtio-mem-pci'/>
+ <flag name='memory-backend-file.reserve'/>
+ <flag name='piix4.acpi-root-pci-hotplug'/>
+ <flag name='netdev.json'/>
+ <flag name='query-dirty-rate'/>
+ <flag name='rbd-encryption'/>
+ <flag name='sev-guest-kernel-hashes'/>
+ <flag name='sev-inject-launch-secret'/>
+ <flag name='device.json+hotplug'/>
+ <flag name='virtio-mem-pci.prealloc'/>
+ <flag name='calc-dirty-rate'/>
+ <flag name='dirtyrate-param.mode'/>
+ <flag name='blockdev.nbd.tls-hostname'/>
+ <flag name='memory-backend-file.prealloc-threads'/>
+ <flag name='virtio-iommu-pci'/>
+ <flag name='virtio-iommu.boot-bypass'/>
+ <flag name='virtio-net.rss'/>
+ <flag name='chardev.qemu-vdagent'/>
+ <flag name='display-dbus'/>
+ <flag name='iothread.thread-pool-max'/>
+ <flag name='usb-host.guest-resets-all'/>
+ <flag name='migration.blocked-reasons'/>
+ <flag name='query-stats'/>
+ <flag name='query-stats-schemas'/>
+ <flag name='thread-context'/>
+ <flag name='screenshot-format-png'/>
+ <flag name='machine-hpet'/>
+ <flag name='netdev.stream'/>
+ <flag name='virtio-crypto'/>
+ <flag name='cryptodev-backend-lkcf'/>
+ <flag name='pvpanic-pci'/>
+ <flag name='virtio-gpu.blob'/>
+ <flag name='rbd-encryption-layering'/>
+ <flag name='rbd-encryption-luks-any'/>
+ <flag name='qcow2-discard-no-unref'/>
+ <flag name='run-with.async-teardown'/>
+ <flag name='virtio-blk-vhost-vdpa'/>
+ <flag name='virtio-blk.iothread-mapping'/>
+ <flag name='smp-clusters'/>
+ <flag name='virtio-mem-pci.dynamic-memslots'/>
+ <flag name='blockjob.backing-mask-protocol'/>
+ <flag name='display-reload'/>
+ <flag name='usb-mtp'/>
+ <flag name='virtio-sound'/>
+ <flag name='netdev.user'/>
+ <flag name='acpi-erst'/>
+ <flag name='intel-iommu.dma-translation'/>
+ <flag name='machine-i8042-opt'/>
+ <flag name='chardev-reconnect-miliseconds'/>
+ <flag name='netdev-stream-reconnect-miliseconds'/>
+ <flag name='query-cpu-model-expansion.deprecated-props'/>
+ <flag name='migrate-incoming.exit-on-error'/>
+ <flag name='blockdev-set-active'/>
+ <flag name='shim'/>
+ <flag name='virtio-scsi.iothread-mapping'/>
+ <flag name='bus-floppy'/>
+ <flag name='nvme'/>
+ <flag name='nvme-ns'/>
+ <flag name='amd-iommu'/>
+ <flag name='amd-iommu.pci-id'/>
+ <flag name='usb-bot'/>
+ <flag name='qom-list-get'/>
+ <flag name='acpi-generic-initiator'/>
+ <flag name='disk-timed-stats'/>
+ <flag name='query-accelerators'/>
+ <flag name='scsi-block.migrate-pr'/>
+ <flag name='iommufd'/>
+ </qemuCaps>
+ <devices>
+ <device alias='input0'/>
+ <device alias='pci.7'/>
+ <device alias='pci.13'/>
+ <device alias='pci.4'/>
+ <device alias='pci.1'/>
+ <device alias='pci.10'/>
+ <device alias='video0'/>
+ <device alias='serial0'/>
+ <device alias='balloon0'/>
+ <device alias='pci.9'/>
+ <device alias='pci.12'/>
+ <device alias='pci.6'/>
+ <device alias='usb'/>
+ <device alias='pci.3'/>
+ <device alias='pci.8'/>
+ <device alias='pci.14'/>
+ <device alias='pci.5'/>
+ <device alias='pci.11'/>
+ <device alias='pci.2'/>
+ <device alias='channel0'/>
+ <device alias='virtio-serial0'/>
+ <device alias='rng0'/>
+ </devices>
+ <libDir path='/var/lib/libvirt/qemu/domain-2-virtio-vga-test'/>
+ <channelTargetDir path='/run/libvirt/qemu/channel/2-virtio-vga-test'/>
+ <memoryBackingDir path='/var/lib/libvirt/qemu/ram/2-virtio-vga-test'/>
+ <cpu mode='host-passthrough' check='none' migratable='on'/>
+ <chardevStdioLogd/>
+ <rememberOwner/>
+ <nodename index='0'/>
+ <fdset index='0'/>
+ <blockjobs active='no'/>
+ <agentTimeout>-2</agentTimeout>
+ <domain type='kvm' id='2'>
+ <name>virtio-vga-test</name>
+ <uuid>9ccb5ed0-fda4-4760-a38c-83e5f9eba7cf</uuid>
+ <metadata>
+ <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
+ <libosinfo:os id="http://fedoraproject.org/fedora/43"/>
+ </libosinfo:libosinfo>
+ </metadata>
+ <memory unit='KiB'>4194304</memory>
+ <currentMemory unit='KiB'>4194304</currentMemory>
+ <vcpu placement='static'>2</vcpu>
+ <resource>
+ <partition>/machine</partition>
+ </resource>
+ <os>
+ <type arch='x86_64' machine='pc-q35-11.0'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <features>
+ <acpi/>
+ <apic/>
+ <vmport state='off'/>
+ </features>
+ <cpu mode='host-passthrough' check='none' migratable='on'/>
+ <clock offset='utc'>
+ <timer name='rtc' tickpolicy='catchup'/>
+ <timer name='pit' tickpolicy='delay'/>
+ <timer name='hpet' present='no'/>
+ </clock>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <pm>
+ <suspend-to-mem enabled='no'/>
+ <suspend-to-disk enabled='no'/>
+ </pm>
+ <devices>
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
+ <controller type='usb' index='0' model='qemu-xhci' ports='15'>
+ <alias name='usb'/>
+ <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
+ </controller>
+ <controller type='pci' index='0' model='pcie-root'>
+ <alias name='pcie.0'/>
+ </controller>
+ <controller type='pci' index='1' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='1' port='0x10'/>
+ <alias name='pci.1'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
+ </controller>
+ <controller type='pci' index='2' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='2' port='0x11'/>
+ <alias name='pci.2'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
+ </controller>
+ <controller type='pci' index='3' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='3' port='0x12'/>
+ <alias name='pci.3'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
+ </controller>
+ <controller type='pci' index='4' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='4' port='0x13'/>
+ <alias name='pci.4'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
+ </controller>
+ <controller type='pci' index='5' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='5' port='0x14'/>
+ <alias name='pci.5'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
+ </controller>
+ <controller type='pci' index='6' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='6' port='0x15'/>
+ <alias name='pci.6'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
+ </controller>
+ <controller type='pci' index='7' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='7' port='0x16'/>
+ <alias name='pci.7'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
+ </controller>
+ <controller type='pci' index='8' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='8' port='0x17'/>
+ <alias name='pci.8'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x7'/>
+ </controller>
+ <controller type='pci' index='9' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='9' port='0x18'/>
+ <alias name='pci.9'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='on'/>
+ </controller>
+ <controller type='pci' index='10' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='10' port='0x19'/>
+ <alias name='pci.10'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/>
+ </controller>
+ <controller type='pci' index='11' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='11' port='0x1a'/>
+ <alias name='pci.11'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x2'/>
+ </controller>
+ <controller type='pci' index='12' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='12' port='0x1b'/>
+ <alias name='pci.12'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x3'/>
+ </controller>
+ <controller type='pci' index='13' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='13' port='0x1c'/>
+ <alias name='pci.13'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x4'/>
+ </controller>
+ <controller type='pci' index='14' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='14' port='0x1d'/>
+ <alias name='pci.14'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x5'/>
+ </controller>
+ <controller type='sata' index='0'>
+ <alias name='ide'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
+ </controller>
+ <controller type='virtio-serial' index='0'>
+ <alias name='virtio-serial0'/>
+ <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
+ </controller>
+ <serial type='pty'>
+ <source path='/dev/pts/3'/>
+ <target type='isa-serial' port='0'>
+ <model name='isa-serial'/>
+ </target>
+ <alias name='serial0'/>
+ </serial>
+ <console type='pty' tty='/dev/pts/3'>
+ <source path='/dev/pts/3'/>
+ <target type='serial' port='0'/>
+ <alias name='serial0'/>
+ </console>
+ <channel type='unix'>
+ <source mode='bind' path='/run/libvirt/qemu/channel/2-virtio-vga-test/org.qemu.guest_agent.0'/>
+ <target type='virtio' name='org.qemu.guest_agent.0' state='disconnected'/>
+ <alias name='channel0'/>
+ <address type='virtio-serial' controller='0' bus='0' port='1'/>
+ </channel>
+ <input type='tablet' bus='usb'>
+ <alias name='input0'/>
+ <address type='usb' bus='0' port='1'/>
+ </input>
+ <input type='mouse' bus='ps2'>
+ <alias name='input1'/>
+ </input>
+ <input type='keyboard' bus='ps2'>
+ <alias name='input2'/>
+ </input>
+ <graphics type='vnc' port='5901' autoport='yes' websocketGenerated='no' listen='127.0.0.1'>
+ <listen type='address' address='127.0.0.1' fromConfig='1' autoGenerated='no'/>
+ </graphics>
+ <audio id='1' type='none'/>
+ <video>
+ <model type='virtio' heads='1' primary='yes'/>
+ <alias name='video0'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
+ </video>
+ <watchdog model='itco' action='reset'>
+ <alias name='watchdog0'/>
+ </watchdog>
+ <memballoon model='virtio'>
+ <alias name='balloon0'/>
+ <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
+ </memballoon>
+ <rng model='virtio'>
+ <backend model='random'>/dev/urandom</backend>
+ <alias name='rng0'/>
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
+ </rng>
+ </devices>
+ <seclabel type='dynamic' model='selinux' relabel='yes'>
+ <label>unconfined_u:unconfined_r:svirt_t:s0:c369,c928</label>
+ <imagelabel>unconfined_u:object_r:svirt_image_t:s0:c369,c928</imagelabel>
+ </seclabel>
+ <seclabel type='dynamic' model='dac' relabel='yes'>
+ <label>+107:+107</label>
+ <imagelabel>+107:+107</imagelabel>
+ </seclabel>
+ </domain>
+</domstatus>
diff --git a/tests/qemustatusxml2xmldata/virtio-vga-upgrade-missing-out.xml b/tests/qemustatusxml2xmldata/virtio-vga-upgrade-missing-out.xml
new file mode 100644
index 0000000000..e7b3dd17ed
--- /dev/null
+++ b/tests/qemustatusxml2xmldata/virtio-vga-upgrade-missing-out.xml
@@ -0,0 +1,452 @@
+<domstatus state='running' reason='booted' pid='1348839'>
+ <monitor path='/var/lib/libvirt/qemu/domain-2-virtio-vga-test/monitor.sock' type='unix'/>
+ <namespaces>
+ <mount/>
+ </namespaces>
+ <vcpus>
+ <vcpu id='0' pid='1348848'/>
+ <vcpu id='1' pid='1348850'/>
+ </vcpus>
+ <qemuCaps>
+ <flag name='kvm'/>
+ <flag name='sdl'/>
+ <flag name='spice'/>
+ <flag name='hda-duplex'/>
+ <flag name='ccid-emulated'/>
+ <flag name='ccid-passthru'/>
+ <flag name='piix3-usb-uhci'/>
+ <flag name='piix4-usb-uhci'/>
+ <flag name='usb-ehci'/>
+ <flag name='ich9-usb-ehci1'/>
+ <flag name='pci-ohci'/>
+ <flag name='usb-redir'/>
+ <flag name='usb-hub'/>
+ <flag name='ich9-ahci'/>
+ <flag name='scsi-disk.channel'/>
+ <flag name='scsi-block'/>
+ <flag name='hda-micro'/>
+ <flag name='nec-usb-xhci'/>
+ <flag name='lsi'/>
+ <flag name='virtio-scsi-pci'/>
+ <flag name='usb-redir.filter'/>
+ <flag name='seccomp-sandbox'/>
+ <flag name='vnc'/>
+ <flag name='qxl'/>
+ <flag name='VGA'/>
+ <flag name='cirrus-vga'/>
+ <flag name='vmware-svga'/>
+ <flag name='usb-serial'/>
+ <flag name='virtio-rng'/>
+ <flag name='rng-random'/>
+ <flag name='rng-egd'/>
+ <flag name='megasas'/>
+ <flag name='tpm-passthrough'/>
+ <flag name='tpm-tis'/>
+ <flag name='pci-bridge'/>
+ <flag name='vfio-pci'/>
+ <flag name='dmi-to-pci-bridge'/>
+ <flag name='usb-storage'/>
+ <flag name='virtio-mmio'/>
+ <flag name='ich9-intel-hda'/>
+ <flag name='kvm-pit-lost-tick-policy'/>
+ <flag name='pvpanic'/>
+ <flag name='usb-kbd'/>
+ <flag name='usb-audio'/>
+ <flag name='rtc-reset-reinjection'/>
+ <flag name='VGA.vgamem_mb'/>
+ <flag name='vmware-svga.vgamem_mb'/>
+ <flag name='qxl.vgamem_mb'/>
+ <flag name='pc-dimm'/>
+ <flag name='machine-vmport-opt'/>
+ <flag name='pci-serial'/>
+ <flag name='ioh3420'/>
+ <flag name='x3130-upstream'/>
+ <flag name='xio3130-downstream'/>
+ <flag name='rtl8139'/>
+ <flag name='e1000'/>
+ <flag name='virtio-net'/>
+ <flag name='virtio-gpu'/>
+ <flag name='virtio-keyboard'/>
+ <flag name='virtio-mouse'/>
+ <flag name='virtio-tablet'/>
+ <flag name='virtio-input-host'/>
+ <flag name='virtio-balloon-pci.deflate-on-oom'/>
+ <flag name='mptsas1068'/>
+ <flag name='spice-gl'/>
+ <flag name='qxl.vram64_size_mb'/>
+ <flag name='pxb'/>
+ <flag name='pxb-pcie'/>
+ <flag name='intel-iommu'/>
+ <flag name='ivshmem-plain'/>
+ <flag name='ivshmem-doorbell'/>
+ <flag name='vhost-scsi'/>
+ <flag name='query-cpu-model-expansion'/>
+ <flag name='spice-rendernode'/>
+ <flag name='nvdimm'/>
+ <flag name='pcie-root-port'/>
+ <flag name='query-cpu-definitions'/>
+ <flag name='qemu-xhci'/>
+ <flag name='intel-iommu.intremap'/>
+ <flag name='intel-iommu.caching-mode'/>
+ <flag name='intel-iommu.eim'/>
+ <flag name='intel-iommu.device-iotlb'/>
+ <flag name='vmcoreinfo'/>
+ <flag name='isa-serial'/>
+ <flag name='pcie-pci-bridge'/>
+ <flag name='nbd-tls'/>
+ <flag name='tpm-crb'/>
+ <flag name='pr-manager-helper'/>
+ <flag name='screendump_device'/>
+ <flag name='hda-output'/>
+ <flag name='vmgenid'/>
+ <flag name='vhost-vsock'/>
+ <flag name='tpm-emulator'/>
+ <flag name='mch'/>
+ <flag name='mch.extended-tseg-mbytes'/>
+ <flag name='egl-headless'/>
+ <flag name='memory-backend-memfd'/>
+ <flag name='memory-backend-memfd.hugetlb'/>
+ <flag name='egl-headless.rendernode'/>
+ <flag name='nvdimm.unarmed'/>
+ <flag name='virtio-pci-non-transitional'/>
+ <flag name='x86-max-cpu'/>
+ <flag name='cpu-unavailable-features'/>
+ <flag name='canonical-cpu-features'/>
+ <flag name='bochs-display'/>
+ <flag name='migration-file-drop-cache'/>
+ <flag name='dbus-vmstate'/>
+ <flag name='vhost-user-gpu'/>
+ <flag name='vhost-user-vga'/>
+ <flag name='query-cpu-model-baseline'/>
+ <flag name='query-cpu-model-comparison'/>
+ <flag name='ramfb'/>
+ <flag name='drive-nvme'/>
+ <flag name='smp-dies'/>
+ <flag name='i8042'/>
+ <flag name='rng-builtin'/>
+ <flag name='vhost-user-fs'/>
+ <flag name='fsdev.multidevs'/>
+ <flag name='pcie-root-port.hotplug'/>
+ <flag name='aio.io_uring'/>
+ <flag name='tcg'/>
+ <flag name='pvscsi'/>
+ <flag name='cpu.migratable'/>
+ <flag name='intel-iommu.aw-bits'/>
+ <flag name='numa.hmat'/>
+ <flag name='usb-host.hostdevice'/>
+ <flag name='virtio-balloon.free-page-reporting'/>
+ <flag name='netdev.vhost-vdpa'/>
+ <flag name='dc390'/>
+ <flag name='am53c974'/>
+ <flag name='virtio-pmem-pci'/>
+ <flag name='vhost-user-fs.bootindex'/>
+ <flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
+ <flag name='memory-backend-file.x-use-canonical-path-for-ramblock-id'/>
+ <flag name='vnc-power-control'/>
+ <flag name='rotation-rate'/>
+ <flag name='acpi-index'/>
+ <flag name='input-linux'/>
+ <flag name='virtio-gpu-gl-pci'/>
+ <flag name='confidential-guest-support'/>
+ <flag name='set-action'/>
+ <flag name='virtio-blk.queue-size'/>
+ <flag name='virtio-mem-pci'/>
+ <flag name='memory-backend-file.reserve'/>
+ <flag name='piix4.acpi-root-pci-hotplug'/>
+ <flag name='netdev.json'/>
+ <flag name='query-dirty-rate'/>
+ <flag name='rbd-encryption'/>
+ <flag name='sev-guest-kernel-hashes'/>
+ <flag name='sev-inject-launch-secret'/>
+ <flag name='device.json+hotplug'/>
+ <flag name='virtio-mem-pci.prealloc'/>
+ <flag name='calc-dirty-rate'/>
+ <flag name='dirtyrate-param.mode'/>
+ <flag name='blockdev.nbd.tls-hostname'/>
+ <flag name='memory-backend-file.prealloc-threads'/>
+ <flag name='virtio-iommu-pci'/>
+ <flag name='virtio-iommu.boot-bypass'/>
+ <flag name='virtio-net.rss'/>
+ <flag name='chardev.qemu-vdagent'/>
+ <flag name='display-dbus'/>
+ <flag name='iothread.thread-pool-max'/>
+ <flag name='usb-host.guest-resets-all'/>
+ <flag name='migration.blocked-reasons'/>
+ <flag name='query-stats'/>
+ <flag name='query-stats-schemas'/>
+ <flag name='thread-context'/>
+ <flag name='screenshot-format-png'/>
+ <flag name='machine-hpet'/>
+ <flag name='netdev.stream'/>
+ <flag name='virtio-crypto'/>
+ <flag name='cryptodev-backend-lkcf'/>
+ <flag name='pvpanic-pci'/>
+ <flag name='virtio-gpu.blob'/>
+ <flag name='rbd-encryption-layering'/>
+ <flag name='rbd-encryption-luks-any'/>
+ <flag name='qcow2-discard-no-unref'/>
+ <flag name='run-with.async-teardown'/>
+ <flag name='virtio-blk-vhost-vdpa'/>
+ <flag name='virtio-blk.iothread-mapping'/>
+ <flag name='smp-clusters'/>
+ <flag name='virtio-mem-pci.dynamic-memslots'/>
+ <flag name='blockjob.backing-mask-protocol'/>
+ <flag name='display-reload'/>
+ <flag name='usb-mtp'/>
+ <flag name='virtio-sound'/>
+ <flag name='netdev.user'/>
+ <flag name='acpi-erst'/>
+ <flag name='intel-iommu.dma-translation'/>
+ <flag name='machine-i8042-opt'/>
+ <flag name='chardev-reconnect-miliseconds'/>
+ <flag name='netdev-stream-reconnect-miliseconds'/>
+ <flag name='query-cpu-model-expansion.deprecated-props'/>
+ <flag name='migrate-incoming.exit-on-error'/>
+ <flag name='blockdev-set-active'/>
+ <flag name='shim'/>
+ <flag name='virtio-scsi.iothread-mapping'/>
+ <flag name='bus-floppy'/>
+ <flag name='nvme'/>
+ <flag name='nvme-ns'/>
+ <flag name='amd-iommu'/>
+ <flag name='amd-iommu.pci-id'/>
+ <flag name='usb-bot'/>
+ <flag name='qom-list-get'/>
+ <flag name='acpi-generic-initiator'/>
+ <flag name='disk-timed-stats'/>
+ <flag name='query-accelerators'/>
+ <flag name='scsi-block.migrate-pr'/>
+ <flag name='iommufd'/>
+ </qemuCaps>
+ <devices>
+ <device alias='input0'/>
+ <device alias='pci.7'/>
+ <device alias='pci.13'/>
+ <device alias='pci.4'/>
+ <device alias='pci.1'/>
+ <device alias='pci.10'/>
+ <device alias='video0'/>
+ <device alias='serial0'/>
+ <device alias='balloon0'/>
+ <device alias='pci.9'/>
+ <device alias='pci.12'/>
+ <device alias='pci.6'/>
+ <device alias='usb'/>
+ <device alias='pci.3'/>
+ <device alias='pci.8'/>
+ <device alias='pci.14'/>
+ <device alias='pci.5'/>
+ <device alias='pci.11'/>
+ <device alias='pci.2'/>
+ <device alias='channel0'/>
+ <device alias='virtio-serial0'/>
+ <device alias='rng0'/>
+ </devices>
+ <libDir path='/var/lib/libvirt/qemu/domain-2-virtio-vga-test'/>
+ <channelTargetDir path='/run/libvirt/qemu/channel/2-virtio-vga-test'/>
+ <memoryBackingDir path='/var/lib/libvirt/qemu/ram/2-virtio-vga-test'/>
+ <cpu mode='host-passthrough' check='none' migratable='on'/>
+ <chardevStdioLogd/>
+ <rememberOwner/>
+ <nodename index='0'/>
+ <fdset index='0'/>
+ <blockjobs active='no'/>
+ <agentTimeout>-2</agentTimeout>
+ <domain type='kvm' id='2'>
+ <name>virtio-vga-test</name>
+ <uuid>9ccb5ed0-fda4-4760-a38c-83e5f9eba7cf</uuid>
+ <metadata>
+ <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
+ <libosinfo:os id="http://fedoraproject.org/fedora/43"/>
+ </libosinfo:libosinfo>
+ </metadata>
+ <memory unit='KiB'>4194304</memory>
+ <currentMemory unit='KiB'>4194304</currentMemory>
+ <vcpu placement='static'>2</vcpu>
+ <resource>
+ <partition>/machine</partition>
+ </resource>
+ <os>
+ <type arch='x86_64' machine='pc-q35-11.0'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <features>
+ <acpi/>
+ <apic/>
+ <vmport state='off'/>
+ </features>
+ <cpu mode='host-passthrough' check='none' migratable='on'/>
+ <clock offset='utc'>
+ <timer name='rtc' tickpolicy='catchup'/>
+ <timer name='pit' tickpolicy='delay'/>
+ <timer name='hpet' present='no'/>
+ </clock>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <pm>
+ <suspend-to-mem enabled='no'/>
+ <suspend-to-disk enabled='no'/>
+ </pm>
+ <devices>
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
+ <controller type='usb' index='0' model='qemu-xhci' ports='15'>
+ <alias name='usb'/>
+ <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
+ </controller>
+ <controller type='pci' index='0' model='pcie-root'>
+ <alias name='pcie.0'/>
+ </controller>
+ <controller type='pci' index='1' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='1' port='0x10'/>
+ <alias name='pci.1'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
+ </controller>
+ <controller type='pci' index='2' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='2' port='0x11'/>
+ <alias name='pci.2'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
+ </controller>
+ <controller type='pci' index='3' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='3' port='0x12'/>
+ <alias name='pci.3'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
+ </controller>
+ <controller type='pci' index='4' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='4' port='0x13'/>
+ <alias name='pci.4'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
+ </controller>
+ <controller type='pci' index='5' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='5' port='0x14'/>
+ <alias name='pci.5'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
+ </controller>
+ <controller type='pci' index='6' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='6' port='0x15'/>
+ <alias name='pci.6'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
+ </controller>
+ <controller type='pci' index='7' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='7' port='0x16'/>
+ <alias name='pci.7'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
+ </controller>
+ <controller type='pci' index='8' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='8' port='0x17'/>
+ <alias name='pci.8'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x7'/>
+ </controller>
+ <controller type='pci' index='9' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='9' port='0x18'/>
+ <alias name='pci.9'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='on'/>
+ </controller>
+ <controller type='pci' index='10' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='10' port='0x19'/>
+ <alias name='pci.10'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/>
+ </controller>
+ <controller type='pci' index='11' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='11' port='0x1a'/>
+ <alias name='pci.11'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x2'/>
+ </controller>
+ <controller type='pci' index='12' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='12' port='0x1b'/>
+ <alias name='pci.12'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x3'/>
+ </controller>
+ <controller type='pci' index='13' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='13' port='0x1c'/>
+ <alias name='pci.13'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x4'/>
+ </controller>
+ <controller type='pci' index='14' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='14' port='0x1d'/>
+ <alias name='pci.14'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x5'/>
+ </controller>
+ <controller type='sata' index='0'>
+ <alias name='ide'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
+ </controller>
+ <controller type='virtio-serial' index='0'>
+ <alias name='virtio-serial0'/>
+ <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
+ </controller>
+ <serial type='pty'>
+ <source path='/dev/pts/3'/>
+ <target type='isa-serial' port='0'>
+ <model name='isa-serial'/>
+ </target>
+ <alias name='serial0'/>
+ </serial>
+ <console type='pty' tty='/dev/pts/3'>
+ <source path='/dev/pts/3'/>
+ <target type='serial' port='0'/>
+ <alias name='serial0'/>
+ </console>
+ <channel type='unix'>
+ <source mode='bind' path='/run/libvirt/qemu/channel/2-virtio-vga-test/org.qemu.guest_agent.0'/>
+ <target type='virtio' name='org.qemu.guest_agent.0' state='disconnected'/>
+ <alias name='channel0'/>
+ <address type='virtio-serial' controller='0' bus='0' port='1'/>
+ </channel>
+ <input type='tablet' bus='usb'>
+ <alias name='input0'/>
+ <address type='usb' bus='0' port='1'/>
+ </input>
+ <input type='mouse' bus='ps2'>
+ <alias name='input1'/>
+ </input>
+ <input type='keyboard' bus='ps2'>
+ <alias name='input2'/>
+ </input>
+ <graphics type='vnc' port='5901' autoport='yes' websocketGenerated='no' listen='127.0.0.1'>
+ <listen type='address' address='127.0.0.1' fromConfig='1' autoGenerated='no'/>
+ </graphics>
+ <audio id='1' type='none'/>
+ <video>
+ <model type='virtio' heads='1' primary='yes'/>
+ <alias name='video0'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
+ </video>
+ <watchdog model='itco' action='reset'>
+ <alias name='watchdog0'/>
+ </watchdog>
+ <memballoon model='virtio'>
+ <alias name='balloon0'/>
+ <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
+ </memballoon>
+ <rng model='virtio'>
+ <backend model='random'>/dev/urandom</backend>
+ <alias name='rng0'/>
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
+ </rng>
+ </devices>
+ <seclabel type='dynamic' model='selinux' relabel='yes'>
+ <label>unconfined_u:unconfined_r:svirt_t:s0:c369,c928</label>
+ <imagelabel>unconfined_u:object_r:svirt_image_t:s0:c369,c928</imagelabel>
+ </seclabel>
+ <seclabel type='dynamic' model='dac' relabel='yes'>
+ <label>+107:+107</label>
+ <imagelabel>+107:+107</imagelabel>
+ </seclabel>
+ </domain>
+</domstatus>
diff --git a/tests/qemustatusxml2xmldata/virtio-vga-upgrade-out.xml b/tests/qemustatusxml2xmldata/virtio-vga-upgrade-out.xml
new file mode 100644
index 0000000000..948d4c8135
--- /dev/null
+++ b/tests/qemustatusxml2xmldata/virtio-vga-upgrade-out.xml
@@ -0,0 +1,454 @@
+<domstatus state='running' reason='booted' pid='1348839'>
+ <monitor path='/var/lib/libvirt/qemu/domain-2-virtio-vga-test/monitor.sock' type='unix'/>
+ <namespaces>
+ <mount/>
+ </namespaces>
+ <vcpus>
+ <vcpu id='0' pid='1348848'/>
+ <vcpu id='1' pid='1348850'/>
+ </vcpus>
+ <qemuCaps>
+ <flag name='kvm'/>
+ <flag name='sdl'/>
+ <flag name='spice'/>
+ <flag name='hda-duplex'/>
+ <flag name='ccid-emulated'/>
+ <flag name='ccid-passthru'/>
+ <flag name='piix3-usb-uhci'/>
+ <flag name='piix4-usb-uhci'/>
+ <flag name='usb-ehci'/>
+ <flag name='ich9-usb-ehci1'/>
+ <flag name='pci-ohci'/>
+ <flag name='usb-redir'/>
+ <flag name='usb-hub'/>
+ <flag name='ich9-ahci'/>
+ <flag name='scsi-disk.channel'/>
+ <flag name='scsi-block'/>
+ <flag name='hda-micro'/>
+ <flag name='nec-usb-xhci'/>
+ <flag name='lsi'/>
+ <flag name='virtio-scsi-pci'/>
+ <flag name='usb-redir.filter'/>
+ <flag name='seccomp-sandbox'/>
+ <flag name='vnc'/>
+ <flag name='qxl'/>
+ <flag name='VGA'/>
+ <flag name='cirrus-vga'/>
+ <flag name='vmware-svga'/>
+ <flag name='usb-serial'/>
+ <flag name='virtio-rng'/>
+ <flag name='rng-random'/>
+ <flag name='rng-egd'/>
+ <flag name='megasas'/>
+ <flag name='tpm-passthrough'/>
+ <flag name='tpm-tis'/>
+ <flag name='pci-bridge'/>
+ <flag name='vfio-pci'/>
+ <flag name='dmi-to-pci-bridge'/>
+ <flag name='usb-storage'/>
+ <flag name='virtio-mmio'/>
+ <flag name='ich9-intel-hda'/>
+ <flag name='kvm-pit-lost-tick-policy'/>
+ <flag name='pvpanic'/>
+ <flag name='usb-kbd'/>
+ <flag name='usb-audio'/>
+ <flag name='rtc-reset-reinjection'/>
+ <flag name='VGA.vgamem_mb'/>
+ <flag name='vmware-svga.vgamem_mb'/>
+ <flag name='qxl.vgamem_mb'/>
+ <flag name='pc-dimm'/>
+ <flag name='machine-vmport-opt'/>
+ <flag name='pci-serial'/>
+ <flag name='ioh3420'/>
+ <flag name='x3130-upstream'/>
+ <flag name='xio3130-downstream'/>
+ <flag name='rtl8139'/>
+ <flag name='e1000'/>
+ <flag name='virtio-net'/>
+ <flag name='virtio-gpu'/>
+ <flag name='virtio-keyboard'/>
+ <flag name='virtio-mouse'/>
+ <flag name='virtio-tablet'/>
+ <flag name='virtio-input-host'/>
+ <flag name='virtio-balloon-pci.deflate-on-oom'/>
+ <flag name='mptsas1068'/>
+ <flag name='spice-gl'/>
+ <flag name='qxl.vram64_size_mb'/>
+ <flag name='pxb'/>
+ <flag name='pxb-pcie'/>
+ <flag name='intel-iommu'/>
+ <flag name='virtio-vga'/>
+ <flag name='ivshmem-plain'/>
+ <flag name='ivshmem-doorbell'/>
+ <flag name='vhost-scsi'/>
+ <flag name='query-cpu-model-expansion'/>
+ <flag name='spice-rendernode'/>
+ <flag name='nvdimm'/>
+ <flag name='pcie-root-port'/>
+ <flag name='query-cpu-definitions'/>
+ <flag name='qemu-xhci'/>
+ <flag name='intel-iommu.intremap'/>
+ <flag name='intel-iommu.caching-mode'/>
+ <flag name='intel-iommu.eim'/>
+ <flag name='intel-iommu.device-iotlb'/>
+ <flag name='vmcoreinfo'/>
+ <flag name='isa-serial'/>
+ <flag name='pcie-pci-bridge'/>
+ <flag name='nbd-tls'/>
+ <flag name='tpm-crb'/>
+ <flag name='pr-manager-helper'/>
+ <flag name='screendump_device'/>
+ <flag name='hda-output'/>
+ <flag name='vmgenid'/>
+ <flag name='vhost-vsock'/>
+ <flag name='tpm-emulator'/>
+ <flag name='mch'/>
+ <flag name='mch.extended-tseg-mbytes'/>
+ <flag name='egl-headless'/>
+ <flag name='memory-backend-memfd'/>
+ <flag name='memory-backend-memfd.hugetlb'/>
+ <flag name='egl-headless.rendernode'/>
+ <flag name='nvdimm.unarmed'/>
+ <flag name='virtio-pci-non-transitional'/>
+ <flag name='x86-max-cpu'/>
+ <flag name='cpu-unavailable-features'/>
+ <flag name='canonical-cpu-features'/>
+ <flag name='bochs-display'/>
+ <flag name='migration-file-drop-cache'/>
+ <flag name='dbus-vmstate'/>
+ <flag name='vhost-user-gpu'/>
+ <flag name='vhost-user-vga'/>
+ <flag name='query-cpu-model-baseline'/>
+ <flag name='query-cpu-model-comparison'/>
+ <flag name='ramfb'/>
+ <flag name='drive-nvme'/>
+ <flag name='smp-dies'/>
+ <flag name='i8042'/>
+ <flag name='rng-builtin'/>
+ <flag name='vhost-user-fs'/>
+ <flag name='fsdev.multidevs'/>
+ <flag name='pcie-root-port.hotplug'/>
+ <flag name='aio.io_uring'/>
+ <flag name='tcg'/>
+ <flag name='pvscsi'/>
+ <flag name='cpu.migratable'/>
+ <flag name='intel-iommu.aw-bits'/>
+ <flag name='numa.hmat'/>
+ <flag name='usb-host.hostdevice'/>
+ <flag name='virtio-balloon.free-page-reporting'/>
+ <flag name='netdev.vhost-vdpa'/>
+ <flag name='dc390'/>
+ <flag name='am53c974'/>
+ <flag name='virtio-pmem-pci'/>
+ <flag name='vhost-user-fs.bootindex'/>
+ <flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
+ <flag name='memory-backend-file.x-use-canonical-path-for-ramblock-id'/>
+ <flag name='vnc-power-control'/>
+ <flag name='rotation-rate'/>
+ <flag name='acpi-index'/>
+ <flag name='input-linux'/>
+ <flag name='virtio-gpu-gl-pci'/>
+ <flag name='virtio-vga-gl'/>
+ <flag name='confidential-guest-support'/>
+ <flag name='set-action'/>
+ <flag name='virtio-blk.queue-size'/>
+ <flag name='virtio-mem-pci'/>
+ <flag name='memory-backend-file.reserve'/>
+ <flag name='piix4.acpi-root-pci-hotplug'/>
+ <flag name='netdev.json'/>
+ <flag name='query-dirty-rate'/>
+ <flag name='rbd-encryption'/>
+ <flag name='sev-guest-kernel-hashes'/>
+ <flag name='sev-inject-launch-secret'/>
+ <flag name='device.json+hotplug'/>
+ <flag name='virtio-mem-pci.prealloc'/>
+ <flag name='calc-dirty-rate'/>
+ <flag name='dirtyrate-param.mode'/>
+ <flag name='blockdev.nbd.tls-hostname'/>
+ <flag name='memory-backend-file.prealloc-threads'/>
+ <flag name='virtio-iommu-pci'/>
+ <flag name='virtio-iommu.boot-bypass'/>
+ <flag name='virtio-net.rss'/>
+ <flag name='chardev.qemu-vdagent'/>
+ <flag name='display-dbus'/>
+ <flag name='iothread.thread-pool-max'/>
+ <flag name='usb-host.guest-resets-all'/>
+ <flag name='migration.blocked-reasons'/>
+ <flag name='query-stats'/>
+ <flag name='query-stats-schemas'/>
+ <flag name='thread-context'/>
+ <flag name='screenshot-format-png'/>
+ <flag name='machine-hpet'/>
+ <flag name='netdev.stream'/>
+ <flag name='virtio-crypto'/>
+ <flag name='cryptodev-backend-lkcf'/>
+ <flag name='pvpanic-pci'/>
+ <flag name='virtio-gpu.blob'/>
+ <flag name='rbd-encryption-layering'/>
+ <flag name='rbd-encryption-luks-any'/>
+ <flag name='qcow2-discard-no-unref'/>
+ <flag name='run-with.async-teardown'/>
+ <flag name='virtio-blk-vhost-vdpa'/>
+ <flag name='virtio-blk.iothread-mapping'/>
+ <flag name='smp-clusters'/>
+ <flag name='virtio-mem-pci.dynamic-memslots'/>
+ <flag name='blockjob.backing-mask-protocol'/>
+ <flag name='display-reload'/>
+ <flag name='usb-mtp'/>
+ <flag name='virtio-sound'/>
+ <flag name='netdev.user'/>
+ <flag name='acpi-erst'/>
+ <flag name='intel-iommu.dma-translation'/>
+ <flag name='machine-i8042-opt'/>
+ <flag name='chardev-reconnect-miliseconds'/>
+ <flag name='netdev-stream-reconnect-miliseconds'/>
+ <flag name='query-cpu-model-expansion.deprecated-props'/>
+ <flag name='migrate-incoming.exit-on-error'/>
+ <flag name='blockdev-set-active'/>
+ <flag name='shim'/>
+ <flag name='virtio-scsi.iothread-mapping'/>
+ <flag name='bus-floppy'/>
+ <flag name='nvme'/>
+ <flag name='nvme-ns'/>
+ <flag name='amd-iommu'/>
+ <flag name='amd-iommu.pci-id'/>
+ <flag name='usb-bot'/>
+ <flag name='qom-list-get'/>
+ <flag name='acpi-generic-initiator'/>
+ <flag name='disk-timed-stats'/>
+ <flag name='query-accelerators'/>
+ <flag name='scsi-block.migrate-pr'/>
+ <flag name='iommufd'/>
+ </qemuCaps>
+ <devices>
+ <device alias='input0'/>
+ <device alias='pci.7'/>
+ <device alias='pci.13'/>
+ <device alias='pci.4'/>
+ <device alias='pci.1'/>
+ <device alias='pci.10'/>
+ <device alias='video0'/>
+ <device alias='serial0'/>
+ <device alias='balloon0'/>
+ <device alias='pci.9'/>
+ <device alias='pci.12'/>
+ <device alias='pci.6'/>
+ <device alias='usb'/>
+ <device alias='pci.3'/>
+ <device alias='pci.8'/>
+ <device alias='pci.14'/>
+ <device alias='pci.5'/>
+ <device alias='pci.11'/>
+ <device alias='pci.2'/>
+ <device alias='channel0'/>
+ <device alias='virtio-serial0'/>
+ <device alias='rng0'/>
+ </devices>
+ <libDir path='/var/lib/libvirt/qemu/domain-2-virtio-vga-test'/>
+ <channelTargetDir path='/run/libvirt/qemu/channel/2-virtio-vga-test'/>
+ <memoryBackingDir path='/var/lib/libvirt/qemu/ram/2-virtio-vga-test'/>
+ <cpu mode='host-passthrough' check='none' migratable='on'/>
+ <chardevStdioLogd/>
+ <rememberOwner/>
+ <nodename index='0'/>
+ <fdset index='0'/>
+ <blockjobs active='no'/>
+ <agentTimeout>-2</agentTimeout>
+ <domain type='kvm' id='2'>
+ <name>virtio-vga-test</name>
+ <uuid>9ccb5ed0-fda4-4760-a38c-83e5f9eba7cf</uuid>
+ <metadata>
+ <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
+ <libosinfo:os id="http://fedoraproject.org/fedora/43"/>
+ </libosinfo:libosinfo>
+ </metadata>
+ <memory unit='KiB'>4194304</memory>
+ <currentMemory unit='KiB'>4194304</currentMemory>
+ <vcpu placement='static'>2</vcpu>
+ <resource>
+ <partition>/machine</partition>
+ </resource>
+ <os>
+ <type arch='x86_64' machine='pc-q35-11.0'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <features>
+ <acpi/>
+ <apic/>
+ <vmport state='off'/>
+ </features>
+ <cpu mode='host-passthrough' check='none' migratable='on'/>
+ <clock offset='utc'>
+ <timer name='rtc' tickpolicy='catchup'/>
+ <timer name='pit' tickpolicy='delay'/>
+ <timer name='hpet' present='no'/>
+ </clock>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <pm>
+ <suspend-to-mem enabled='no'/>
+ <suspend-to-disk enabled='no'/>
+ </pm>
+ <devices>
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
+ <controller type='usb' index='0' model='qemu-xhci' ports='15'>
+ <alias name='usb'/>
+ <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
+ </controller>
+ <controller type='pci' index='0' model='pcie-root'>
+ <alias name='pcie.0'/>
+ </controller>
+ <controller type='pci' index='1' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='1' port='0x10'/>
+ <alias name='pci.1'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
+ </controller>
+ <controller type='pci' index='2' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='2' port='0x11'/>
+ <alias name='pci.2'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
+ </controller>
+ <controller type='pci' index='3' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='3' port='0x12'/>
+ <alias name='pci.3'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
+ </controller>
+ <controller type='pci' index='4' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='4' port='0x13'/>
+ <alias name='pci.4'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
+ </controller>
+ <controller type='pci' index='5' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='5' port='0x14'/>
+ <alias name='pci.5'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
+ </controller>
+ <controller type='pci' index='6' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='6' port='0x15'/>
+ <alias name='pci.6'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
+ </controller>
+ <controller type='pci' index='7' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='7' port='0x16'/>
+ <alias name='pci.7'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
+ </controller>
+ <controller type='pci' index='8' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='8' port='0x17'/>
+ <alias name='pci.8'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x7'/>
+ </controller>
+ <controller type='pci' index='9' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='9' port='0x18'/>
+ <alias name='pci.9'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='on'/>
+ </controller>
+ <controller type='pci' index='10' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='10' port='0x19'/>
+ <alias name='pci.10'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/>
+ </controller>
+ <controller type='pci' index='11' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='11' port='0x1a'/>
+ <alias name='pci.11'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x2'/>
+ </controller>
+ <controller type='pci' index='12' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='12' port='0x1b'/>
+ <alias name='pci.12'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x3'/>
+ </controller>
+ <controller type='pci' index='13' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='13' port='0x1c'/>
+ <alias name='pci.13'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x4'/>
+ </controller>
+ <controller type='pci' index='14' model='pcie-root-port'>
+ <model name='pcie-root-port'/>
+ <target chassis='14' port='0x1d'/>
+ <alias name='pci.14'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x5'/>
+ </controller>
+ <controller type='sata' index='0'>
+ <alias name='ide'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
+ </controller>
+ <controller type='virtio-serial' index='0'>
+ <alias name='virtio-serial0'/>
+ <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
+ </controller>
+ <serial type='pty'>
+ <source path='/dev/pts/3'/>
+ <target type='isa-serial' port='0'>
+ <model name='isa-serial'/>
+ </target>
+ <alias name='serial0'/>
+ </serial>
+ <console type='pty' tty='/dev/pts/3'>
+ <source path='/dev/pts/3'/>
+ <target type='serial' port='0'/>
+ <alias name='serial0'/>
+ </console>
+ <channel type='unix'>
+ <source mode='bind' path='/run/libvirt/qemu/channel/2-virtio-vga-test/org.qemu.guest_agent.0'/>
+ <target type='virtio' name='org.qemu.guest_agent.0' state='disconnected'/>
+ <alias name='channel0'/>
+ <address type='virtio-serial' controller='0' bus='0' port='1'/>
+ </channel>
+ <input type='tablet' bus='usb'>
+ <alias name='input0'/>
+ <address type='usb' bus='0' port='1'/>
+ </input>
+ <input type='mouse' bus='ps2'>
+ <alias name='input1'/>
+ </input>
+ <input type='keyboard' bus='ps2'>
+ <alias name='input2'/>
+ </input>
+ <graphics type='vnc' port='5901' autoport='yes' websocketGenerated='no' listen='127.0.0.1'>
+ <listen type='address' address='127.0.0.1' fromConfig='1' autoGenerated='no'/>
+ </graphics>
+ <audio id='1' type='none'/>
+ <video>
+ <model type='virtio' heads='1' primary='yes'/>
+ <alias name='video0'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
+ </video>
+ <watchdog model='itco' action='reset'>
+ <alias name='watchdog0'/>
+ </watchdog>
+ <memballoon model='virtio'>
+ <alias name='balloon0'/>
+ <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
+ </memballoon>
+ <rng model='virtio'>
+ <backend model='random'>/dev/urandom</backend>
+ <alias name='rng0'/>
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
+ </rng>
+ </devices>
+ <seclabel type='dynamic' model='selinux' relabel='yes'>
+ <label>unconfined_u:unconfined_r:svirt_t:s0:c369,c928</label>
+ <imagelabel>unconfined_u:object_r:svirt_image_t:s0:c369,c928</imagelabel>
+ </seclabel>
+ <seclabel type='dynamic' model='dac' relabel='yes'>
+ <label>+107:+107</label>
+ <imagelabel>+107:+107</imagelabel>
+ </seclabel>
+ </domain>
+</domstatus>
diff --git a/tests/qemuxmlactivetest.c b/tests/qemuxmlactivetest.c
index 44e66a4a29..c3609e9459 100644
--- a/tests/qemuxmlactivetest.c
+++ b/tests/qemuxmlactivetest.c
@@ -278,6 +278,12 @@ mymain(void)
DO_TEST_STATUS("qcow2-data-file");
+ /* These test cases capture situation where the 'device' attribute of a
+ * virtio video device is missing and thus needs to be inferred from the
+ * available capabilities when an upgraded libvirt is started */
+ DO_TEST_STATUS("virtio-vga-upgrade");
+ DO_TEST_STATUS("virtio-vga-upgrade-missing");
+
cleanup:
qemuTestDriverFree(&driver);
--
2.55.0