Devel
Threads by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
June 2026
- 37 participants
- 74 discussions
23 Jun '26
Conceptually -object and object_add/object_del should be sufficient
for essentially all QEMU configuration....if only we ported all our
internal custom backends/devices/etc to QOM. That is of course a big
job which is why it hasn't happened.
This series started with the premise that the monitor is one of the
easier areas to convert since we have no more than three classes,
a common base, and QMP and HMP subclasses[1]. So why not give it a
go and thus unlock the ability to dynamically create/delete monitors
in QMP/HMP.
This series does the conversion in a great many small steps to better
understand the implications at each stage.
The high level outcome of this series is
* HMP and QMP monitors are QOM objects, 'monitor-hmp' and
'monitor-qmp' respectively
* Both can be cold plugged and hot plugged. QMP only, can
also be hot unplugged.
* '-mon' is obsolete, deprecated and replaced by '-object',
but -monitor, -qmp and kept as high level syntax sugar
* QMP gains a concept of "close-action" which makes it
possible to mark a monitor for auto-delete.
The monitor hot-unplug code and the qtest and functional testing
code is heavily derived from a series sent by Christian Brauner
which proposed new monitor_add/monitor_del commands:
https://lists.nongnu.org/archive/html/qemu-devel/2026-04/msg01349.html
I left Christian's authorship & SoB on the patches which were
derived from his code, though the code has been refactored quite
a bit in places, so bugs are quite possibly my own.
Note that Christian's series allowed the use of "monitor_del"
commands against the current monitor session. ie a client could
delete the very monitor it was using. This is an awkward concept
as it needs special casing to delay the deletion to happen in
the background, such that that the QMP response to 'monitor_del'
could still be sent back. This also left the chardev was orphaned
as there's no way to run 'chardev_dev' in that usage pattern.
To provide an alternative mechanism to address the same use case,
this series introduces the 'close-action' concept mentioned above,
that allows hotplugging a monitor to service a specific task,
with the monitor being purged when the script closes its connection.
This avoids the special casing that an explicit "self deletion"
paradigm required.
While supporting hotplug of HMP was trivial, I didn't do any work
to think about hotunplug of HMP, since IMHO it is of limited value
given HMP's typical use cases.
[1] ~~~ we did all this not because it was easy,
but because we thought it would be easy ~~~
Changed in v4:
- Hold reference into BH to avoid race with auto-delete
Changed in v3:
- Removed unused 'dead' struct field
- Make use of 'setup_pending' struct field across BH
- Add missing free of chardev_id
- Add missnig ERRP_GUARD in monitor_new_qmp
- Misc docs typos / rephrasing
- Moved docs patch to the end
- Fixed docs about the default QOM ID naming for legacy
monitor syntax
- Fixed random sleep time calculation in tests
Christian Brauner (6):
monitor: convert from oneshot BH to persistent BH
monitor: reject attempts to delete the current monitor
monitor: protect qemu_chr_fe_accept_input with monitor lock
monitor: implement support for deleting QMP objects
tests/qtest: add tests for dynamic monitor add/remove
tests/functional: add e2e test for dynamic QMP monitor hotplug
Daniel P. Berrangé (29):
qom: replace 'can_be_deleted' with 'prepare_delete'
monitor: replace 'common' with 'parent_obj' in MonitorHMP
monitor: replace 'common' with 'parent_obj' in MonitorQMP
monitor: rename monitor_init* to monitor_new*
monitor: minimal conversion of monitors to QOM
monitor: add 'chardev' property to Monitor base class
monitor: add 'readline' property to HMP Monitor class
monitor: add 'pretty' property to QMP Monitor class
monitor: remove 'skip_flush' field
monitor: move monitor_data_(init|destroy) into QOM init/finalize
monitor: use class methods for monitor_vprintf
monitor: use class methods for monitor_qapi_event_emit
monitor: use class methods for monitor_accept_input
monitor: use class method for I/O thread request
monitor: use dynamic cast in monitor_qmp_requests_pop_any_with_lock
util: use dynamic cast in error vreport
monitor: drop unused monitor_cur_is_qmp
monitor: use dynamic cast in QMP commands
monitor: use dynamic cast in monitor_is_hmp_non_interactive
monitor: drop unused monitor_is_qmp method
monitor: eliminate monitor_is_hmp_non_interactive method
monitor: implement "user creatable" interface for adding monitors
tests/functional: add a stress test for monitor hot unplug
qom: add method for getting the "id" of a QOM object
qom: add trace events for user creatable create/delete APIs
monitor: add support for auto-deleting monitors upon close
tests: switch from -mon to -object monitor-qmp
qemu-options: document new monitor-hmp and monitor-qmp objects
docs: mark '-mon' as deprecated in favour of -object
MAINTAINERS | 1 +
backends/cryptodev.c | 10 +-
backends/hostmem.c | 5 +-
backends/iommufd.c | 10 +-
block/throttle-groups.c | 10 +-
chardev/char.c | 3 +-
docs/about/deprecated.rst | 10 +
docs/devel/writing-monitor-commands.rst | 4 +-
docs/system/arm/xenpvh.rst | 4 +-
docs/system/i386/xen.rst | 3 +-
docs/system/i386/xenpvh.rst | 4 +-
event-loop-base.c | 8 +-
gdbstub/system.c | 4 +-
include/monitor/monitor.h | 23 +-
include/qom/object.h | 10 +
include/qom/object_interfaces.h | 26 +-
include/system/event-loop-base.h | 2 +-
migration/migration-hmp-cmds.c | 5 +-
monitor/hmp-cmds.c | 7 +-
monitor/hmp.c | 181 ++++++++--
monitor/monitor-internal.h | 73 ++--
monitor/monitor.c | 262 ++++++++-------
monitor/qmp-cmds-control.c | 12 +-
monitor/qmp-cmds.c | 14 +-
monitor/qmp.c | 312 +++++++++++++++---
net/can/can_core.c | 5 +-
python/qemu/machine/machine.py | 4 +-
qapi/qom.json | 62 ++++
qemu-options.hx | 57 +++-
qom/object.c | 17 +
qom/object_interfaces.c | 20 +-
qom/trace-events | 5 +
storage-daemon/qemu-storage-daemon.c | 2 +-
stubs/monitor-core.c | 5 -
stubs/monitor-internal.c | 3 +-
system/vl.c | 12 +-
tests/functional/generic/meson.build | 1 +
.../generic/test_monitor_hotplug.py | 277 ++++++++++++++++
tests/qemu-iotests/245 | 4 +-
tests/qtest/libqtest.c | 2 +-
tests/qtest/qmp-test.c | 174 ++++++++++
tests/unit/test-util-sockets.c | 1 -
tools/qemu-vnc/stubs.c | 5 -
ui/ui-hmp-cmds.c | 2 +-
util/error-report.c | 13 +-
util/main-loop.c | 5 +-
46 files changed, 1352 insertions(+), 327 deletions(-)
create mode 100755 tests/functional/generic/test_monitor_hotplug.py
--
2.54.0
5
45
[PATCH 00/14] qemu: fix lock/log daemon shutdown ordering and issues with locking in paused VMs
by Peter Krempa 23 Jun '26
by Peter Krempa 23 Jun '26
23 Jun '26
Patch 1 fixes ordering of shutdown of the helper daemons
virtlogd/virtlockd.
The rest of the series addresses few issues with locking of disk images
via lockd/sanlock in terms of hotplug to a paused VM.
The patches also prevent combination of automatic disk locking and
blockjobs because it was historically broken and the usage of that is
minimal, we thus just enforce the safe state.
Peter Krempa (14):
qemu: Ensure proper shutdown ordering of virtlockd/virtlogd daemons
qemuDomainAttachLease: Directly insert the lease
Remove virDomainLeaseInsertPreAlloc/virDomainLeaseInsertPreAlloced
qemu.conf: Explain that no locking happens if 'lock_manager' is unset
virDomainLeaseDefParseXML: Report error if '<lockspace>' element is
missing
virDomainLeaseDefParseXML: Avoid unneeded temporary variables
qemuxmlconftest: Add <lease> with missing offset
locking: Debug lockspace creation
lock_daemon: Log arguments for all dispatched APIs
lockd driver: Allow registering additional lockspaces for manual
<lease>s
qemu: hotplug: Don't acquire lock on hotplugged <lease> when VM is
paused
locking: Add API to query whether automatic disk leases are enabled
qemu: Refuse block jobs if automatic disk leases are enabled in the
locking plugin
qemu: Fix lock manager usage for disks
src/conf/domain_conf.c | 38 ++++---------
src/conf/domain_conf.h | 4 +-
src/libvirt_private.syms | 3 +-
src/locking/libvirt_lockd.aug | 8 +++
src/locking/lock_daemon.c | 3 +
src/locking/lock_daemon_dispatch.c | 24 +++++++-
src/locking/lock_driver.h | 10 ++++
src/locking/lock_driver_lockd.c | 22 ++++++++
src/locking/lock_driver_sanlock.c | 9 +++
src/locking/lock_manager.c | 10 ++++
src/locking/lock_manager.h | 2 +
src/locking/lockd.conf | 14 +++++
src/locking/sanlock.conf | 4 ++
src/locking/test_libvirt_lockd.aug.in | 4 ++
src/qemu/qemu.conf.in | 5 ++
src/qemu/qemu_backup.c | 2 +-
src/qemu/qemu_block.c | 2 +-
src/qemu/qemu_checkpoint.c | 2 +-
src/qemu/qemu_domain.c | 21 +++----
src/qemu/qemu_domain.h | 3 +-
src/qemu/qemu_driver.c | 4 +-
src/qemu/qemu_hotplug.c | 56 +++++++++++++++----
src/qemu/qemu_snapshot.c | 25 +++++----
src/qemu/virtqemud.service.extra.in | 4 ++
src/remote/libvirtd.service.in | 4 ++
src/util/virlockspace.c | 6 +-
tests/qemuxmlconfdata/lease.x86_64-latest.xml | 5 ++
tests/qemuxmlconfdata/lease.xml | 5 ++
28 files changed, 221 insertions(+), 78 deletions(-)
--
2.54.0
3
21
Patches 1-4 are cleanups that can be applied right away.
Patch 5 will be replaced by a proper capability update once the
qemu patches hit upstream.
Patches 6-7 are to be merged as-is once the qemu patches hit upstream.
S-o-b for patches 5-7 will be applied once they are ready to be pushed
(to prevent accidental push).
Peter Krempa (7):
qemucapabilitiestest: Update 'caps_11.1.0_x86_64' to
'v11.0.0-2279-gb833716681'
qemucapabilitiestest: Update 'caps_11.1.0_aarch64' to
'v11.0.0-2279-gb833716681'
qemuMonitorJSONIOProcessLine: Log monitor object pointer in debug
message
qemu: monitor: Standardize log format in QEMU_CHECK_MONITOR_FULL macro
qeucapabilitiestest: Update data for 'monitor-qmp' object
qemu: capabilities: Introduce QEMU_CAPS_OBJECT_MONITOR_QMP
qemu: command: Use monitor via '-object monitor-qmp,...'
src/qemu/qemu_capabilities.c | 2 +
src/qemu/qemu_capabilities.h | 1 +
src/qemu/qemu_command.c | 17 +-
src/qemu/qemu_monitor.c | 2 +-
src/qemu/qemu_monitor_json.c | 2 +-
.../qemu_11.1.0-q35.x86_64-expanded.xml | 1 +
.../qemu_11.1.0-q35.x86_64-supported.xml | 1 +
.../domaincapsdata/qemu_11.1.0-q35.x86_64.xml | 1 +
tests/domaincapsdata/qemu_11.1.0.x86_64.xml | 1 +
.../caps_11.1.0_aarch64.replies | 58 +-
.../caps_11.1.0_aarch64.xml | 2 +-
.../caps_11.1.0_x86_64.replies | 1905 +++++++++--------
.../caps_11.1.0_x86_64.xml | 5 +-
.../acpi-generic-initiator.x86_64-latest.args | 2 +-
.../acpi-table-many.x86_64-latest.args | 2 +-
.../acpi-table.x86_64-latest.args | 2 +-
.../amd-iommu.x86_64-latest.args | 2 +-
.../async-teardown.x86_64-latest.args | 2 +-
.../audio-alsa-best.x86_64-latest.args | 2 +-
.../audio-alsa-full.x86_64-latest.args | 2 +-
.../audio-alsa-minimal.x86_64-latest.args | 2 +-
.../audio-coreaudio-best.x86_64-latest.args | 2 +-
.../audio-coreaudio-full.x86_64-latest.args | 2 +-
...audio-coreaudio-minimal.x86_64-latest.args | 2 +-
...udio-default-nographics.x86_64-latest.args | 2 +-
.../audio-default-sdl.x86_64-latest.args | 2 +-
.../audio-default-spice.x86_64-latest.args | 2 +-
.../audio-default-vnc.x86_64-latest.args | 2 +-
.../audio-file-best.x86_64-latest.args | 2 +-
.../audio-file-full.x86_64-latest.args | 2 +-
.../audio-file-minimal.x86_64-latest.args | 2 +-
.../audio-jack-full.x86_64-latest.args | 2 +-
.../audio-jack-minimal.x86_64-latest.args | 2 +-
.../audio-many-backends.x86_64-latest.args | 2 +-
.../audio-none-best.x86_64-latest.args | 2 +-
.../audio-none-full.x86_64-latest.args | 2 +-
.../audio-none-minimal.x86_64-latest.args | 2 +-
.../audio-oss-best.x86_64-latest.args | 2 +-
.../audio-oss-full.x86_64-latest.args | 2 +-
.../audio-oss-minimal.x86_64-latest.args | 2 +-
.../audio-pipewire-best.x86_64-latest.args | 2 +-
.../audio-pipewire-full.x86_64-latest.args | 2 +-
.../audio-pipewire-minimal.x86_64-latest.args | 2 +-
.../audio-pulseaudio-best.x86_64-latest.args | 2 +-
.../audio-pulseaudio-full.x86_64-latest.args | 2 +-
...udio-pulseaudio-minimal.x86_64-latest.args | 2 +-
.../audio-sdl-best.x86_64-latest.args | 2 +-
.../audio-sdl-full.x86_64-latest.args | 2 +-
.../audio-sdl-minimal.x86_64-latest.args | 2 +-
.../audio-spice-best.x86_64-latest.args | 2 +-
.../audio-spice-full.x86_64-latest.args | 2 +-
.../audio-spice-minimal.x86_64-latest.args | 2 +-
.../autoindex.x86_64-latest.args | 2 +-
.../balloon-device-auto.x86_64-latest.args | 2 +-
...loon-device-deflate-off.x86_64-latest.args | 2 +-
.../balloon-device-deflate.x86_64-latest.args | 2 +-
.../balloon-device-period.x86_64-latest.args | 2 +-
.../balloon-device.x86_64-latest.args | 2 +-
.../blkdeviotune-group-num.x86_64-latest.args | 2 +-
...blkdeviotune-max-length.x86_64-latest.args | 2 +-
.../blkdeviotune-max.x86_64-latest.args | 2 +-
.../blkdeviotune.x86_64-latest.args | 2 +-
.../blkiotune-device.x86_64-latest.args | 2 +-
.../blkiotune.x86_64-latest.args | 2 +-
.../boot-cdrom.x86_64-latest.args | 2 +-
.../boot-complex.x86_64-latest.args | 2 +-
.../boot-floppy-q35.x86_64-latest.args | 2 +-
.../boot-floppy.x86_64-latest.args | 2 +-
...boot-menu-disable-drive.x86_64-latest.args | 2 +-
...nu-disable-with-timeout.x86_64-latest.args | 2 +-
.../boot-menu-disable.x86_64-latest.args | 2 +-
...enu-enable-with-timeout.x86_64-latest.args | 2 +-
.../boot-menu-enable.x86_64-latest.args | 2 +-
.../boot-multi.x86_64-latest.args | 2 +-
.../boot-network.x86_64-latest.args | 2 +-
.../boot-order.x86_64-latest.args | 2 +-
.../channel-guestfwd.x86_64-latest.args | 2 +-
...l-qemu-vdagent-features.x86_64-latest.args | 2 +-
.../channel-qemu-vdagent.x86_64-latest.args | 2 +-
.../channel-spicevmc.x86_64-latest.args | 2 +-
.../channel-unix-guestfwd.x86_64-latest.args | 2 +-
...hannel-unix-source-path.x86_64-latest.args | 2 +-
.../channel-virtio-auto.x86_64-latest.args | 2 +-
.../channel-virtio-autoadd.x86_64-latest.args | 2 +-
...annel-virtio-autoassign.x86_64-latest.args | 2 +-
.../channel-virtio-default.x86_64-latest.args | 2 +-
.../channel-virtio-state.x86_64-latest.args | 2 +-
.../channel-virtio-unix.x86_64-latest.args | 2 +-
.../channel-virtio.x86_64-latest.args | 2 +-
.../chardev-backends-json.x86_64-latest.args | 2 +-
.../chardev-backends.x86_64-latest.args | 2 +-
.../chardev-label.x86_64-latest.args | 2 +-
.../chardev-reconnect.x86_64-latest.args | 2 +-
.../clock-absolute.x86_64-latest.args | 2 +-
.../clock-catchup.x86_64-latest.args | 2 +-
.../clock-france.x86_64-latest.args | 2 +-
.../clock-hpet-off.x86_64-latest.args | 2 +-
...caltime-basis-localtime.x86_64-latest.args | 2 +-
.../clock-localtime.x86_64-latest.args | 2 +-
.../clock-realtime.x86_64-latest.args | 2 +-
.../clock-timer-hyperv-rtc.x86_64-latest.args | 2 +-
.../clock-utc.x86_64-latest.args | 2 +-
.../clock-variable.x86_64-latest.args | 2 +-
.../console-compat-auto.x86_64-latest.args | 2 +-
.../console-compat-chardev.x86_64-latest.args | 2 +-
.../console-compat-crash.x86_64-latest.args | 2 +-
.../console-compat.x86_64-latest.args | 2 +-
.../console-compat2.x86_64-latest.args | 2 +-
.../console-virtio-many.x86_64-latest.args | 2 +-
...rial-autoassign-address.x86_64-latest.args | 2 +-
.../console-virtio-unix.x86_64-latest.args | 2 +-
.../console-virtio.x86_64-latest.args | 2 +-
.../controller-order.x86_64-latest.args | 2 +-
.../controller-scsi-auto.x86_64-latest.args | 2 +-
...ller-scsi-inherit-model.x86_64-latest.args | 2 +-
.../controller-usb-order.x86_64-latest.args | 2 +-
.../controller-virtio-scsi.x86_64-latest.args | 2 +-
.../cpu-Haswell-noTSX.x86_64-latest.args | 2 +-
.../cpu-Haswell.x86_64-latest.args | 2 +-
.../cpu-Haswell2.x86_64-latest.args | 2 +-
.../cpu-Haswell3.x86_64-latest.args | 2 +-
...-Icelake-Server-pconfig.x86_64-latest.args | 2 +-
.../cpu-cache-disable.x86_64-latest.args | 2 +-
.../cpu-cache-disable3.x86_64-latest.args | 2 +-
.../cpu-cache-emulate-l3.x86_64-latest.args | 2 +-
.../cpu-cache-passthrough.x86_64-latest.args | 2 +-
.../cpu-check-default-none.x86_64-latest.args | 2 +-
...cpu-check-default-none2.x86_64-latest.args | 2 +-
...u-check-default-partial.x86_64-latest.args | 2 +-
...-check-default-partial2.x86_64-latest.args | 2 +-
.../cpu-check-none.x86_64-latest.args | 2 +-
.../cpu-empty.x86_64-latest.args | 2 +-
.../cpu-eoi-disabled.x86_64-latest.args | 2 +-
.../cpu-eoi-enabled.x86_64-latest.args | 2 +-
.../cpu-exact1.x86_64-latest.args | 2 +-
.../cpu-exact2-nofallback.x86_64-latest.args | 2 +-
.../cpu-exact2.x86_64-latest.args | 2 +-
.../cpu-host-kvmclock.x86_64-latest.args | 2 +-
.../cpu-host-model-cmt.x86_64-latest.args | 2 +-
...host-model-fallback-kvm.x86_64-latest.args | 4 +-
...host-model-fallback-tcg.x86_64-latest.args | 2 +-
...cpu-host-model-features.x86_64-latest.args | 4 +-
.../cpu-host-model-kvm.x86_64-latest.args | 4 +-
...st-model-nofallback-kvm.x86_64-latest.args | 4 +-
...st-model-nofallback-tcg.x86_64-latest.args | 2 +-
.../cpu-host-model-tcg.x86_64-latest.args | 2 +-
.../cpu-host-model-vendor.x86_64-latest.args | 2 +-
...st-passthrough-features.x86_64-latest.args | 2 +-
.../cpu-host-passthrough.x86_64-latest.args | 2 +-
.../cpu-hotplug-startup.x86_64-latest.args | 2 +-
.../cpu-kvmclock.x86_64-latest.args | 2 +-
.../cpu-minimum1.x86_64-latest.args | 2 +-
.../cpu-minimum2.x86_64-latest.args | 2 +-
...cpu-no-removed-features.x86_64-latest.args | 2 +-
.../cpu-numa-disjoint.x86_64-latest.args | 2 +-
.../cpu-numa-disordered.x86_64-latest.args | 2 +-
.../cpu-numa-memshared.x86_64-latest.args | 2 +-
...-numa-no-memory-element.x86_64-latest.args | 2 +-
.../cpu-numa1.x86_64-latest.args | 2 +-
.../cpu-numa2.x86_64-latest.args | 2 +-
...-phys-bits-emulate-bare.x86_64-latest.args | 2 +-
.../cpu-phys-bits-emulate.x86_64-latest.args | 2 +-
.../cpu-phys-bits-emulate2.x86_64-latest.args | 2 +-
.../cpu-phys-bits-limit.x86_64-latest.args | 2 +-
...u-phys-bits-passthrough.x86_64-latest.args | 2 +-
.../cpu-strict1.x86_64-latest.args | 2 +-
.../cpu-topology1.x86_64-latest.args | 2 +-
.../cpu-topology2.x86_64-latest.args | 2 +-
.../cpu-topology3.x86_64-latest.args | 2 +-
.../cpu-topology4.x86_64-latest.args | 2 +-
.../cpu-translation.x86_64-latest.args | 2 +-
.../cpu-tsc-frequency.x86_64-latest.args | 2 +-
.../cputune-cpuset-big-id.x86_64-latest.args | 2 +-
.../cputune-numatune.x86_64-latest.args | 2 +-
.../cputune-zero-shares.x86_64-latest.args | 2 +-
.../cputune.x86_64-latest.args | 2 +-
.../crypto-builtin.x86_64-latest.args | 2 +-
.../default-kvm-host-arch.x86_64-latest.args | 2 +-
.../default-qemu-host-arch.x86_64-latest.args | 2 +-
...fault-video-type-x86_64.x86_64-latest.args | 2 +-
.../devices-acpi-index.x86_64-latest.args | 2 +-
.../disk-active-commit.x86_64-latest.args | 2 +-
.../disk-aio-io_uring.x86_64-latest.args | 2 +-
.../disk-aio.x86_64-latest.args | 2 +-
...-backing-chains-noindex.x86_64-latest.args | 2 +-
...disk-blockio-no-discard.x86_64-latest.args | 2 +-
.../disk-blockio.x86_64-latest.args | 2 +-
.../disk-boot-cdrom.x86_64-latest.args | 2 +-
.../disk-boot-disk.x86_64-latest.args | 2 +-
.../disk-cache.x86_64-latest.args | 2 +-
...m-empty-network-invalid.x86_64-latest.args | 2 +-
...sk-cdrom-network-nbdkit.x86_64-latest.args | 2 +-
.../disk-cdrom-network.x86_64-latest.args | 2 +-
.../disk-cdrom-tray.x86_64-latest.args | 2 +-
...om-usb-empty.x86_64-latest.abi-update.args | 2 +-
.../disk-cdrom.x86_64-latest.args | 2 +-
.../disk-copy_on_read.x86_64-latest.args | 2 +-
.../disk-detect-zeroes.x86_64-latest.args | 2 +-
.../disk-discard.x86_64-latest.args | 2 +-
.../disk-discard_no_unref.x86_64-latest.args | 2 +-
.../disk-error-policy.x86_64-latest.args | 2 +-
.../disk-floppy-q35.x86_64-latest.args | 2 +-
.../disk-floppy-tray.x86_64-latest.args | 2 +-
.../disk-floppy.x86_64-latest.args | 2 +-
.../disk-fmt-qcow.x86_64-latest.args | 2 +-
.../disk-geometry.x86_64-latest.args | 2 +-
.../disk-ide-split.x86_64-latest.args | 2 +-
.../disk-ide-wwn.x86_64-latest.args | 2 +-
.../disk-ioeventfd.x86_64-latest.args | 2 +-
.../disk-metadata-cache.x86_64-latest.args | 2 +-
.../disk-mirror-old.x86_64-latest.args | 2 +-
.../disk-mirror.x86_64-latest.args | 2 +-
...isk-network-http-nbdkit.x86_64-latest.args | 2 +-
.../disk-network-http.x86_64-latest.args | 2 +-
.../disk-network-iscsi.x86_64-latest.args | 2 +-
.../disk-network-nbd.x86_64-latest.args | 2 +-
.../disk-network-nfs.x86_64-latest.args | 2 +-
...rbd-encryption-layering.x86_64-latest.args | 2 +-
...rbd-encryption-luks-any.x86_64-latest.args | 2 +-
...-network-rbd-encryption.x86_64-latest.args | 2 +-
...sk-network-rbd-no-colon.x86_64-latest.args | 2 +-
.../disk-network-rbd.x86_64-latest.args | 2 +-
...isk-network-source-auth.x86_64-latest.args | 2 +-
...rce-curl-nbdkit-backing.x86_64-latest.args | 2 +-
...work-source-curl-nbdkit.x86_64-latest.args | 2 +-
...isk-network-source-curl.x86_64-latest.args | 2 +-
.../disk-network-ssh-key.x86_64-latest.args | 2 +-
...disk-network-ssh-nbdkit.x86_64-latest.args | 2 +-
...sk-network-ssh-password.x86_64-latest.args | 2 +-
.../disk-network-ssh.x86_64-latest.args | 2 +-
...rk-tlsx509-nbd-hostname.x86_64-latest.args | 2 +-
...isk-network-tlsx509-nbd.x86_64-latest.args | 2 +-
.../disk-no-boot.x86_64-latest.args | 2 +-
.../disk-nvme.x86_64-latest.args | 2 +-
.../disk-order.x86_64-latest.args | 2 +-
...sk-qcow2-datafile-store.x86_64-latest.args | 2 +-
.../disk-readonly-disk.x86_64-latest.args | 2 +-
.../disk-rotation.x86_64-latest.args | 2 +-
.../disk-sata-device.x86_64-latest.args | 2 +-
.../disk-sata-product.x86_64-latest.args | 2 +-
.../disk-scsi-device-auto.x86_64-latest.args | 2 +-
.../disk-scsi-disk-split.x86_64-latest.args | 2 +-
.../disk-scsi-disk-vpd.x86_64-latest.args | 2 +-
.../disk-scsi-disk-wwn.x86_64-latest.args | 2 +-
...sk-scsi-lun-passthrough.x86_64-latest.args | 2 +-
.../disk-scsi.x86_64-latest.args | 2 +-
.../disk-serial.x86_64-latest.args | 2 +-
.../disk-shared.x86_64-latest.args | 2 +-
.../disk-slices.x86_64-latest.args | 2 +-
.../disk-snapshot.x86_64-latest.args | 2 +-
.../disk-source-fd.x86_64-latest.args | 2 +-
.../disk-source-pool-mode.x86_64-latest.args | 2 +-
.../disk-source-pool.x86_64-latest.args | 2 +-
...tuppolicy-optional-drop.x86_64-latest.args | 2 +-
...sk-statistics-intervals.x86_64-latest.args | 2 +-
.../disk-target-nvme.x86_64-latest.args | 2 +-
.../disk-transient.x86_64-latest.args | 2 +-
.../disk-usb-device-model.x86_64-latest.args | 2 +-
...est.QEMU_CAPS_DEVICE_USB_BOT-disabled.args | 2 +-
...ate.QEMU_CAPS_DEVICE_USB_BOT-disabled.args | 2 +-
...k-usb-device.x86_64-latest.abi-update.args | 2 +-
.../disk-usb-device.x86_64-latest.args | 2 +-
.../disk-vhostuser-numa.x86_64-latest.args | 2 +-
.../disk-vhostuser.x86_64-latest.args | 2 +-
.../disk-vhostvdpa.x86_64-latest.args | 2 +-
.../disk-virtio-queues.x86_64-latest.args | 2 +-
...irtio-scsi-reservations.x86_64-latest.args | 2 +-
.../disk-virtio.x86_64-latest.args | 2 +-
.../downscript.x86_64-latest.args | 2 +-
.../encrypted-disk-usage.x86_64-latest.args | 2 +-
.../encrypted-disk.x86_64-latest.args | 2 +-
.../eoi-disabled.x86_64-latest.args | 2 +-
.../eoi-enabled.x86_64-latest.args | 2 +-
.../event_idx.x86_64-latest.args | 2 +-
...memory-no-numa-topology.x86_64-latest.args | 2 +-
...fd-memory-numa-topology.x86_64-latest.args | 2 +-
...d-memory-numa-topology2.x86_64-latest.args | 2 +-
...d-memory-numa-topology3.x86_64-latest.args | 2 +-
...d-memory-numa-topology4.x86_64-latest.args | 2 +-
.../fips-enabled.x86_64-latest.args | 2 +-
...are-auto-bios-stateless.x86_64-latest.args | 2 +-
.../firmware-auto-bios.x86_64-latest.args | 2 +-
...-auto-efi-enrolled-keys.x86_64-latest.args | 2 +-
...loader-qcow2-nvram-path.x86_64-latest.args | 2 +-
...efi-format-loader-qcow2.x86_64-latest.args | 2 +-
...uto-efi-format-mismatch.x86_64-latest.args | 2 +-
...nvram-qcow2-network-nbd.x86_64-latest.args | 2 +-
...format-nvram-qcow2-path.x86_64-latest.args | 2 +-
...-efi-format-nvram-qcow2.x86_64-latest.args | 2 +-
...t-nvram-raw-loader-path.x86_64-latest.args | 2 +-
...-raw-nvramtemplate-path.x86_64-latest.args | 2 +-
...at-nvram-raw.x86_64-latest.abi-update.args | 2 +-
...to-efi-format-nvram-raw.x86_64-latest.args | 2 +-
...mat-nvramtemplate-qcow2.x86_64-latest.args | 2 +-
...uto-efi-loader-insecure.x86_64-latest.args | 2 +-
...re-auto-efi-loader-path.x86_64-latest.args | 2 +-
...oader-secure.x86_64-latest.abi-update.args | 2 +-
...-auto-efi-loader-secure.x86_64-latest.args | 2 +-
...to-efi-no-enrolled-keys.x86_64-latest.args | 2 +-
...are-auto-efi-no-secboot.x86_64-latest.args | 2 +-
...are-auto-efi-nvram-file.x86_64-latest.args | 2 +-
...efi-nvram-network-iscsi.x86_64-latest.args | 2 +-
...o-efi-nvram-network-nbd.x86_64-latest.args | 2 +-
...are-auto-efi-nvram-path.x86_64-latest.args | 2 +-
...auto-efi-nvram-template.x86_64-latest.args | 2 +-
...ware-auto-efi-rw-pflash.x86_64-latest.args | 2 +-
.../firmware-auto-efi-rw.x86_64-latest.args | 2 +-
...rmware-auto-efi-secboot.x86_64-latest.args | 2 +-
...rmware-auto-efi-smm-off.x86_64-latest.args | 2 +-
...ware-auto-efi-stateless.x86_64-latest.args | 2 +-
...e-auto-efi-varstore-q35.x86_64-latest.args | 2 +-
...are-auto-efi.x86_64-latest.abi-update.args | 2 +-
.../firmware-auto-efi.x86_64-latest.args | 2 +-
...nual-bios-not-stateless.x86_64-latest.args | 2 +-
...e-manual-bios-stateless.x86_64-latest.args | 2 +-
.../firmware-manual-bios.x86_64-latest.args | 2 +-
...are-manual-efi-acpi-q35.x86_64-latest.args | 2 +-
...are-manual-efi-features.x86_64-latest.args | 2 +-
...loader-path-nonstandard.x86_64-latest.args | 2 +-
...anual-efi-loader-secure.x86_64-latest.args | 2 +-
...olled-keys-legacy-paths.x86_64-latest.args | 2 +-
...al-efi-no-enrolled-keys.x86_64-latest.args | 2 +-
...no-secboot-legacy-paths.x86_64-latest.args | 2 +-
...e-manual-efi-no-secboot.x86_64-latest.args | 2 +-
...e-manual-efi-nvram-file.x86_64-latest.args | 2 +-
...efi-nvram-network-iscsi.x86_64-latest.args | 2 +-
...l-efi-nvram-network-nbd.x86_64-latest.args | 2 +-
...late-nonstandard-format.x86_64-latest.args | 2 +-
...onstandard-legacy-paths.x86_64-latest.args | 2 +-
...am-template-nonstandard.x86_64-latest.args | 2 +-
...nual-efi-nvram-template.x86_64-latest.args | 2 +-
...-manual-efi-rw-implicit.x86_64-latest.args | 2 +-
...ual-efi-rw-legacy-paths.x86_64-latest.args | 2 +-
...ual-efi-rw-modern-paths.x86_64-latest.args | 2 +-
.../firmware-manual-efi-rw.x86_64-latest.args | 2 +-
...fi-secboot-legacy-paths.x86_64-latest.args | 2 +-
...ware-manual-efi-secboot.x86_64-latest.args | 2 +-
...re-manual-efi-stateless.x86_64-latest.args | 2 +-
...manual-efi-varstore-q35.x86_64-latest.args | 2 +-
.../firmware-manual-efi.x86_64-latest.args | 2 +-
...e-manual-noefi-acpi-q35.x86_64-latest.args | 2 +-
...manual-noefi-noacpi-q35.x86_64-latest.args | 2 +-
.../floppy-drive-fat.x86_64-latest.args | 2 +-
tests/qemuxmlconfdata/fs9p.x86_64-latest.args | 2 +-
.../genid-auto.x86_64-latest.args | 2 +-
.../qemuxmlconfdata/genid.x86_64-latest.args | 2 +-
.../graphics-dbus-address.x86_64-latest.args | 2 +-
.../graphics-dbus-audio.x86_64-latest.args | 2 +-
.../graphics-dbus-chardev.x86_64-latest.args | 2 +-
.../graphics-dbus-p2p.x86_64-latest.args | 2 +-
.../graphics-dbus-usbredir.x86_64-latest.args | 2 +-
.../graphics-dbus.x86_64-latest.args | 2 +-
...egl-headless-rendernode.x86_64-latest.args | 2 +-
.../graphics-egl-headless.x86_64-latest.args | 2 +-
...graphics-listen-network.x86_64-latest.args | 2 +-
.../graphics-rdp.x86_64-latest.args | 2 +-
...graphics-sdl-fullscreen.x86_64-latest.args | 2 +-
.../graphics-sdl.x86_64-latest.args | 2 +-
...s-spice-agent-file-xfer.x86_64-latest.args | 2 +-
...aphics-spice-agentmouse.x86_64-latest.args | 2 +-
...s-spice-auto-socket-cfg.x86_64-latest.args | 2 +-
...phics-spice-auto-socket.x86_64-latest.args | 2 +-
...phics-spice-compression.x86_64-latest.args | 2 +-
...hics-spice-egl-headless.x86_64-latest.args | 2 +-
...pice-gl-auto-rendernode.x86_64-latest.args | 2 +-
.../graphics-spice-no-args.x86_64-latest.args | 2 +-
.../graphics-spice-qxl-vga.x86_64-latest.args | 2 +-
.../graphics-spice-sasl.x86_64-latest.args | 2 +-
.../graphics-spice-socket.x86_64-latest.args | 2 +-
.../graphics-spice-timeout.x86_64-latest.args | 2 +-
...raphics-spice-usb-redir.x86_64-latest.args | 2 +-
.../graphics-spice.x86_64-latest.args | 2 +-
...ics-vnc-auto-socket-cfg.x86_64-latest.args | 2 +-
...raphics-vnc-auto-socket.x86_64-latest.args | 2 +-
...aphics-vnc-egl-headless.x86_64-latest.args | 2 +-
...hics-vnc-no-listen-attr.x86_64-latest.args | 2 +-
.../graphics-vnc-none.x86_64-latest.args | 2 +-
.../graphics-vnc-policy.x86_64-latest.args | 2 +-
.../graphics-vnc-power.x86_64-latest.args | 2 +-
...remove-generated-socket.x86_64-latest.args | 2 +-
.../graphics-vnc-sasl.x86_64-latest.args | 2 +-
...-vnc-socket-new-cmdline.x86_64-latest.args | 2 +-
.../graphics-vnc-socket.x86_64-latest.args | 2 +-
...hics-vnc-standalone-p2p.x86_64-latest.args | 2 +-
...s-vnc-standalone-socket.x86_64-latest.args | 2 +-
...graphics-vnc-standalone.x86_64-latest.args | 2 +-
...graphics-vnc-tls-secret.x86_64-latest.args | 2 +-
.../graphics-vnc-tls.x86_64-latest.args | 2 +-
.../graphics-vnc-websocket.x86_64-latest.args | 2 +-
.../graphics-vnc.x86_64-latest.args | 2 +-
...tdev-mdev-display-ramfb.x86_64-latest.args | 2 +-
...play-spice-egl-headless.x86_64-latest.args | 2 +-
...ev-display-spice-opengl.x86_64-latest.args | 2 +-
...isplay-vnc-egl-headless.x86_64-latest.args | 2 +-
...ostdev-mdev-display-vnc.x86_64-latest.args | 2 +-
.../hostdev-mdev-display.x86_64-latest.args | 2 +-
...hostdev-mdev-precreated.x86_64-latest.args | 2 +-
...tdev-pci-address-device.x86_64-latest.args | 2 +-
...-pci-address-unassigned.x86_64-latest.args | 2 +-
.../hostdev-pci-address.x86_64-latest.args | 2 +-
...stdev-pci-display-ramfb.x86_64-latest.args | 2 +-
...stdev-pci-multifunction.x86_64-latest.args | 2 +-
...ev-scsi-autogen-address.x86_64-latest.args | 2 +-
...hostdev-scsi-large-unit.x86_64-latest.args | 2 +-
.../hostdev-scsi-lsi.x86_64-latest.args | 2 +-
.../hostdev-scsi-shareable.x86_64-latest.args | 2 +-
...dev-scsi-vhost-scsi-pci.x86_64-latest.args | 2 +-
...ev-scsi-vhost-scsi-pcie.x86_64-latest.args | 2 +-
...ostdev-scsi-virtio-scsi.x86_64-latest.args | 2 +-
...usb-address-device-boot.x86_64-latest.args | 2 +-
...tdev-usb-address-device.x86_64-latest.args | 2 +-
...ostdev-usb-address-port.x86_64-latest.args | 2 +-
.../hostdev-usb-address.x86_64-latest.args | 2 +-
...tdev-usb-vendor-product.x86_64-latest.args | 2 +-
...ostdev-vfio-multidomain.x86_64-latest.args | 2 +-
.../hostdev-vfio.x86_64-latest.args | 2 +-
.../hotplug-base.x86_64-latest.args | 2 +-
.../hugepages-default-2M.x86_64-latest.args | 2 +-
...ges-default-system-size.x86_64-latest.args | 2 +-
.../hugepages-default.x86_64-latest.args | 2 +-
.../hugepages-memaccess.x86_64-latest.args | 2 +-
.../hugepages-memaccess2.x86_64-latest.args | 2 +-
.../hugepages-memaccess3.x86_64-latest.args | 2 +-
.../hugepages-nodeset.x86_64-latest.args | 2 +-
...gepages-numa-default-2M.x86_64-latest.args | 2 +-
...pages-numa-default-dimm.x86_64-latest.args | 2 +-
.../hugepages-numa-default.x86_64-latest.args | 2 +-
...pages-numa-nodeset-part.x86_64-latest.args | 2 +-
.../hugepages-numa-nodeset.x86_64-latest.args | 2 +-
.../hugepages-nvdimm.x86_64-latest.args | 2 +-
.../hugepages-shared.x86_64-latest.args | 2 +-
.../qemuxmlconfdata/hwuuid.x86_64-latest.args | 2 +-
.../hyperv-host-model.x86_64-latest.args | 2 +-
.../hyperv-off.x86_64-latest.args | 2 +-
.../hyperv-panic.x86_64-latest.args | 2 +-
.../hyperv-passthrough.x86_64-latest.args | 2 +-
...-spinlocks-never-notify.x86_64-latest.args | 2 +-
.../hyperv-stimer-direct.x86_64-latest.args | 2 +-
.../qemuxmlconfdata/hyperv.x86_64-latest.args | 2 +-
.../input-linux.x86_64-latest.args | 2 +-
.../input-usbmouse-addr.x86_64-latest.args | 2 +-
.../input-usbmouse.x86_64-latest.args | 2 +-
.../input-usbtablet.x86_64-latest.args | 2 +-
.../intel-iommu-aw-bits.x86_64-latest.args | 2 +-
...ntel-iommu-caching-mode.x86_64-latest.args | 2 +-
...ntel-iommu-device-iotlb.x86_64-latest.args | 2 +-
...l-iommu-dma-translation.x86_64-latest.args | 2 +-
...-eim-autoadd.x86_64-latest.abi-update.args | 2 +-
.../intel-iommu-eim.x86_64-latest.args | 2 +-
.../intel-iommu.x86_64-latest.args | 2 +-
.../iommufd-q35-fd.x86_64-latest.args | 2 +-
.../iommufd-q35.x86_64-latest.args | 2 +-
.../iommufd.x86_64-latest.args | 2 +-
.../iothreads-disk.x86_64-latest.args | 2 +-
.../iothreads-ids-partial.x86_64-latest.args | 2 +-
...othreads-ids-pool-sizes.x86_64-latest.args | 2 +-
.../iothreads-ids.x86_64-latest.args | 2 +-
...ads-virtio-scsi-mapping.x86_64-latest.args | 2 +-
...threads-virtio-scsi-pci.x86_64-latest.args | 2 +-
.../kvm-features-off.x86_64-latest.args | 2 +-
.../kvm-features.x86_64-latest.args | 2 +-
.../kvm-pit-delay.x86_64-latest.args | 2 +-
.../kvm-pit-discard.x86_64-latest.args | 2 +-
.../kvmclock+eoi-disabled.x86_64-latest.args | 2 +-
.../kvmclock.x86_64-latest.args | 2 +-
...nch-security-sev-direct.x86_64-latest.args | 2 +-
...launch-security-sev-snp.x86_64-latest.args | 2 +-
.../qemuxmlconfdata/lease.x86_64-latest.args | 2 +-
...luks-disks-source-qcow2.x86_64-latest.args | 2 +-
.../luks-disks-source.x86_64-latest.args | 2 +-
.../luks-disks.x86_64-latest.args | 2 +-
.../machine-aliases1.x86_64-latest.args | 2 +-
.../machine-aliases2.x86_64-latest.args | 2 +-
.../machine-core-off.x86_64-latest.args | 2 +-
.../machine-core-on.x86_64-latest.args | 2 +-
.../machine-i8042-off.x86_64-latest.args | 2 +-
.../machine-i8042-on.x86_64-latest.args | 2 +-
.../machine-smm-off.x86_64-latest.args | 2 +-
.../machine-smm-on.x86_64-latest.args | 2 +-
.../machine-vmport-opt.x86_64-latest.args | 2 +-
...memory-default-hugepage.x86_64-latest.args | 2 +-
.../memfd-memory-numa.x86_64-latest.args | 2 +-
...emory-hotplug-dimm-addr.x86_64-latest.args | 2 +-
.../memory-hotplug-dimm.x86_64-latest.args | 2 +-
...memory-hotplug-multiple.x86_64-latest.args | 2 +-
...-hotplug-numa-preferred.x86_64-latest.args | 2 +-
...y-hotplug-nvdimm-access.x86_64-latest.args | 2 +-
...ry-hotplug-nvdimm-align.x86_64-latest.args | 2 +-
...ry-hotplug-nvdimm-label.x86_64-latest.args | 2 +-
...-hotplug-nvdimm-overlap.x86_64-latest.args | 2 +-
...ory-hotplug-nvdimm-pmem.x86_64-latest.args | 2 +-
...hotplug-nvdimm-readonly.x86_64-latest.args | 2 +-
.../memory-hotplug-nvdimm.x86_64-latest.args | 2 +-
...mory-hotplug-virtio-mem.x86_64-latest.args | 2 +-
...ory-hotplug-virtio-pmem.x86_64-latest.args | 2 +-
.../memory-hotplug.x86_64-latest.args | 2 +-
.../memorybacking-set.x86_64-latest.args | 2 +-
.../memorybacking-unset.x86_64-latest.args | 2 +-
.../memtune-unlimited.x86_64-latest.args | 2 +-
.../memtune.x86_64-latest.args | 2 +-
.../metadata-duplicate.x86_64-latest.args | 2 +-
.../metadata.x86_64-latest.args | 2 +-
.../migrate-numa-unaligned.x86_64-latest.args | 2 +-
.../migrate.x86_64-latest.args | 2 +-
.../misc-disable-s3.x86_64-latest.args | 2 +-
.../misc-disable-suspends.x86_64-latest.args | 2 +-
.../misc-enable-s4.x86_64-latest.args | 2 +-
.../misc-no-reboot.x86_64-latest.args | 2 +-
.../misc-uuid.x86_64-latest.args | 2 +-
.../mlock-off.x86_64-latest.args | 2 +-
.../mlock-on.x86_64-latest.args | 2 +-
.../mtp-usb-device.x86_64-latest.args | 2 +-
...ultifunction-pci-device.x86_64-latest.args | 2 +-
.../name-escape.x86_64-latest.args | 2 +-
.../net-bandwidth.x86_64-latest.args | 2 +-
.../net-bandwidth2.x86_64-latest.args | 2 +-
.../net-client.x86_64-latest.args | 2 +-
.../net-coalesce.x86_64-latest.args | 2 +-
.../net-eth-hostip.x86_64-latest.args | 2 +-
.../net-eth-ifname.x86_64-latest.args | 2 +-
.../net-eth-names.x86_64-latest.args | 2 +-
.../net-eth-unmanaged-tap.x86_64-latest.args | 2 +-
.../net-eth.x86_64-latest.args | 2 +-
.../net-hostdev-bootorder.x86_64-latest.args | 2 +-
...net-hostdev-multidomain.x86_64-latest.args | 2 +-
...ostdev-vfio-multidomain.x86_64-latest.args | 2 +-
.../net-hostdev-vfio.x86_64-latest.args | 2 +-
.../net-hostdev.x86_64-latest.args | 2 +-
.../net-isolated-port.x86_64-latest.args | 2 +-
.../net-linkstate.x86_64-latest.args | 2 +-
.../net-many-models.x86_64-latest.args | 2 +-
.../net-mcast.x86_64-latest.args | 2 +-
.../net-midonet.x86_64-latest.args | 2 +-
.../net-mtu.x86_64-latest.args | 2 +-
.../net-openvswitch.x86_64-latest.args | 2 +-
.../net-server.x86_64-latest.args | 2 +-
.../net-udp.x86_64-latest.args | 2 +-
.../net-usb.x86_64-latest.args | 2 +-
.../net-user-addr.x86_64-latest.args | 2 +-
.../net-user-passt.x86_64-latest.args | 2 +-
.../net-user.x86_64-latest.args | 2 +-
.../net-vdpa-multiqueue.x86_64-latest.args | 2 +-
.../net-vdpa.x86_64-latest.args | 2 +-
.../net-vhostuser-multiq.x86_64-latest.args | 2 +-
.../net-vhostuser-passt.x86_64-latest.args | 2 +-
.../net-vhostuser.x86_64-latest.args | 2 +-
.../net-virtio-device.x86_64-latest.args | 2 +-
...virtio-disable-offloads.x86_64-latest.args | 2 +-
.../net-virtio-netdev.x86_64-latest.args | 2 +-
...irtio-network-portgroup.x86_64-latest.args | 2 +-
.../net-virtio-rss.x86_64-latest.args | 2 +-
...et-virtio-rxtxqueuesize.x86_64-latest.args | 2 +-
...-virtio-teaming-hostdev.x86_64-latest.args | 2 +-
...-virtio-teaming-network.x86_64-latest.args | 2 +-
.../net-virtio-teaming.x86_64-latest.args | 2 +-
.../net-virtio-vhost.x86_64-latest.args | 2 +-
.../net-virtio.x86_64-latest.args | 2 +-
.../nosharepages.x86_64-latest.args | 2 +-
...auto-memory-vcpu-cpuset.x86_64-latest.args | 2 +-
...no-cpuset-and-placement.x86_64-latest.args | 2 +-
...d-auto-vcpu-no-numatune.x86_64-latest.args | 2 +-
...to-vcpu-static-numatune.x86_64-latest.args | 2 +-
...static-memory-auto-vcpu.x86_64-latest.args | 2 +-
...static-vcpu-no-numatune.x86_64-latest.args | 2 +-
.../qemuxmlconfdata/numad.x86_64-latest.args | 2 +-
...ne-auto-nodeset-invalid.x86_64-latest.args | 2 +-
.../numatune-auto-prefer.x86_64-latest.args | 2 +-
.../numatune-distances.x86_64-latest.args | 2 +-
.../numatune-hmat-none.x86_64-latest.args | 2 +-
.../numatune-hmat.x86_64-latest.args | 2 +-
...atune-memnode-no-memory.x86_64-latest.args | 2 +-
...emnode-restrictive-mode.x86_64-latest.args | 2 +-
.../numatune-memnode.x86_64-latest.args | 2 +-
.../numatune-no-vcpu.x86_64-latest.args | 2 +-
.../numatune-system-memory.x86_64-latest.args | 2 +-
...vcpus-topology-mismatch.x86_64-latest.args | 2 +-
.../pages-dimm-discard.x86_64-latest.args | 2 +-
...pages-discard-hugepages.x86_64-latest.args | 2 +-
.../pages-discard.x86_64-latest.args | 2 +-
.../panic-double.x86_64-latest.args | 2 +-
.../panic-no-address.x86_64-latest.args | 2 +-
.../qemuxmlconfdata/panic.x86_64-latest.args | 2 +-
...arallel-parport-chardev.x86_64-latest.args | 2 +-
.../parallel-tcp-chardev.x86_64-latest.args | 2 +-
.../parallel-unix-chardev.x86_64-latest.args | 2 +-
...pi-root-hotplug-disable.x86_64-latest.args | 2 +-
...cpi-root-hotplug-enable.x86_64-latest.args | 2 +-
.../pci-autoadd-addr.x86_64-latest.args | 2 +-
.../pci-autoadd-idx.x86_64-latest.args | 2 +-
.../pci-autofill-addr.x86_64-latest.args | 2 +-
.../pci-bridge-many-disks.x86_64-latest.args | 2 +-
.../pci-bridge.x86_64-latest.args | 2 +-
.../pci-expander-bus.x86_64-latest.args | 2 +-
.../pci-many.x86_64-latest.args | 2 +-
.../pci-rom-disabled.x86_64-latest.args | 2 +-
.../pci-rom.x86_64-latest.args | 2 +-
.../pci-serial-dev-chardev.x86_64-latest.args | 2 +-
.../pcie-expander-bus.x86_64-latest.args | 2 +-
...root-port-model-generic.x86_64-latest.args | 2 +-
...root-port-model-ioh3420.x86_64-latest.args | 2 +-
...cie-root-port-nohotplug.x86_64-latest.args | 2 +-
.../pcie-root-port.x86_64-latest.args | 2 +-
.../pcie-root.x86_64-latest.args | 2 +-
...-switch-downstream-port.x86_64-latest.args | 2 +-
...ie-switch-upstream-port.x86_64-latest.args | 2 +-
.../pcihole64-gib.x86_64-latest.args | 2 +-
.../pcihole64-q35.x86_64-latest.args | 2 +-
.../pcihole64.x86_64-latest.args | 2 +-
.../pmu-feature-off.x86_64-latest.args | 2 +-
.../pmu-feature.x86_64-latest.args | 2 +-
.../pstore-acpi-erst.x86_64-latest.args | 2 +-
.../pv-spinlock-disabled.x86_64-latest.args | 2 +-
.../pv-spinlock-enabled.x86_64-latest.args | 2 +-
.../pvpanic-pci-x86_64.x86_64-latest.args | 2 +-
...35-default-devices-only.x86_64-latest.args | 2 +-
.../q35-multifunction.x86_64-latest.args | 2 +-
.../q35-pci-force-address.x86_64-latest.args | 2 +-
.../q35-pcie-autoadd.x86_64-latest.args | 2 +-
.../q35-pcie.x86_64-latest.args | 2 +-
.../q35-usb2-multi.x86_64-latest.args | 2 +-
.../q35-usb2-reorder.x86_64-latest.args | 2 +-
.../q35-usb2.x86_64-latest.args | 2 +-
.../q35-virt-manager-basic.x86_64-latest.args | 2 +-
tests/qemuxmlconfdata/q35.x86_64-latest.args | 2 +-
.../qemu-ns-alt.x86_64-latest.args | 2 +-
...qemu-ns-commandline-ns0.x86_64-latest.args | 2 +-
...qemu-ns-commandline-ns1.x86_64-latest.args | 2 +-
.../qemu-ns-commandline.x86_64-latest.args | 2 +-
...-domain-commandline-ns0.x86_64-latest.args | 2 +-
...u-ns-domain-commandline.x86_64-latest.args | 2 +-
.../qemu-ns-domain-ns0.x86_64-latest.args | 2 +-
.../qemu-ns-no-env.x86_64-latest.args | 2 +-
.../qemu-ns.x86_64-latest.args | 2 +-
...reboot-timeout-disabled.x86_64-latest.args | 2 +-
.../reboot-timeout-enabled.x86_64-latest.args | 2 +-
.../restore-v2-fd.x86_64-latest.args | 2 +-
.../restore-v2.x86_64-latest.args | 2 +-
...rder-domain-subelements.x86_64-latest.args | 2 +-
.../seclabel-dac-none.x86_64-latest.args | 2 +-
...eclabel-device-multiple.x86_64-latest.args | 2 +-
...label-dynamic-baselabel.x86_64-latest.args | 2 +-
...label-dynamic-labelskip.x86_64-latest.args | 2 +-
...el-dynamic-none-relabel.x86_64-latest.args | 2 +-
.../seclabel-dynamic-none.x86_64-latest.args | 2 +-
...clabel-dynamic-override.x86_64-latest.args | 2 +-
...eclabel-dynamic-relabel.x86_64-latest.args | 2 +-
.../seclabel-dynamic.x86_64-latest.args | 2 +-
.../seclabel-none.x86_64-latest.args | 2 +-
...l-selinux-none-override.x86_64-latest.args | 2 +-
...clabel-static-labelskip.x86_64-latest.args | 2 +-
...seclabel-static-relabel.x86_64-latest.args | 2 +-
.../seclabel-static.x86_64-latest.args | 2 +-
.../serial-debugcon.x86_64-latest.args | 2 +-
...rial-dev-chardev-iobase.x86_64-latest.args | 2 +-
.../serial-dev-chardev.x86_64-latest.args | 2 +-
.../serial-file-chardev.x86_64-latest.args | 2 +-
.../serial-file-log.x86_64-latest.args | 2 +-
.../serial-many-chardev.x86_64-latest.args | 2 +-
.../serial-pty-chardev.x86_64-latest.args | 2 +-
.../serial-spiceport.x86_64-latest.args | 2 +-
...serial-target-port-auto.x86_64-latest.args | 2 +-
.../serial-tcp-chardev.x86_64-latest.args | 2 +-
...rial-tcp-telnet-chardev.x86_64-latest.args | 2 +-
...p-tlsx509-chardev-notls.x86_64-latest.args | 2 +-
...-tlsx509-chardev-verify.x86_64-latest.args | 2 +-
...ial-tcp-tlsx509-chardev.x86_64-latest.args | 2 +-
...-tlsx509-secret-chardev.x86_64-latest.args | 2 +-
.../serial-udp-chardev.x86_64-latest.args | 2 +-
.../serial-unix-chardev.x86_64-latest.args | 2 +-
.../serial-vc-chardev.x86_64-latest.args | 2 +-
.../shmem-plain-doorbell.x86_64-latest.args | 2 +-
.../smartcard-controller.x86_64-latest.args | 2 +-
...t-certificates-database.x86_64-latest.args | 2 +-
...tcard-host-certificates.x86_64-latest.args | 2 +-
.../smartcard-host.x86_64-latest.args | 2 +-
...rd-passthrough-spicevmc.x86_64-latest.args | 2 +-
...artcard-passthrough-tcp.x86_64-latest.args | 2 +-
...rtcard-passthrough-unix.x86_64-latest.args | 2 +-
.../smbios-type-fwcfg.x86_64-latest.args | 2 +-
.../qemuxmlconfdata/smbios.x86_64-latest.args | 2 +-
.../sound-device-virtio.x86_64-latest.args | 2 +-
.../sound-device.x86_64-latest.args | 2 +-
.../tap-vhost-incorrect.x86_64-latest.args | 2 +-
.../tap-vhost.x86_64-latest.args | 2 +-
.../throttlefilter.x86_64-latest.args | 2 +-
...pm-emulator-crb-profile.x86_64-latest.args | 2 +-
.../tpm-emulator-tpm2-enc.x86_64-latest.args | 2 +-
...pm-emulator-tpm2-pstate.x86_64-latest.args | 2 +-
.../tpm-emulator-tpm2.x86_64-latest.args | 2 +-
.../tpm-emulator.x86_64-latest.args | 2 +-
.../tpm-external.x86_64-latest.args | 2 +-
.../tpm-passthrough-crb.x86_64-latest.args | 2 +-
.../tpm-passthrough.x86_64-latest.args | 2 +-
.../tseg-explicit-size.x86_64-latest.args | 2 +-
...roller-automatic-i440fx.x86_64-latest.args | 2 +-
...troller-automatic-isapc.x86_64-latest.args | 2 +-
...oller-automatic-microvm.x86_64-latest.args | 2 +-
...ontroller-automatic-q35.x86_64-latest.args | 2 +-
...tomatic-unavailable-q35.x86_64-latest.args | 2 +-
...ntroller-default-i440fx.x86_64-latest.args | 2 +-
...-controller-default-q35.x86_64-latest.args | 2 +-
...troller-ich9-autoassign.x86_64-latest.args | 2 +-
...ntroller-ich9-companion.x86_64-latest.args | 2 +-
...ntroller-ich9-ehci-addr.x86_64-latest.args | 2 +-
...ler-nec-xhci-autoassign.x86_64-latest.args | 2 +-
...usb-controller-nec-xhci.x86_64-latest.args | 2 +-
.../usb-controller-piix3.x86_64-latest.args | 2 +-
...sb-controller-qemu-xhci.x86_64-latest.args | 2 +-
.../usb-hub-autoadd-deluxe.x86_64-latest.args | 2 +-
.../usb-hub-autoadd.x86_64-latest.args | 2 +-
.../usb-hub.x86_64-latest.args | 2 +-
.../usb-long-port-path.x86_64-latest.args | 2 +-
.../usb-none.x86_64-latest.args | 2 +-
.../usb-port-autoassign.x86_64-latest.args | 2 +-
.../usb-port-missing.x86_64-latest.args | 2 +-
.../usb-ports.x86_64-latest.args | 2 +-
.../usb-redir-boot.x86_64-latest.args | 2 +-
...sb-redir-filter-version.x86_64-latest.args | 2 +-
.../usb-redir-filter.x86_64-latest.args | 2 +-
.../usb-redir-unix.x86_64-latest.args | 2 +-
.../usb-redir.x86_64-latest.args | 2 +-
.../usb1-usb2.x86_64-latest.args | 2 +-
.../user-aliases-usb.x86_64-latest.args | 2 +-
.../user-aliases.x86_64-latest.args | 2 +-
.../user-aliases2.x86_64-latest.args | 2 +-
.../vcpu-placement-static.x86_64-latest.args | 2 +-
...vhost-user-fs-fd-memory.x86_64-latest.args | 2 +-
...st-user-fs-fd-openfiles.x86_64-latest.args | 2 +-
...vhost-user-fs-hugepages.x86_64-latest.args | 2 +-
.../vhost-user-fs-readonly.x86_64-latest.args | 2 +-
.../vhost-user-fs-sock.x86_64-latest.args | 2 +-
...host-user-gpu-secondary.x86_64-latest.args | 2 +-
.../vhost-user-vga.x86_64-latest.args | 2 +-
.../vhost-vsock-auto.x86_64-latest.args | 2 +-
.../vhost-vsock.x86_64-latest.args | 2 +-
...eo-bochs-display-device.x86_64-latest.args | 2 +-
.../video-bochs-edid-none.x86_64-latest.args | 2 +-
.../video-bochs-edid-off.x86_64-latest.args | 2 +-
.../video-bochs-edid-on.x86_64-latest.args | 2 +-
...-device-pciaddr-default.x86_64-latest.args | 2 +-
.../video-none-device.x86_64-latest.args | 2 +-
...video-qxl-device-vgamem.x86_64-latest.args | 2 +-
...video-qxl-device-vram64.x86_64-latest.args | 2 +-
.../video-qxl-device.x86_64-latest.args | 2 +-
.../video-qxl-heads.x86_64-latest.args | 2 +-
.../video-qxl-noheads.x86_64-latest.args | 2 +-
.../video-qxl-resolution.x86_64-latest.args | 2 +-
...o-qxl-sec-device-vgamem.x86_64-latest.args | 2 +-
...o-qxl-sec-device-vram64.x86_64-latest.args | 2 +-
.../video-qxl-sec-device.x86_64-latest.args | 2 +-
...eo-ramfb-display-device.x86_64-latest.args | 2 +-
...video-vga-device-vgamem.x86_64-latest.args | 2 +-
.../video-vga-device.x86_64-latest.args | 2 +-
.../video-vga-edid-none.x86_64-latest.args | 2 +-
.../video-vga-edid-off.x86_64-latest.args | 2 +-
.../video-vga-edid-on.x86_64-latest.args | 2 +-
.../video-vga-qxl-heads.x86_64-latest.args | 2 +-
.../video-virtio-blob-off.x86_64-latest.args | 2 +-
.../video-virtio-blob-on.x86_64-latest.args | 2 +-
.../video-virtio-edid-none.x86_64-latest.args | 2 +-
.../video-virtio-edid-off.x86_64-latest.args | 2 +-
.../video-virtio-edid-on.x86_64-latest.args | 2 +-
...video-virtio-gpu-device.x86_64-latest.args | 2 +-
...video-virtio-gpu-sdl-gl.x86_64-latest.args | 2 +-
...eo-virtio-gpu-secondary.x86_64-latest.args | 2 +-
...deo-virtio-gpu-spice-gl.x86_64-latest.args | 2 +-
.../video-virtio-gpu-virgl.x86_64-latest.args | 2 +-
...io-vga-device-downgrade.x86_64-latest.args | 2 +-
....QEMU_CAPS_VIRTIO_GPU_GL_PCI-disabled.args | 2 +-
...APS_VIRTIO_VGA_GL-disabled-ABI_UPDATE.args | 2 +-
...test.QEMU_CAPS_VIRTIO_VGA_GL-disabled.args | 2 +-
...video-virtio-vga-gpu-gl.x86_64-latest.args | 2 +-
....QEMU_CAPS_DEVICE_VIRTIO_VGA-disabled.args | 2 +-
.../video-virtio-vga.x86_64-latest.args | 2 +-
.../virtio-9p-createmode.x86_64-latest.args | 2 +-
.../virtio-9p-multidevs.x86_64-latest.args | 2 +-
...irtio-input-passthrough.x86_64-latest.args | 2 +-
.../virtio-input.x86_64-latest.args | 2 +-
.../virtio-iommu-x86_64.x86_64-latest.args | 2 +-
...virtio-non-transitional.x86_64-latest.args | 2 +-
...-options-controller-ats.x86_64-latest.args | 2 +-
...ptions-controller-iommu.x86_64-latest.args | 2 +-
...tions-controller-packed.x86_64-latest.args | 2 +-
...virtio-options-disk-ats.x86_64-latest.args | 2 +-
...rtio-options-disk-iommu.x86_64-latest.args | 2 +-
...tio-options-disk-packed.x86_64-latest.args | 2 +-
.../virtio-options-fs-ats.x86_64-latest.args | 2 +-
...virtio-options-fs-iommu.x86_64-latest.args | 2 +-
...irtio-options-fs-packed.x86_64-latest.args | 2 +-
...irtio-options-input-ats.x86_64-latest.args | 2 +-
...tio-options-input-iommu.x86_64-latest.args | 2 +-
...io-options-input-packed.x86_64-latest.args | 2 +-
...-options-memballoon-ats.x86_64-latest.args | 2 +-
...loon-freepage-reporting.x86_64-latest.args | 2 +-
...ptions-memballoon-iommu.x86_64-latest.args | 2 +-
...tions-memballoon-packed.x86_64-latest.args | 2 +-
.../virtio-options-net-ats.x86_64-latest.args | 2 +-
...irtio-options-net-iommu.x86_64-latest.args | 2 +-
...rtio-options-net-packed.x86_64-latest.args | 2 +-
.../virtio-options-rng-ats.x86_64-latest.args | 2 +-
...irtio-options-rng-iommu.x86_64-latest.args | 2 +-
...rtio-options-rng-packed.x86_64-latest.args | 2 +-
...irtio-options-video-ats.x86_64-latest.args | 2 +-
...tio-options-video-iommu.x86_64-latest.args | 2 +-
...io-options-video-packed.x86_64-latest.args | 2 +-
.../virtio-options.x86_64-latest.args | 2 +-
.../virtio-rng-builtin.x86_64-latest.args | 2 +-
.../virtio-rng-default.x86_64-latest.args | 2 +-
.../virtio-rng-egd-unix.x86_64-latest.args | 2 +-
.../virtio-rng-egd.x86_64-latest.args | 2 +-
.../virtio-rng-multiple.x86_64-latest.args | 2 +-
.../virtio-rng-random.x86_64-latest.args | 2 +-
.../virtio-transitional.x86_64-latest.args | 2 +-
.../vmcoreinfo.x86_64-latest.args | 2 +-
.../watchdog-device.x86_64-latest.args | 2 +-
.../watchdog-dump.x86_64-latest.args | 2 +-
.../watchdog-injectnmi.x86_64-latest.args | 2 +-
.../watchdog-q35-multiple.x86_64-latest.args | 2 +-
.../watchdog.x86_64-latest.args | 2 +-
.../x86-kvm-32-on-64.x86_64-latest.args | 2 +-
...6_64-default-cpu-kvm-pc.x86_64-latest.args | 2 +-
..._64-default-cpu-kvm-q35.x86_64-latest.args | 2 +-
...efault-cpu-tcg-features.x86_64-latest.args | 2 +-
...6_64-default-cpu-tcg-pc.x86_64-latest.args | 2 +-
..._64-default-cpu-tcg-q35.x86_64-latest.args | 2 +-
...fault-models.x86_64-latest.abi-update.args | 2 +-
...86_64-pc-default-models.x86_64-latest.args | 2 +-
.../x86_64-pc-graphics.x86_64-latest.args | 2 +-
.../x86_64-pc-headless.x86_64-latest.args | 2 +-
...4-pc-minimal.x86_64-latest.abi-update.args | 2 +-
.../x86_64-pc-minimal.x86_64-latest.args | 2 +-
...fault-models.x86_64-latest.abi-update.args | 2 +-
...6_64-q35-default-models.x86_64-latest.args | 2 +-
.../x86_64-q35-graphics.x86_64-latest.args | 2 +-
.../x86_64-q35-headless.x86_64-latest.args | 2 +-
...-q35-minimal.x86_64-latest.abi-update.args | 2 +-
.../x86_64-q35-minimal.x86_64-latest.args | 2 +-
837 files changed, 1877 insertions(+), 1777 deletions(-)
--
2.54.0
1
7
QEMU provides the ability to encrypt the migration data stream using
two transport layer security (TLS) authentication schemes: X.509
certificates and pre-shared keys (PSK). Currently, Libvirt only
supports the X.509-based TLS authentication scheme. In TLS X.509
certificates, a set of live migrations utilize a fixed
set of static certificates for encrypted migration. In this
authentication scheme, users require to deploy a certificate authority
and monitor the certificate expiration window. In case certificates
are compromised all the future live migrations are vulnerable.
To resolve this, the patch series introduce the alternative pre-shared
key-based authentication scheme. This mechanism relies on symmetric
pre-shared keys (a secret key that is known to both sender and receiver
prior to secure communication) for providing secure transfer of data.
During a migration, the parties negotiate which unique key to utilize
for encrypting the migration data. To improve the security further, we
utilize different key files for each migration session.
Abhisek Panda (7):
conf: Add configuration params for TLS-PSK
include: define VIR_MIGRATE_TLS_PSK flag
qemu: Add support to build the tls-creds-psk object
qemu: rename tls-creds-x509 obj related functions
qemu: Manage tls-creds-psk object lifecycle
qemu: Set up the migrate TLS-PSK objects
include: define VIR_MIGRATE_PARAM_TLS_PSK_DIRECTORY
include/libvirt/libvirt-domain.h | 31 ++-
src/qemu/libvirtd_qemu.aug | 2 +
src/qemu/qemu.conf.in | 27 ++-
src/qemu/qemu_alias.c | 19 +-
src/qemu/qemu_alias.h | 5 +-
src/qemu/qemu_backup.c | 2 +-
src/qemu/qemu_command.c | 31 ++-
src/qemu/qemu_command.h | 8 +
src/qemu/qemu_conf.c | 55 ++++-
src/qemu/qemu_conf.h | 3 +
src/qemu/qemu_domain.c | 2 +-
src/qemu/qemu_driver.c | 24 ++-
src/qemu/qemu_hotplug.c | 125 +++++++----
src/qemu/qemu_hotplug.h | 43 ++--
src/qemu/qemu_migration.c | 194 ++++++++++++------
src/qemu/qemu_migration.h | 3 +
src/qemu/qemu_migration_params.c | 138 ++++++++++---
src/qemu/qemu_migration_params.h | 28 ++-
src/qemu/qemu_postparse.c | 2 +-
src/qemu/test_libvirtd_qemu.aug.in | 2 +
tests/qemumigparamsdata/tls-enabled.json | 2 +-
tests/qemumigparamsdata/tls-enabled.reply | 2 +-
tests/qemumigparamsdata/tls-enabled.xml | 2 +-
tests/qemumigparamsdata/tls-hostname.json | 2 +-
tests/qemumigparamsdata/tls-hostname.reply | 2 +-
tests/qemumigparamsdata/tls-hostname.xml | 2 +-
tests/qemumonitorjsontest.c | 4 +-
tests/qemustatusxml2xmldata/upgrade-out.xml | 2 +-
.../chardev-backends-json.x86_64-9.1.0.args | 8 +-
.../chardev-backends-json.x86_64-latest.args | 8 +-
.../chardev-backends.x86_64-9.1.0.args | 8 +-
.../chardev-backends.x86_64-latest.args | 8 +-
...rk-tlsx509-nbd-hostname.x86_64-latest.args | 6 +-
...isk-network-tlsx509-nbd.x86_64-latest.args | 6 +-
...-tlsx509-chardev-verify.x86_64-latest.args | 4 +-
...ial-tcp-tlsx509-chardev.x86_64-latest.args | 4 +-
...-tlsx509-secret-chardev.x86_64-latest.args | 4 +-
tests/testutilsqemu.c | 2 +
tools/virsh-domain.c | 12 ++
39 files changed, 623 insertions(+), 209 deletions(-)
--
2.39.3
4
18
[PATCH 0/6] qemu: Add infrastructure to prevent accidental disk shrink via 'virDomainBlockResize'
by Peter Krempa 22 Jun '26
by Peter Krempa 22 Jun '26
22 Jun '26
Shrinking a disk accidentally equals data loss and thus very bad time
for anyone mis-typing.
This series adds a new flag to virDomainBlockResize to prevent such a
thing if the user only intends to extend the disk.
In virsh I've went a bit further and actually change the behaviour of
'virsh blockresize' to use the new feature if available to prevent
mishaps.
Peter Krempa (6):
virDomainBlockResizeFlags: Convert to prefix-style docs
API/qemu: Introduce 'VIR_DOMAIN_BLOCK_RESIZE_EXTEND' for
'virDomainBlockResize'
virsh: blockresize: Introduce '--extend' flag
API: Introduce 'VIR_DOMAIN_BLOCK_RESIZE_PROBE_FLAGS' for
'virDomainBlockResize'
virsh/virt-admin: Add possibility to probe for new arguments
virsh: blockresize: Use VIR_DOMAIN_BLOCK_RESIZE_EXTEND when available
and introduce --allow-shrink
docs/manpages/virsh.rst | 31 +++++++++++++++++++++++++-
include/libvirt/libvirt-domain.h | 19 ++++++++++++++--
src/libvirt-domain.c | 17 +++++++++++++++
src/qemu/qemu_driver.c | 37 +++++++++++++++++++++++++++++++-
src/vz/vz_driver.c | 7 +++++-
tools/virsh-domain.c | 23 ++++++++++++++++++++
tools/virsh.c | 4 ++++
tools/virt-admin.c | 9 ++++++++
tools/vsh.c | 3 +++
tools/vsh.h | 1 +
10 files changed, 146 insertions(+), 5 deletions(-)
--
2.53.0
3
13
[PATCH v3 0/8] API introspection and prevent accidental disk shrink via 'virDomainBlockResize'
by Peter Krempa 22 Jun '26
by Peter Krempa 22 Jun '26
22 Jun '26
v2 got:
Reviewed-by: Ján Tomko <jtomko(a)redhat.com>
but I've made the following changes so I'm sending it out for review
once again:
- rebased on top of Laine's API
- added a typed parameter argument for future expansion
- added documentation for the XML
Patches 1/8 and 8/8 are new in the series. The rest is v3 of the last
posting with aforementioned changes and rebase.
Peter Krempa (8):
qemu: driver: Fix coding style after 'qemuDomainAnnounceInterface'
API: Introduce 'virConnectGetIntrospection'
virsh: Introduce 'introspection' command which uses
'virConnectGetIntrospection'
scripts: Introduce 'getintrospection' script
qemu: Implement 'virConnectGetIntrospection'
introspection: Add introspection of input typed parameters
virsh: blockresize: Use VIR_DOMAIN_BLOCK_RESIZE_EXTEND when available
and introduce --allow-shrink
docs: Add documentation for introspection XML
docs/docs.rst | 1 +
docs/formatintrospection.rst | 90 +++++++++
docs/manpages/virsh.rst | 30 ++-
docs/meson.build | 1 +
include/libvirt/libvirt-host.h | 5 +
scripts/genintrospection.py | 345 +++++++++++++++++++++++++++++++++
scripts/meson.build | 1 +
src/driver-hypervisor.h | 7 +
src/libvirt-host.c | 48 +++++
src/libvirt_private.syms | 5 +
src/libvirt_public.syms | 1 +
src/qemu/meson.build | 18 ++
src/qemu/qemu_driver.c | 29 ++-
src/remote/remote_driver.c | 1 +
src/remote/remote_protocol.x | 21 +-
src/remote_protocol-structs | 11 ++
src/rpc/gendispatch.pl | 4 +-
src/util/meson.build | 1 +
src/util/virintrospection.c | 82 ++++++++
src/util/virintrospection.h | 20 ++
tools/virsh-domain.c | 59 ++++++
tools/virsh-host.c | 43 ++++
22 files changed, 817 insertions(+), 6 deletions(-)
create mode 100644 docs/formatintrospection.rst
create mode 100755 scripts/genintrospection.py
create mode 100644 src/util/virintrospection.c
create mode 100644 src/util/virintrospection.h
--
2.54.0
2
12
This series adds qemuhotplugtest coverage for async vCPU unplug.
Async vCPU unplug does not complete at the device_del reply. The guest
CPU remains in a pending removal state until QEMU reports DEVICE_DELETED
and the QEMU driver handles the resulting process event. The new harness
support lets the tests observe that intermediate state and then complete
the unplug through the same process-event path used by the driver.
The setvcpu coverage exercises both a single-vCPU x86 hotplug entity and
a grouped ppc64 hotplug entity. These cases check the pending live XML
before completion and the final live/config XML after completion, while
also validating the expected vcpu-removed domain events.
The setvcpus coverage adds a separate count-based x86 downscale case.
This keeps the independent count-to-entity selection path covered
without duplicating the grouped-entity coverage from setvcpu.
Changes from v1:
- Fixed cumulative build issues with two patches
- rebased on latest master, two patches have already been merged
Akash Kulhalli (5):
qemu: expose process event handler to tests
tests: add helper for DEVICE_DELETED events
qemuhotplugtest: support async vcpu unplug completion
qemuhotplugtest: test setvcpu async unplug
qemuhotplugtest: test setvcpus async downscale
--
2.47.3
2
6
[PATCH v2] util: virHostCPUGetStatsLinux: add guest_nice to VIR_NODE_CPU_STATS_GUEST
by Claudio Fontana 22 Jun '26
by Claudio Fontana 22 Jun '26
22 Jun '26
On Linux the accounting stats come from /proc/stat entries and the mapping is:
https://www.kernel.org/doc/html/latest/filesystems/proc.html
VIR_NODE_CPU_STATS_KERNEL = (system + irq + softirq)
VIR_NODE_CPU_STATS_USER = (user + nice)
VIR_NODE_CPU_STATS_IDLE = idle
<VIR_NODE_CPU_STATS_INTR> = N/A, irq is accounted by libvirt as KERNEL
VIR_NODE_CPU_STATS_IOWAIT = iowait
VIR_NODE_CPU_STATS_GUEST = guest
VIR_NODE_CPU_STATS_GUEST was introduced in: b5878727c714
("util: virHostCPUGetStatsLinux: support VIR_NODE_CPU_STATS_GUEST")
with the goal of specifically accounting the CPU time spent running guest VCPUs.
Unfortunately at the time it was not considered that to get a measure of this
time, "guest" is not sufficient, because any guest that is "niced" is accounted
in a separate category, "guest_nice".
This patch rectifies the situation by adding the guest_nice counter, so that
VIR_NODE_CPU_STATS_GUEST = (guest + guest_nice)
which makes the statistic useful to the caller, as the totals sum up correctly.
In order to find the total USER time spent running host tasks, for example:
cpu_user_host = VIR_NODE_CPU_STATS_USER - VIR_NODE_CPU_STATS_GUEST
this follows from the fact that "guest" is included in "user" accounting,
and "guest_nice" is included in "nice" accounting.
Extend the existing tests artificially to capture this specific case.
Fixes: b5878727c714d813c820ad4a1b695fbbb5ffc84e
Signed-off-by: Claudio Fontana <cfontana(a)suse.de>
---
src/util/virhostcpu.c | 2 +-
tests/virhostcpudata/linux-cpustat-24cpu.out | 8 ++++----
tests/virhostcpudata/linux-cpustat-24cpu.stat | 4 ++--
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
index 1db096ba24..f2b25e940b 100644
--- a/src/util/virhostcpu.c
+++ b/src/util/virhostcpu.c
@@ -882,7 +882,7 @@ virHostCPUGetStatsLinux(FILE *procstat,
return -1;
if (virHostCPUStatsAssign(¶ms[4], VIR_NODE_CPU_STATS_GUEST,
- guest * TICK_TO_NSEC) < 0)
+ (guest + guest_nice) * TICK_TO_NSEC) < 0)
return -1;
return 0;
}
diff --git a/tests/virhostcpudata/linux-cpustat-24cpu.out b/tests/virhostcpudata/linux-cpustat-24cpu.out
index f3183f5c41..a975702a06 100644
--- a/tests/virhostcpudata/linux-cpustat-24cpu.out
+++ b/tests/virhostcpudata/linux-cpustat-24cpu.out
@@ -1,16 +1,16 @@
cpu:
kernel: 8751170
user: 14128079
-idle: 1816344522
+idle: 1816344521
iowait: 81323
-guest: 5880634
+guest: 5880635
cpu0:
kernel: 447603
user: 749021
-idle: 75399242
+idle: 75399241
iowait: 5295
-guest: 331814
+guest: 331815
cpu1:
kernel: 167215
diff --git a/tests/virhostcpudata/linux-cpustat-24cpu.stat b/tests/virhostcpudata/linux-cpustat-24cpu.stat
index bc9d449e1c..e13035b5f0 100644
--- a/tests/virhostcpudata/linux-cpustat-24cpu.stat
+++ b/tests/virhostcpudata/linux-cpustat-24cpu.stat
@@ -1,5 +1,5 @@
-cpu 14126233 1846 7764352 1816344522 81323 395581 591237 0 5880634 0
-cpu0 748997 24 320851 75399242 5295 22050 104702 0 331814 0
+cpu 14126233 1846 7764352 1816344521 81323 395581 591237 0 5880634 1
+cpu0 748997 24 320851 75399241 5295 22050 104702 0 331814 1
cpu1 337325 1 140909 76178612 1121 8962 17344 0 166726 0
cpu2 666860 29 269302 75649696 4298 18473 21155 0 272094 0
cpu3 328387 77 211400 76131634 1219 9701 6573 0 115551 0
--
2.35.3
2
2
[PATCH] virsh: Add completer for '--type' option of 'attach-interface' command
by Michal Privoznik 22 Jun '26
by Michal Privoznik 22 Jun '26
22 Jun '26
From: Michal Privoznik <mprivozn(a)redhat.com>
The '--type' option of 'attach-interface' command is translated
from string into int using virDomainNetTypeFromString(), IOW the
expected value is from virDomainNetType enum.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
tools/virsh-completer-domain.c | 13 +++++++++++++
tools/virsh-completer-domain.h | 5 +++++
tools/virsh-domain.c | 1 +
3 files changed, 19 insertions(+)
diff --git a/tools/virsh-completer-domain.c b/tools/virsh-completer-domain.c
index 912826c434..8bdf68ac09 100644
--- a/tools/virsh-completer-domain.c
+++ b/tools/virsh-completer-domain.c
@@ -35,6 +35,7 @@
#include "virkeynametable_linux.h"
#include "virkeynametable_osx.h"
#include "virkeynametable_win32.h"
+#include "conf/domain_conf.h"
#include "conf/storage_conf.h"
#include "conf/numa_conf.h"
@@ -1119,3 +1120,15 @@ virshDomainDirtyRateCalcModeCompleter(vshControl *ctl G_GNUC_UNUSED,
return vshEnumComplete(VIRSH_DOMAIN_DIRTYRATE_CALC_MODE_LAST,
virshDomainDirtyRateCalcModeTypeToString);
}
+
+
+char **
+virshDomainNetTypeCompleter(vshControl *ctl G_GNUC_UNUSED,
+ const vshCmd *cmd G_GNUC_UNUSED,
+ unsigned int flags)
+{
+ virCheckFlags(0, NULL);
+
+ return vshEnumComplete(VIR_DOMAIN_NET_TYPE_LAST,
+ virDomainNetTypeToString);
+}
diff --git a/tools/virsh-completer-domain.h b/tools/virsh-completer-domain.h
index f5cda4dd15..dfbc10acaa 100644
--- a/tools/virsh-completer-domain.h
+++ b/tools/virsh-completer-domain.h
@@ -199,3 +199,8 @@ char **
virshDomainDirtyRateCalcModeCompleter(vshControl *ctl,
const vshCmd *cmd,
unsigned int flags);
+
+char **
+virshDomainNetTypeCompleter(vshControl *ctl,
+ const vshCmd *cmd,
+ unsigned int flags);
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 8a6f868e34..aa4f2a7a48 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -837,6 +837,7 @@ static const vshCmdOptDef opts_attach_interface[] = {
.type = VSH_OT_STRING,
.positional = true,
.required = true,
+ .completer = virshDomainNetTypeCompleter,
.help = N_("network interface type")
},
{.name = "source",
--
2.53.0
2
1
19 Jun '26
From: Martin Kletzander <mkletzan(a)redhat.com>
The constants for maximum units on a bus are slightly tricky because for
the narrow bus it does not need to account for the extra unit used by
the controller, but the wide and super-wide ones need to.
With this patch a VMX with 64 disks on a pvscsi controller can be
properly parsed.
To properly handle the maximum numbers one of the conditions also needs
to be changed to not allow for units 16 and 65. This does not change
various conditionals in XML parsing and VMX formatting as they need a
significant rewrite. And since that is already working only with the
wide scsi controller (and not the super-wide one) we leave that refactor
for another day as it was done previously.
Tests show this is now possible and they fail before this change.
Resolves: https://redhat.atlassian.net/browse/RHEL-181350
Signed-off-by: Martin Kletzander <mkletzan(a)redhat.com>
---
src/conf/domain_conf.h | 16 +-
src/vmx/vmx.c | 2 +-
tests/vmx2xmldata/esx-in-the-wild-11.xml | 2 +-
tests/vmx2xmldata/scsi-driver-max.vmx | 50 +++
tests/vmx2xmldata/scsi-driver-max.xml | 95 +++++
.../vmx2xmldata/scsi-driver-superwide-max.vmx | 197 ++++++++++
.../vmx2xmldata/scsi-driver-superwide-max.xml | 340 ++++++++++++++++++
tests/vmx2xmltest.c | 2 +
8 files changed, 701 insertions(+), 3 deletions(-)
create mode 100644 tests/vmx2xmldata/scsi-driver-max.vmx
create mode 100644 tests/vmx2xmldata/scsi-driver-max.xml
create mode 100644 tests/vmx2xmldata/scsi-driver-superwide-max.vmx
create mode 100644 tests/vmx2xmldata/scsi-driver-superwide-max.xml
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index bd360cd4a3da..0c6c79c41378 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -3184,8 +3184,22 @@ struct _virDomainHypervFeatures {
char *vendor_id;
};
-#define SCSI_SUPER_WIDE_BUS_MAX_CONT_UNIT 64
+/*
+ * Beware, these numbers mean slightly different things. Because the unit
+ * number 7 is reserved for the controller, any higher limits must account for
+ * that fact. I.e. a super-wide bus can have at max 64 disks, but accounting
+ * for the controller occupying one of the units the number needs to be 65.
+ *
+ * The maximums are taken from the following page:
+ * https://configmax.broadcom.com/guest?vmwareproduct=vSphere
+ */
+#define SCSI_SUPER_WIDE_BUS_MAX_CONT_UNIT 65
#define SCSI_WIDE_BUS_MAX_CONT_UNIT 16
+
+/*
+ * Since 7 unit numbers [0..7) do not interfere with the controller occupying
+ * unit number 7 it reflects the correct number of disks (targets).
+ */
#define SCSI_NARROW_BUS_MAX_CONT_UNIT 7
diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
index 572087341ae0..72ec1454aa95 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -2271,7 +2271,7 @@ virVMXGenerateDiskTarget(virDomainDiskDef *def,
return -1;
}
- if (unit < 0 || unit > vmdef->scsiBusMaxUnit || unit == 7) {
+ if (unit < 0 || unit >= vmdef->scsiBusMaxUnit || unit == 7) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("SCSI unit index %1$d out of [0..6,8..%2$u] range"),
unit, vmdef->scsiBusMaxUnit);
diff --git a/tests/vmx2xmldata/esx-in-the-wild-11.xml b/tests/vmx2xmldata/esx-in-the-wild-11.xml
index 981287bb4930..ded63c3345a4 100644
--- a/tests/vmx2xmldata/esx-in-the-wild-11.xml
+++ b/tests/vmx2xmldata/esx-in-the-wild-11.xml
@@ -29,7 +29,7 @@
</disk>
<disk type='file' device='disk'>
<source file='[datastore] directory/esx6.7-rhel7.7-x86_64_4.vmdk'/>
- <target dev='sdbl' bus='scsi'/>
+ <target dev='sdbm' bus='scsi'/>
<address type='drive' controller='1' bus='0' target='0' unit='0'/>
</disk>
<controller type='scsi' index='0' model='vmpvscsi'/>
diff --git a/tests/vmx2xmldata/scsi-driver-max.vmx b/tests/vmx2xmldata/scsi-driver-max.vmx
new file mode 100644
index 000000000000..eba4cefafcbb
--- /dev/null
+++ b/tests/vmx2xmldata/scsi-driver-max.vmx
@@ -0,0 +1,50 @@
+config.version = "8"
+virtualHW.version = "12"
+scsi0.present = "true"
+scsi0.virtualDev = "pvscsi"
+scsi0:0.present = "true"
+scsi0:0.deviceType = "scsi-hardDisk"
+scsi0:0.fileName = "harddisk0.vmdk"
+scsi0:1.present = "true"
+scsi0:1.deviceType = "scsi-hardDisk"
+scsi0:1.fileName = "harddisk1.vmdk"
+scsi0:2.present = "true"
+scsi0:2.deviceType = "scsi-hardDisk"
+scsi0:2.fileName = "harddisk2.vmdk"
+scsi0:3.present = "true"
+scsi0:3.deviceType = "scsi-hardDisk"
+scsi0:3.fileName = "harddisk3.vmdk"
+scsi0:4.present = "true"
+scsi0:4.deviceType = "scsi-hardDisk"
+scsi0:4.fileName = "harddisk4.vmdk"
+scsi0:5.present = "true"
+scsi0:5.deviceType = "scsi-hardDisk"
+scsi0:5.fileName = "harddisk5.vmdk"
+scsi0:6.present = "true"
+scsi0:6.deviceType = "scsi-hardDisk"
+scsi0:6.fileName = "harddisk6.vmdk"
+scsi0:8.present = "true"
+scsi0:8.deviceType = "scsi-hardDisk"
+scsi0:8.fileName = "harddisk8.vmdk"
+scsi0:9.present = "true"
+scsi0:9.deviceType = "scsi-hardDisk"
+scsi0:9.fileName = "harddisk9.vmdk"
+scsi0:10.present = "true"
+scsi0:10.deviceType = "scsi-hardDisk"
+scsi0:10.fileName = "harddisk10.vmdk"
+scsi0:11.present = "true"
+scsi0:11.deviceType = "scsi-hardDisk"
+scsi0:11.fileName = "harddisk11.vmdk"
+scsi0:12.present = "true"
+scsi0:12.deviceType = "scsi-hardDisk"
+scsi0:12.fileName = "harddisk12.vmdk"
+scsi0:13.present = "true"
+scsi0:13.deviceType = "scsi-hardDisk"
+scsi0:13.fileName = "harddisk13.vmdk"
+scsi0:14.present = "true"
+scsi0:14.deviceType = "scsi-hardDisk"
+scsi0:14.fileName = "harddisk14.vmdk"
+scsi0:15.present = "true"
+scsi0:15.deviceType = "scsi-hardDisk"
+scsi0:15.fileName = "harddisk15.vmdk"
+displayName = "test"
diff --git a/tests/vmx2xmldata/scsi-driver-max.xml b/tests/vmx2xmldata/scsi-driver-max.xml
new file mode 100644
index 000000000000..fa6c13396e2a
--- /dev/null
+++ b/tests/vmx2xmldata/scsi-driver-max.xml
@@ -0,0 +1,95 @@
+<domain type='vmware'>
+ <name>test</name>
+ <uuid>00000000-0000-0000-0000-000000000000</uuid>
+ <memory unit='KiB'>32768</memory>
+ <currentMemory unit='KiB'>32768</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='i686'>hvm</type>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk0.vmdk'/>
+ <target dev='sda' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk1.vmdk'/>
+ <target dev='sdb' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='1'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk2.vmdk'/>
+ <target dev='sdc' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='2'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk3.vmdk'/>
+ <target dev='sdd' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='3'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk4.vmdk'/>
+ <target dev='sde' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='4'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk5.vmdk'/>
+ <target dev='sdf' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='5'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk6.vmdk'/>
+ <target dev='sdg' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='6'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk8.vmdk'/>
+ <target dev='sdh' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='8'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk9.vmdk'/>
+ <target dev='sdi' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='9'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk10.vmdk'/>
+ <target dev='sdj' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='10'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk11.vmdk'/>
+ <target dev='sdk' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='11'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk12.vmdk'/>
+ <target dev='sdl' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='12'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk13.vmdk'/>
+ <target dev='sdm' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='13'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk14.vmdk'/>
+ <target dev='sdn' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='14'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk15.vmdk'/>
+ <target dev='sdo' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='15'/>
+ </disk>
+ <controller type='scsi' index='0' model='vmpvscsi'/>
+ <video>
+ <model type='vmvga' vram='4096' primary='yes'/>
+ </video>
+ </devices>
+</domain>
diff --git a/tests/vmx2xmldata/scsi-driver-superwide-max.vmx b/tests/vmx2xmldata/scsi-driver-superwide-max.vmx
new file mode 100644
index 000000000000..38df812be915
--- /dev/null
+++ b/tests/vmx2xmldata/scsi-driver-superwide-max.vmx
@@ -0,0 +1,197 @@
+config.version = "8"
+virtualHW.version = "13"
+scsi0.present = "true"
+scsi0.virtualDev = "pvscsi"
+scsi0:0.present = "true"
+scsi0:0.deviceType = "scsi-hardDisk"
+scsi0:0.fileName = "harddisk0.vmdk"
+scsi0:1.present = "true"
+scsi0:1.deviceType = "scsi-hardDisk"
+scsi0:1.fileName = "harddisk1.vmdk"
+scsi0:2.present = "true"
+scsi0:2.deviceType = "scsi-hardDisk"
+scsi0:2.fileName = "harddisk2.vmdk"
+scsi0:3.present = "true"
+scsi0:3.deviceType = "scsi-hardDisk"
+scsi0:3.fileName = "harddisk3.vmdk"
+scsi0:4.present = "true"
+scsi0:4.deviceType = "scsi-hardDisk"
+scsi0:4.fileName = "harddisk4.vmdk"
+scsi0:5.present = "true"
+scsi0:5.deviceType = "scsi-hardDisk"
+scsi0:5.fileName = "harddisk5.vmdk"
+scsi0:6.present = "true"
+scsi0:6.deviceType = "scsi-hardDisk"
+scsi0:6.fileName = "harddisk6.vmdk"
+scsi0:8.present = "true"
+scsi0:8.deviceType = "scsi-hardDisk"
+scsi0:8.fileName = "harddisk8.vmdk"
+scsi0:9.present = "true"
+scsi0:9.deviceType = "scsi-hardDisk"
+scsi0:9.fileName = "harddisk9.vmdk"
+scsi0:10.present = "true"
+scsi0:10.deviceType = "scsi-hardDisk"
+scsi0:10.fileName = "harddisk10.vmdk"
+scsi0:11.present = "true"
+scsi0:11.deviceType = "scsi-hardDisk"
+scsi0:11.fileName = "harddisk11.vmdk"
+scsi0:12.present = "true"
+scsi0:12.deviceType = "scsi-hardDisk"
+scsi0:12.fileName = "harddisk12.vmdk"
+scsi0:13.present = "true"
+scsi0:13.deviceType = "scsi-hardDisk"
+scsi0:13.fileName = "harddisk13.vmdk"
+scsi0:14.present = "true"
+scsi0:14.deviceType = "scsi-hardDisk"
+scsi0:14.fileName = "harddisk14.vmdk"
+scsi0:15.present = "true"
+scsi0:15.deviceType = "scsi-hardDisk"
+scsi0:15.fileName = "harddisk15.vmdk"
+scsi0:16.present = "true"
+scsi0:16.deviceType = "scsi-hardDisk"
+scsi0:16.fileName = "harddisk16.vmdk"
+scsi0:17.present = "true"
+scsi0:17.deviceType = "scsi-hardDisk"
+scsi0:17.fileName = "harddisk17.vmdk"
+scsi0:18.present = "true"
+scsi0:18.deviceType = "scsi-hardDisk"
+scsi0:18.fileName = "harddisk18.vmdk"
+scsi0:19.present = "true"
+scsi0:19.deviceType = "scsi-hardDisk"
+scsi0:19.fileName = "harddisk19.vmdk"
+scsi0:20.present = "true"
+scsi0:20.deviceType = "scsi-hardDisk"
+scsi0:20.fileName = "harddisk20.vmdk"
+scsi0:21.present = "true"
+scsi0:21.deviceType = "scsi-hardDisk"
+scsi0:21.fileName = "harddisk21.vmdk"
+scsi0:22.present = "true"
+scsi0:22.deviceType = "scsi-hardDisk"
+scsi0:22.fileName = "harddisk22.vmdk"
+scsi0:23.present = "true"
+scsi0:23.deviceType = "scsi-hardDisk"
+scsi0:23.fileName = "harddisk23.vmdk"
+scsi0:24.present = "true"
+scsi0:24.deviceType = "scsi-hardDisk"
+scsi0:24.fileName = "harddisk24.vmdk"
+scsi0:25.present = "true"
+scsi0:25.deviceType = "scsi-hardDisk"
+scsi0:25.fileName = "harddisk25.vmdk"
+scsi0:26.present = "true"
+scsi0:26.deviceType = "scsi-hardDisk"
+scsi0:26.fileName = "harddisk26.vmdk"
+scsi0:27.present = "true"
+scsi0:27.deviceType = "scsi-hardDisk"
+scsi0:27.fileName = "harddisk27.vmdk"
+scsi0:28.present = "true"
+scsi0:28.deviceType = "scsi-hardDisk"
+scsi0:28.fileName = "harddisk28.vmdk"
+scsi0:29.present = "true"
+scsi0:29.deviceType = "scsi-hardDisk"
+scsi0:29.fileName = "harddisk29.vmdk"
+scsi0:30.present = "true"
+scsi0:30.deviceType = "scsi-hardDisk"
+scsi0:30.fileName = "harddisk30.vmdk"
+scsi0:31.present = "true"
+scsi0:31.deviceType = "scsi-hardDisk"
+scsi0:31.fileName = "harddisk31.vmdk"
+scsi0:32.present = "true"
+scsi0:32.deviceType = "scsi-hardDisk"
+scsi0:32.fileName = "harddisk32.vmdk"
+scsi0:33.present = "true"
+scsi0:33.deviceType = "scsi-hardDisk"
+scsi0:33.fileName = "harddisk33.vmdk"
+scsi0:34.present = "true"
+scsi0:34.deviceType = "scsi-hardDisk"
+scsi0:34.fileName = "harddisk34.vmdk"
+scsi0:35.present = "true"
+scsi0:35.deviceType = "scsi-hardDisk"
+scsi0:35.fileName = "harddisk35.vmdk"
+scsi0:36.present = "true"
+scsi0:36.deviceType = "scsi-hardDisk"
+scsi0:36.fileName = "harddisk36.vmdk"
+scsi0:37.present = "true"
+scsi0:37.deviceType = "scsi-hardDisk"
+scsi0:37.fileName = "harddisk37.vmdk"
+scsi0:38.present = "true"
+scsi0:38.deviceType = "scsi-hardDisk"
+scsi0:38.fileName = "harddisk38.vmdk"
+scsi0:39.present = "true"
+scsi0:39.deviceType = "scsi-hardDisk"
+scsi0:39.fileName = "harddisk39.vmdk"
+scsi0:40.present = "true"
+scsi0:40.deviceType = "scsi-hardDisk"
+scsi0:40.fileName = "harddisk40.vmdk"
+scsi0:41.present = "true"
+scsi0:41.deviceType = "scsi-hardDisk"
+scsi0:41.fileName = "harddisk41.vmdk"
+scsi0:42.present = "true"
+scsi0:42.deviceType = "scsi-hardDisk"
+scsi0:42.fileName = "harddisk42.vmdk"
+scsi0:43.present = "true"
+scsi0:43.deviceType = "scsi-hardDisk"
+scsi0:43.fileName = "harddisk43.vmdk"
+scsi0:44.present = "true"
+scsi0:44.deviceType = "scsi-hardDisk"
+scsi0:44.fileName = "harddisk44.vmdk"
+scsi0:45.present = "true"
+scsi0:45.deviceType = "scsi-hardDisk"
+scsi0:45.fileName = "harddisk45.vmdk"
+scsi0:46.present = "true"
+scsi0:46.deviceType = "scsi-hardDisk"
+scsi0:46.fileName = "harddisk46.vmdk"
+scsi0:47.present = "true"
+scsi0:47.deviceType = "scsi-hardDisk"
+scsi0:47.fileName = "harddisk47.vmdk"
+scsi0:48.present = "true"
+scsi0:48.deviceType = "scsi-hardDisk"
+scsi0:48.fileName = "harddisk48.vmdk"
+scsi0:49.present = "true"
+scsi0:49.deviceType = "scsi-hardDisk"
+scsi0:49.fileName = "harddisk49.vmdk"
+scsi0:50.present = "true"
+scsi0:50.deviceType = "scsi-hardDisk"
+scsi0:50.fileName = "harddisk50.vmdk"
+scsi0:51.present = "true"
+scsi0:51.deviceType = "scsi-hardDisk"
+scsi0:51.fileName = "harddisk51.vmdk"
+scsi0:52.present = "true"
+scsi0:52.deviceType = "scsi-hardDisk"
+scsi0:52.fileName = "harddisk52.vmdk"
+scsi0:53.present = "true"
+scsi0:53.deviceType = "scsi-hardDisk"
+scsi0:53.fileName = "harddisk53.vmdk"
+scsi0:54.present = "true"
+scsi0:54.deviceType = "scsi-hardDisk"
+scsi0:54.fileName = "harddisk54.vmdk"
+scsi0:55.present = "true"
+scsi0:55.deviceType = "scsi-hardDisk"
+scsi0:55.fileName = "harddisk55.vmdk"
+scsi0:56.present = "true"
+scsi0:56.deviceType = "scsi-hardDisk"
+scsi0:56.fileName = "harddisk56.vmdk"
+scsi0:57.present = "true"
+scsi0:57.deviceType = "scsi-hardDisk"
+scsi0:57.fileName = "harddisk57.vmdk"
+scsi0:58.present = "true"
+scsi0:58.deviceType = "scsi-hardDisk"
+scsi0:58.fileName = "harddisk58.vmdk"
+scsi0:59.present = "true"
+scsi0:59.deviceType = "scsi-hardDisk"
+scsi0:59.fileName = "harddisk59.vmdk"
+scsi0:60.present = "true"
+scsi0:60.deviceType = "scsi-hardDisk"
+scsi0:60.fileName = "harddisk60.vmdk"
+scsi0:61.present = "true"
+scsi0:61.deviceType = "scsi-hardDisk"
+scsi0:61.fileName = "harddisk61.vmdk"
+scsi0:62.present = "true"
+scsi0:62.deviceType = "scsi-hardDisk"
+scsi0:62.fileName = "harddisk62.vmdk"
+scsi0:63.present = "true"
+scsi0:63.deviceType = "scsi-hardDisk"
+scsi0:63.fileName = "harddisk63.vmdk"
+scsi0:64.present = "true"
+scsi0:64.deviceType = "scsi-hardDisk"
+scsi0:64.fileName = "harddisk63.vmdk"
+displayName = "test"
diff --git a/tests/vmx2xmldata/scsi-driver-superwide-max.xml b/tests/vmx2xmldata/scsi-driver-superwide-max.xml
new file mode 100644
index 000000000000..2e4bc0b2ef67
--- /dev/null
+++ b/tests/vmx2xmldata/scsi-driver-superwide-max.xml
@@ -0,0 +1,340 @@
+<domain type='vmware'>
+ <name>test</name>
+ <uuid>00000000-0000-0000-0000-000000000000</uuid>
+ <memory unit='KiB'>32768</memory>
+ <currentMemory unit='KiB'>32768</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='i686'>hvm</type>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk0.vmdk'/>
+ <target dev='sda' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk1.vmdk'/>
+ <target dev='sdb' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='1'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk2.vmdk'/>
+ <target dev='sdc' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='2'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk3.vmdk'/>
+ <target dev='sdd' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='3'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk4.vmdk'/>
+ <target dev='sde' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='4'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk5.vmdk'/>
+ <target dev='sdf' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='5'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk6.vmdk'/>
+ <target dev='sdg' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='6'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk8.vmdk'/>
+ <target dev='sdh' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='8'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk9.vmdk'/>
+ <target dev='sdi' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='9'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk10.vmdk'/>
+ <target dev='sdj' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='10'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk11.vmdk'/>
+ <target dev='sdk' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='11'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk12.vmdk'/>
+ <target dev='sdl' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='12'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk13.vmdk'/>
+ <target dev='sdm' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='13'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk14.vmdk'/>
+ <target dev='sdn' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='14'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk15.vmdk'/>
+ <target dev='sdo' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='15'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk16.vmdk'/>
+ <target dev='sdp' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='16'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk17.vmdk'/>
+ <target dev='sdq' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='17'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk18.vmdk'/>
+ <target dev='sdr' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='18'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk19.vmdk'/>
+ <target dev='sds' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='19'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk20.vmdk'/>
+ <target dev='sdt' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='20'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk21.vmdk'/>
+ <target dev='sdu' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='21'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk22.vmdk'/>
+ <target dev='sdv' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='22'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk23.vmdk'/>
+ <target dev='sdw' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='23'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk24.vmdk'/>
+ <target dev='sdx' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='24'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk25.vmdk'/>
+ <target dev='sdy' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='25'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk26.vmdk'/>
+ <target dev='sdz' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='26'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk27.vmdk'/>
+ <target dev='sdaa' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='27'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk28.vmdk'/>
+ <target dev='sdab' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='28'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk29.vmdk'/>
+ <target dev='sdac' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='29'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk30.vmdk'/>
+ <target dev='sdad' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='30'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk31.vmdk'/>
+ <target dev='sdae' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='31'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk32.vmdk'/>
+ <target dev='sdaf' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='32'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk33.vmdk'/>
+ <target dev='sdag' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='33'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk34.vmdk'/>
+ <target dev='sdah' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='34'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk35.vmdk'/>
+ <target dev='sdai' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='35'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk36.vmdk'/>
+ <target dev='sdaj' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='36'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk37.vmdk'/>
+ <target dev='sdak' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='37'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk38.vmdk'/>
+ <target dev='sdal' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='38'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk39.vmdk'/>
+ <target dev='sdam' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='39'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk40.vmdk'/>
+ <target dev='sdan' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='40'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk41.vmdk'/>
+ <target dev='sdao' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='41'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk42.vmdk'/>
+ <target dev='sdap' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='42'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk43.vmdk'/>
+ <target dev='sdaq' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='43'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk44.vmdk'/>
+ <target dev='sdar' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='44'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk45.vmdk'/>
+ <target dev='sdas' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='45'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk46.vmdk'/>
+ <target dev='sdat' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='46'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk47.vmdk'/>
+ <target dev='sdau' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='47'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk48.vmdk'/>
+ <target dev='sdav' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='48'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk49.vmdk'/>
+ <target dev='sdaw' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='49'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk50.vmdk'/>
+ <target dev='sdax' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='50'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk51.vmdk'/>
+ <target dev='sday' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='51'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk52.vmdk'/>
+ <target dev='sdaz' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='52'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk53.vmdk'/>
+ <target dev='sdba' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='53'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk54.vmdk'/>
+ <target dev='sdbb' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='54'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk55.vmdk'/>
+ <target dev='sdbc' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='55'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk56.vmdk'/>
+ <target dev='sdbd' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='56'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk57.vmdk'/>
+ <target dev='sdbe' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='57'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk58.vmdk'/>
+ <target dev='sdbf' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='58'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk59.vmdk'/>
+ <target dev='sdbg' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='59'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk60.vmdk'/>
+ <target dev='sdbh' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='60'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk61.vmdk'/>
+ <target dev='sdbi' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='61'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk62.vmdk'/>
+ <target dev='sdbj' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='62'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk63.vmdk'/>
+ <target dev='sdbk' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='63'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <source file='[datastore] directory/harddisk63.vmdk'/>
+ <target dev='sdbl' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='64'/>
+ </disk>
+ <controller type='scsi' index='0' model='vmpvscsi'/>
+ <video>
+ <model type='vmvga' vram='4096' primary='yes'/>
+ </video>
+ </devices>
+</domain>
diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c
index 3ffc04fda42f..585ef00bd654 100644
--- a/tests/vmx2xmltest.c
+++ b/tests/vmx2xmltest.c
@@ -151,6 +151,8 @@ mymain(void)
DO_TEST("graphics-vnc");
DO_TEST("scsi-driver");
+ DO_TEST("scsi-driver-max");
+ DO_TEST("scsi-driver-superwide-max");
DO_TEST("scsi-writethrough");
DO_TEST("harddisk-scsi-file");
--
2.54.0
2
1