:p
atchew
Login
This is a significantly expanded upon follow up to [1], and specifically the last 5 patches in that series. While looking at implementing the improvements suggested by Peter, I realized that there were many additional areas in which our handling of defaults was suboptimal, with the relevant code scattered all over the place and sometimes duplicated. So I set out to rationalize things. I ended up changing very little in terms of observable behavior outside of RISC-V, where I feel that we still have leeway to make things right before it reaches significant adoption and backwards compatibility becomes a major concern. [1] https://lists.libvirt.org/archives/list/devel@lists.libvirt.org/thread/MREXSFFSTO3X35NOOUD4TH224JZYMZ2I/ Andrea Bolognani (33): tests: Add usb-controller-automatic-unavailable-q35 tests: Add aarch64-panic-no-model tests: Add title-and-description tests: Drop existing <title> and <description> tags tests: Rename and minimize no-memory tests: Add minimal cases for many architectures tests: Drop minimal tests: Add default-models cases for many architectures qemu: Fix a few comments qemu: Default to no USB and no memballoon for new architectures qemu: Clean up qemuDomainDefaultNetModel() qemu: Drop qemuDomainFindSCSIControllerModel() qemu: Drop qemuDomainSetSCSIControllerModel() qemu: Add missing error handling qemu: Simplify qemuDomainFindOrCreateSCSIDiskController() qemu: Move qemuDomainGetSCSIControllerModel() qemu: Rename qemuDomainDefaultSCSIControllerModel() qemu: Clean up qemuDomainDefaultSCSIControllerModel() qemu: Add qemuDomainDefaultUSBControllerModel() qemu: Enhance qemuDomainDefaultUSBControllerModel() qemu: Clean up qemuDomainDefaultUSBControllerModel() qemu: Move qemuDomainForbidLegacyUSBController() qemu: Enhance qemuDomainForbidLegacyUSBController() qemu: Add qemuDomainDefaultSerialType() qemu: Add qemuDomainDefaultSerialModel() qemu: Add qemuDomainDefaultPanicModel() qemu: Use qemuDomainDefaultPanicModel() more qemu: Rename qemuDomainDefaultVideoModel() qemu: Move qemuDomainDefault*() functions together qemu: Only default to <panic model='isa'/> on x86 qemu: Don't add memballoon by default on RISC-V qemu: Use qemu-xhci by default on RISC-V qemu: Use virtio-scsi by default on RISC-V src/qemu/qemu_alias.c | 13 +- src/qemu/qemu_command.c | 23 +- src/qemu/qemu_domain.c | 588 ++++++++++++------ src/qemu/qemu_domain.h | 4 + src/qemu/qemu_domain_address.c | 87 --- src/qemu/qemu_domain_address.h | 11 - src/qemu/qemu_hotplug.c | 13 +- src/qemu/qemu_validate.c | 9 +- tests/qemuxmlconfdata/440fx-wrong-root.xml | 5 - .../aarch64-panic-no-model.aarch64-latest.err | 1 + .../aarch64-panic-no-model.xml | 13 + ...64-virt-default-models.aarch64-latest.args | 44 ++ ...h64-virt-default-models.aarch64-latest.xml | 79 +++ .../aarch64-virt-default-models.xml | 21 + .../aarch64-virt-minimal.aarch64-latest.args | 31 + .../aarch64-virt-minimal.aarch64-latest.xml | 26 + .../qemuxmlconfdata/aarch64-virt-minimal.xml | 12 + .../cpu-host-model-features.x86_64-latest.xml | 5 - .../cpu-host-model-features.xml | 5 - ...ost-passthrough-features.x86_64-latest.xml | 5 - .../cpu-host-passthrough-features.xml | 5 - .../cpu-tsc-frequency.x86_64-latest.xml | 5 - tests/qemuxmlconfdata/cpu-tsc-frequency.xml | 5 - .../disk-cdrom-bus-other.x86_64-latest.xml | 1 - .../qemuxmlconfdata/disk-cdrom-bus-other.xml | 1 - tests/qemuxmlconfdata/minimal-no-memory.xml | 25 - .../minimal.x86_64-latest.args | 36 -- tests/qemuxmlconfdata/minimal.xml | 34 - tests/qemuxmlconfdata/missing-machine.xml | 1 - ...latest.err => no-memory.x86_64-latest.err} | 0 tests/qemuxmlconfdata/no-memory.xml | 11 + ...4-pseries-default-models.ppc64-latest.args | 38 ++ ...64-pseries-default-models.ppc64-latest.xml | 53 ++ .../ppc64-pseries-default-models.xml | 21 + .../ppc64-pseries-minimal.ppc64-latest.args | 33 + .../ppc64-pseries-minimal.ppc64-latest.xml | 33 + .../qemuxmlconfdata/ppc64-pseries-minimal.xml | 12 + ...64-virt-default-models.riscv64-latest.args | 42 ++ ...v64-virt-default-models.riscv64-latest.xml | 69 ++ .../riscv64-virt-default-models.xml | 21 + .../riscv64-virt-minimal.riscv64-latest.args | 30 + .../riscv64-virt-minimal.riscv64-latest.xml | 20 + .../qemuxmlconfdata/riscv64-virt-minimal.xml | 12 + ...s390x-ccw-default-models.s390x-latest.args | 37 ++ .../s390x-ccw-default-models.s390x-latest.xml | 46 ++ .../s390x-ccw-default-models.xml | 21 + .../s390x-ccw-minimal.s390x-latest.args | 32 + .../s390x-ccw-minimal.s390x-latest.xml | 27 + tests/qemuxmlconfdata/s390x-ccw-minimal.xml | 12 + .../title-and-description.x86_64-latest.args | 31 + ...> title-and-description.x86_64-latest.xml} | 20 +- .../qemuxmlconfdata/title-and-description.xml | 19 + ...tomatic-unavailable-q35.x86_64-latest.args | 33 + ...utomatic-unavailable-q35.x86_64-latest.xml | 30 + ...b-controller-automatic-unavailable-q35.xml | 20 + ...86_64-pc-default-models.x86_64-latest.args | 39 ++ ...x86_64-pc-default-models.x86_64-latest.xml | 50 ++ .../x86_64-pc-default-models.xml | 21 + .../x86_64-pc-minimal.x86_64-latest.args | 33 + ...ml => x86_64-pc-minimal.x86_64-latest.xml} | 24 +- tests/qemuxmlconfdata/x86_64-pc-minimal.xml | 12 + ...6_64-q35-default-models.x86_64-latest.args | 44 ++ ...86_64-q35-default-models.x86_64-latest.xml | 68 ++ .../x86_64-q35-default-models.xml | 21 + .../x86_64-q35-minimal.x86_64-latest.args | 38 ++ .../x86_64-q35-minimal.x86_64-latest.xml | 50 ++ tests/qemuxmlconfdata/x86_64-q35-minimal.xml | 12 + tests/qemuxmlconftest.c | 28 +- 68 files changed, 1783 insertions(+), 488 deletions(-) create mode 100644 tests/qemuxmlconfdata/aarch64-panic-no-model.aarch64-latest.err create mode 100644 tests/qemuxmlconfdata/aarch64-panic-no-model.xml create mode 100644 tests/qemuxmlconfdata/aarch64-virt-default-models.aarch64-latest.args create mode 100644 tests/qemuxmlconfdata/aarch64-virt-default-models.aarch64-latest.xml create mode 100644 tests/qemuxmlconfdata/aarch64-virt-default-models.xml create mode 100644 tests/qemuxmlconfdata/aarch64-virt-minimal.aarch64-latest.args create mode 100644 tests/qemuxmlconfdata/aarch64-virt-minimal.aarch64-latest.xml create mode 100644 tests/qemuxmlconfdata/aarch64-virt-minimal.xml delete mode 100644 tests/qemuxmlconfdata/minimal-no-memory.xml delete mode 100644 tests/qemuxmlconfdata/minimal.x86_64-latest.args delete mode 100644 tests/qemuxmlconfdata/minimal.xml rename tests/qemuxmlconfdata/{minimal-no-memory.x86_64-latest.err => no-memory.x86_64-latest.err} (100%) create mode 100644 tests/qemuxmlconfdata/no-memory.xml create mode 100644 tests/qemuxmlconfdata/ppc64-pseries-default-models.ppc64-latest.args create mode 100644 tests/qemuxmlconfdata/ppc64-pseries-default-models.ppc64-latest.xml create mode 100644 tests/qemuxmlconfdata/ppc64-pseries-default-models.xml create mode 100644 tests/qemuxmlconfdata/ppc64-pseries-minimal.ppc64-latest.args create mode 100644 tests/qemuxmlconfdata/ppc64-pseries-minimal.ppc64-latest.xml create mode 100644 tests/qemuxmlconfdata/ppc64-pseries-minimal.xml create mode 100644 tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args create mode 100644 tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml create mode 100644 tests/qemuxmlconfdata/riscv64-virt-default-models.xml create mode 100644 tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.args create mode 100644 tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.xml create mode 100644 tests/qemuxmlconfdata/riscv64-virt-minimal.xml create mode 100644 tests/qemuxmlconfdata/s390x-ccw-default-models.s390x-latest.args create mode 100644 tests/qemuxmlconfdata/s390x-ccw-default-models.s390x-latest.xml create mode 100644 tests/qemuxmlconfdata/s390x-ccw-default-models.xml create mode 100644 tests/qemuxmlconfdata/s390x-ccw-minimal.s390x-latest.args create mode 100644 tests/qemuxmlconfdata/s390x-ccw-minimal.s390x-latest.xml create mode 100644 tests/qemuxmlconfdata/s390x-ccw-minimal.xml create mode 100644 tests/qemuxmlconfdata/title-and-description.x86_64-latest.args copy tests/qemuxmlconfdata/{440fx-wrong-root.xml => title-and-description.x86_64-latest.xml} (58%) create mode 100644 tests/qemuxmlconfdata/title-and-description.xml create mode 100644 tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.xml create mode 100644 tests/qemuxmlconfdata/x86_64-pc-default-models.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/x86_64-pc-default-models.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/x86_64-pc-default-models.xml create mode 100644 tests/qemuxmlconfdata/x86_64-pc-minimal.x86_64-latest.args rename tests/qemuxmlconfdata/{minimal.x86_64-latest.xml => x86_64-pc-minimal.x86_64-latest.xml} (52%) create mode 100644 tests/qemuxmlconfdata/x86_64-pc-minimal.xml create mode 100644 tests/qemuxmlconfdata/x86_64-q35-default-models.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/x86_64-q35-default-models.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/x86_64-q35-default-models.xml create mode 100644 tests/qemuxmlconfdata/x86_64-q35-minimal.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/x86_64-q35-minimal.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/x86_64-q35-minimal.xml -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
For q35 guests, we normally add a USB controller by default, but there's a scenario in which we can decide to skip it. Add test coverage for it. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- ...tomatic-unavailable-q35.x86_64-latest.args | 33 +++++++++++++++++++ ...utomatic-unavailable-q35.x86_64-latest.xml | 30 +++++++++++++++++ ...b-controller-automatic-unavailable-q35.xml | 20 +++++++++++ tests/qemuxmlconftest.c | 9 +++++ 4 files changed, 92 insertions(+) create mode 100644 tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.xml diff --git a/tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.x86_64-latest.args b/tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.x86_64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.x86_64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-q35-test \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-q35-test/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-q35-test/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-q35-test/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=q35-test,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-q35-test/master-key.aes"}' \ +-machine q35,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-cpu qemu64 \ +-m size=2097152k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":2147483648}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-global ICH9-LPC.noreboot=off \ +-watchdog-action reset \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.x86_64-latest.xml b/tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.x86_64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>q35-test</name> + <uuid>11dbdcdd-4c3b-482b-8903-9bdb8c0a2774</uuid> + <memory unit='KiB'>2097152</memory> + <currentMemory unit='KiB'>2097152</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='q35'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='pci' index='0' model='pcie-root'/> + <controller type='sata' index='0'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/> + </controller> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <watchdog model='itco' action='reset'/> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.xml b/tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/usb-controller-automatic-unavailable-q35.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>q35-test</name> + <uuid>11dbdcdd-4c3b-482b-8903-9bdb8c0a2774</uuid> + <memory unit='KiB'>2097152</memory> + <currentMemory unit='KiB'>2097152</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='q35'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='pci' index='0' model='pcie-root'/> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -XXX,XX +XXX,XX @@ mymain(void) ARG_CAPS_VER, "latest", ARG_QEMU_CAPS_DEL, QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_LAST, ARG_END); + /* q35 fails instead */ DO_TEST_FULL("usb-controller-default-unavailable-q35", ".x86_64-latest", ARG_CAPS_ARCH, "x86_64", ARG_CAPS_VER, "latest", ARG_FLAGS, FLAG_EXPECT_FAILURE, ARG_QEMU_CAPS_DEL, QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_LAST, ARG_END); + /* However, if the USB controller is the one that gets added + * automatically for every guest instead of one that the user has + * explicitly asked for, we prefer simply skipping it */ + DO_TEST_FULL("usb-controller-automatic-unavailable-q35", ".x86_64-latest", + ARG_CAPS_ARCH, "x86_64", + ARG_CAPS_VER, "latest", + ARG_QEMU_CAPS_DEL, QEMU_CAPS_DEVICE_QEMU_XHCI, QEMU_CAPS_NEC_USB_XHCI, QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_LAST, + ARG_END); DO_TEST_CAPS_LATEST("usb-none"); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
This demonstrates that on aarch64, where a native panic device doesn't exist, it's necessary for the user to specify the model explicitly. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- .../aarch64-panic-no-model.aarch64-latest.err | 1 + tests/qemuxmlconfdata/aarch64-panic-no-model.xml | 13 +++++++++++++ tests/qemuxmlconftest.c | 1 + 3 files changed, 15 insertions(+) create mode 100644 tests/qemuxmlconfdata/aarch64-panic-no-model.aarch64-latest.err create mode 100644 tests/qemuxmlconfdata/aarch64-panic-no-model.xml diff --git a/tests/qemuxmlconfdata/aarch64-panic-no-model.aarch64-latest.err b/tests/qemuxmlconfdata/aarch64-panic-no-model.aarch64-latest.err new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/aarch64-panic-no-model.aarch64-latest.err @@ -0,0 +1 @@ +unsupported configuration: the QEMU binary does not support the ISA panic device diff --git a/tests/qemuxmlconfdata/aarch64-panic-no-model.xml b/tests/qemuxmlconfdata/aarch64-panic-no-model.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/aarch64-panic-no-model.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='aarch64' machine='virt'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-aarch64</emulator> + <panic/> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -XXX,XX +XXX,XX @@ mymain(void) DO_TEST_CAPS_LATEST("panic"); DO_TEST_CAPS_LATEST("panic-double"); DO_TEST_CAPS_LATEST("panic-no-address"); + DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("aarch64-panic-no-model", "aarch64"); DO_TEST_CAPS_LATEST("pvpanic-pci-x86_64"); DO_TEST_CAPS_ARCH_LATEST("pvpanic-pci-aarch64", "aarch64"); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
We have a few test cases that cover the ability to set <title> and <description> for a guest as a side effect. Introduce an explicit test case for the functionality. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- .../title-and-description.x86_64-latest.args | 31 ++++++++++++++++++ .../title-and-description.x86_64-latest.xml | 32 +++++++++++++++++++ .../qemuxmlconfdata/title-and-description.xml | 19 +++++++++++ tests/qemuxmlconftest.c | 1 + 4 files changed, 83 insertions(+) create mode 100644 tests/qemuxmlconfdata/title-and-description.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/title-and-description.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/title-and-description.xml diff --git a/tests/qemuxmlconfdata/title-and-description.x86_64-latest.args b/tests/qemuxmlconfdata/title-and-description.x86_64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/title-and-description.x86_64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ +-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-cpu qemu64 \ +-m size=219136k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/title-and-description.x86_64-latest.xml b/tests/qemuxmlconfdata/title-and-description.x86_64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/title-and-description.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <title>this is the guest title</title> + <description> + this is the + guest description + </description> + <memory unit='KiB'>219100</memory> + <currentMemory unit='KiB'>219100</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='usb' index='0' model='none'/> + <controller type='pci' index='0' model='pci-root'/> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/title-and-description.xml b/tests/qemuxmlconfdata/title-and-description.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/title-and-description.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <title>this is the guest title</title> + <description> + this is the + guest description + </description> + <memory unit='KiB'>219100</memory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='usb' model='none'/> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -XXX,XX +XXX,XX @@ mymain(void) DO_TEST_CAPS_LATEST("minimal"); DO_TEST_CAPS_LATEST_PARSE_ERROR("minimal-no-memory"); + DO_TEST_CAPS_LATEST("title-and-description"); DO_TEST_CAPS_LATEST("genid"); DO_TEST_CAPS_LATEST("genid-auto"); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Now that we have an explicit test case for the feature, we can drop a bunch of duplicated accidental coverage. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- tests/qemuxmlconfdata/440fx-wrong-root.xml | 5 ----- .../cpu-host-model-features.x86_64-latest.xml | 5 ----- tests/qemuxmlconfdata/cpu-host-model-features.xml | 5 ----- .../cpu-host-passthrough-features.x86_64-latest.xml | 5 ----- tests/qemuxmlconfdata/cpu-host-passthrough-features.xml | 5 ----- tests/qemuxmlconfdata/cpu-tsc-frequency.x86_64-latest.xml | 5 ----- tests/qemuxmlconfdata/cpu-tsc-frequency.xml | 5 ----- tests/qemuxmlconfdata/disk-cdrom-bus-other.x86_64-latest.xml | 1 - tests/qemuxmlconfdata/disk-cdrom-bus-other.xml | 1 - tests/qemuxmlconfdata/minimal.x86_64-latest.xml | 5 ----- tests/qemuxmlconfdata/minimal.xml | 5 ----- tests/qemuxmlconfdata/missing-machine.xml | 1 - 12 files changed, 48 deletions(-) diff --git a/tests/qemuxmlconfdata/440fx-wrong-root.xml b/tests/qemuxmlconfdata/440fx-wrong-root.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/440fx-wrong-root.xml +++ b/tests/qemuxmlconfdata/440fx-wrong-root.xml @@ -XXX,XX +XXX,XX @@ <domain type='qemu'> <name>QEMUGuest1</name> <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <title>A description of the test machine.</title> - <description> - A test of qemu's minimal configuration. - This test also tests the description and title elements. - </description> <memory unit='KiB'>219100</memory> <currentMemory unit='KiB'>219100</currentMemory> <os> diff --git a/tests/qemuxmlconfdata/cpu-host-model-features.x86_64-latest.xml b/tests/qemuxmlconfdata/cpu-host-model-features.x86_64-latest.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/cpu-host-model-features.x86_64-latest.xml +++ b/tests/qemuxmlconfdata/cpu-host-model-features.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ <domain type='kvm'> <name>QEMUGuest1</name> <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <title>A description of the test machine.</title> - <description> - A test of qemu's minimal configuration. - This test also tests the description and title elements. - </description> <memory unit='KiB'>219100</memory> <currentMemory unit='KiB'>219100</currentMemory> <vcpu placement='static' cpuset='1-4,8-20,525'>1</vcpu> diff --git a/tests/qemuxmlconfdata/cpu-host-model-features.xml b/tests/qemuxmlconfdata/cpu-host-model-features.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/cpu-host-model-features.xml +++ b/tests/qemuxmlconfdata/cpu-host-model-features.xml @@ -XXX,XX +XXX,XX @@ <domain type='kvm'> <name>QEMUGuest1</name> <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <title>A description of the test machine.</title> - <description> - A test of qemu's minimal configuration. - This test also tests the description and title elements. - </description> <memory unit='KiB'>219100</memory> <currentMemory unit='KiB'>219100</currentMemory> <vcpu placement='static' cpuset='1-4,8-20,525'>1</vcpu> diff --git a/tests/qemuxmlconfdata/cpu-host-passthrough-features.x86_64-latest.xml b/tests/qemuxmlconfdata/cpu-host-passthrough-features.x86_64-latest.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/cpu-host-passthrough-features.x86_64-latest.xml +++ b/tests/qemuxmlconfdata/cpu-host-passthrough-features.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ <domain type='kvm'> <name>QEMUGuest1</name> <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <title>A description of the test machine.</title> - <description> - A test of qemu's minimal configuration. - This test also tests the description and title elements. - </description> <memory unit='KiB'>219100</memory> <currentMemory unit='KiB'>219100</currentMemory> <vcpu placement='static' cpuset='1-4,8-20,525'>1</vcpu> diff --git a/tests/qemuxmlconfdata/cpu-host-passthrough-features.xml b/tests/qemuxmlconfdata/cpu-host-passthrough-features.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/cpu-host-passthrough-features.xml +++ b/tests/qemuxmlconfdata/cpu-host-passthrough-features.xml @@ -XXX,XX +XXX,XX @@ <domain type='kvm'> <name>QEMUGuest1</name> <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <title>A description of the test machine.</title> - <description> - A test of qemu's minimal configuration. - This test also tests the description and title elements. - </description> <memory unit='KiB'>219100</memory> <currentMemory unit='KiB'>219100</currentMemory> <vcpu placement='static' cpuset='1-4,8-20,525'>1</vcpu> diff --git a/tests/qemuxmlconfdata/cpu-tsc-frequency.x86_64-latest.xml b/tests/qemuxmlconfdata/cpu-tsc-frequency.x86_64-latest.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/cpu-tsc-frequency.x86_64-latest.xml +++ b/tests/qemuxmlconfdata/cpu-tsc-frequency.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ <domain type='kvm'> <name>QEMUGuest1</name> <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <title>A description of the test machine.</title> - <description> - A test of qemu's minimal configuration. - This test also tests the description and title elements. - </description> <memory unit='KiB'>219100</memory> <currentMemory unit='KiB'>219100</currentMemory> <vcpu placement='static'>1</vcpu> diff --git a/tests/qemuxmlconfdata/cpu-tsc-frequency.xml b/tests/qemuxmlconfdata/cpu-tsc-frequency.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/cpu-tsc-frequency.xml +++ b/tests/qemuxmlconfdata/cpu-tsc-frequency.xml @@ -XXX,XX +XXX,XX @@ <domain type='kvm'> <name>QEMUGuest1</name> <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <title>A description of the test machine.</title> - <description> - A test of qemu's minimal configuration. - This test also tests the description and title elements. - </description> <memory unit='KiB'>219100</memory> <currentMemory unit='KiB'>219100</currentMemory> <vcpu placement='static'>1</vcpu> diff --git a/tests/qemuxmlconfdata/disk-cdrom-bus-other.x86_64-latest.xml b/tests/qemuxmlconfdata/disk-cdrom-bus-other.x86_64-latest.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/disk-cdrom-bus-other.x86_64-latest.xml +++ b/tests/qemuxmlconfdata/disk-cdrom-bus-other.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ <domain type='qemu'> <name>QEMUGuest1</name> <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <description>This test is meant for testing CDROMS with buses which don't really support them</description> <memory unit='KiB'>219100</memory> <currentMemory unit='KiB'>219100</currentMemory> <vcpu placement='static'>1</vcpu> diff --git a/tests/qemuxmlconfdata/disk-cdrom-bus-other.xml b/tests/qemuxmlconfdata/disk-cdrom-bus-other.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/disk-cdrom-bus-other.xml +++ b/tests/qemuxmlconfdata/disk-cdrom-bus-other.xml @@ -XXX,XX +XXX,XX @@ <domain type='qemu'> <name>QEMUGuest1</name> <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <description>This test is meant for testing CDROMS with buses which don't really support them</description> <memory unit='KiB'>219100</memory> <currentMemory unit='KiB'>219100</currentMemory> <vcpu placement='static'>1</vcpu> diff --git a/tests/qemuxmlconfdata/minimal.x86_64-latest.xml b/tests/qemuxmlconfdata/minimal.x86_64-latest.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/minimal.x86_64-latest.xml +++ b/tests/qemuxmlconfdata/minimal.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ <domain type='qemu'> <name>QEMUGuest1</name> <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <title>A description of the test machine.</title> - <description> - A test of qemu's minimal configuration. - This test also tests the description and title elements. - </description> <memory unit='KiB'>219100</memory> <currentMemory unit='KiB'>219100</currentMemory> <vcpu placement='static' cpuset='1-4,8-20,525'>1</vcpu> diff --git a/tests/qemuxmlconfdata/minimal.xml b/tests/qemuxmlconfdata/minimal.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/minimal.xml +++ b/tests/qemuxmlconfdata/minimal.xml @@ -XXX,XX +XXX,XX @@ <domain type='qemu'> <name>QEMUGuest1</name> <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <title>A description of the test machine.</title> - <description> - A test of qemu's minimal configuration. - This test also tests the description and title elements. - </description> <memory unit='KiB'>219100</memory> <currentMemory unit='KiB'>219100</currentMemory> <vcpu placement='static' cpuset='1-4,8-20,525'>1</vcpu> diff --git a/tests/qemuxmlconfdata/missing-machine.xml b/tests/qemuxmlconfdata/missing-machine.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/missing-machine.xml +++ b/tests/qemuxmlconfdata/missing-machine.xml @@ -XXX,XX +XXX,XX @@ <domain type='qemu'> <name>QEMUGuest1</name> <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <title>A description of the test machine.</title> <memory unit='KiB'>219100</memory> <currentMemory unit='KiB'>219100</currentMemory> <vcpu placement='static' cpuset='1'>1</vcpu> -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- tests/qemuxmlconfdata/minimal-no-memory.xml | 25 ------------------- ...latest.err => no-memory.x86_64-latest.err} | 0 tests/qemuxmlconfdata/no-memory.xml | 11 ++++++++ tests/qemuxmlconftest.c | 2 +- 4 files changed, 12 insertions(+), 26 deletions(-) delete mode 100644 tests/qemuxmlconfdata/minimal-no-memory.xml rename tests/qemuxmlconfdata/{minimal-no-memory.x86_64-latest.err => no-memory.x86_64-latest.err} (100%) create mode 100644 tests/qemuxmlconfdata/no-memory.xml diff --git a/tests/qemuxmlconfdata/minimal-no-memory.xml b/tests/qemuxmlconfdata/minimal-no-memory.xml deleted file mode 100644 index XXXXXXX..XXXXXXX --- a/tests/qemuxmlconfdata/minimal-no-memory.xml +++ /dev/null @@ -XXX,XX +XXX,XX @@ -<domain type='qemu'> - <name>QEMUGuest1</name> - <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <vcpu placement='static' cpuset='1-4,8-20,525'>1</vcpu> - <os> - <type arch='x86_64' machine='pc'>hvm</type> - <boot dev='hd'/> - </os> - <clock offset='utc'/> - <on_poweroff>destroy</on_poweroff> - <on_reboot>restart</on_reboot> - <on_crash>destroy</on_crash> - <devices> - <emulator>/usr/bin/qemu-system-x86_64</emulator> - <disk type='block' device='disk'> - <source dev='/dev/HostVG/QEMUGuest1'/> - <target dev='hda' bus='ide'/> - <address type='drive' controller='0' bus='0' target='0' unit='0'/> - </disk> - <controller type='usb' index='0'/> - <controller type='ide' index='0'/> - <controller type='pci' index='0' model='pci-root'/> - <memballoon model='virtio'/> - </devices> -</domain> diff --git a/tests/qemuxmlconfdata/minimal-no-memory.x86_64-latest.err b/tests/qemuxmlconfdata/no-memory.x86_64-latest.err similarity index 100% rename from tests/qemuxmlconfdata/minimal-no-memory.x86_64-latest.err rename to tests/qemuxmlconfdata/no-memory.x86_64-latest.err diff --git a/tests/qemuxmlconfdata/no-memory.xml b/tests/qemuxmlconfdata/no-memory.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/no-memory.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <vcpu>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -XXX,XX +XXX,XX @@ mymain(void) g_unsetenv("PIPEWIRE_RUNTIME_DIR"); DO_TEST_CAPS_LATEST("minimal"); - DO_TEST_CAPS_LATEST_PARSE_ERROR("minimal-no-memory"); + DO_TEST_CAPS_LATEST_PARSE_ERROR("no-memory"); DO_TEST_CAPS_LATEST("title-and-description"); DO_TEST_CAPS_LATEST("genid"); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
We currently have a single test case called "minimal", which suffers from two big flaws: * it's limited to the x86_64/pc machine type; * it explicitly enables a number of devices. Add several test cases, one for each of the architectures and machine types that we have good support for. Unlike the existing one, they're *really* minimal: no devices or controllers at all are present in the input XML. So the new test cases demonstrate exactly what devices and controller libvirt will decide to add automatically. Note that we use the ABI_UPDATE variant of the test macros because, in some cases, the behavior for new guests is not the same as that for existing ones due to backward compatibility concerns, and we specifically care about the former. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- .../aarch64-virt-minimal.aarch64-latest.args | 31 ++++++++++++ .../aarch64-virt-minimal.aarch64-latest.xml | 26 ++++++++++ .../qemuxmlconfdata/aarch64-virt-minimal.xml | 12 +++++ .../ppc64-pseries-minimal.ppc64-latest.args | 33 ++++++++++++ .../ppc64-pseries-minimal.ppc64-latest.xml | 33 ++++++++++++ .../qemuxmlconfdata/ppc64-pseries-minimal.xml | 12 +++++ .../riscv64-virt-minimal.riscv64-latest.args | 33 ++++++++++++ .../riscv64-virt-minimal.riscv64-latest.xml | 33 ++++++++++++ .../qemuxmlconfdata/riscv64-virt-minimal.xml | 12 +++++ .../s390x-ccw-minimal.s390x-latest.args | 32 ++++++++++++ .../s390x-ccw-minimal.s390x-latest.xml | 27 ++++++++++ tests/qemuxmlconfdata/s390x-ccw-minimal.xml | 12 +++++ .../x86_64-pc-minimal.x86_64-latest.args | 33 ++++++++++++ .../x86_64-pc-minimal.x86_64-latest.xml | 31 ++++++++++++ tests/qemuxmlconfdata/x86_64-pc-minimal.xml | 12 +++++ .../x86_64-q35-minimal.x86_64-latest.args | 38 ++++++++++++++ .../x86_64-q35-minimal.x86_64-latest.xml | 50 +++++++++++++++++++ tests/qemuxmlconfdata/x86_64-q35-minimal.xml | 12 +++++ tests/qemuxmlconftest.c | 7 +++ 19 files changed, 479 insertions(+) create mode 100644 tests/qemuxmlconfdata/aarch64-virt-minimal.aarch64-latest.args create mode 100644 tests/qemuxmlconfdata/aarch64-virt-minimal.aarch64-latest.xml create mode 100644 tests/qemuxmlconfdata/aarch64-virt-minimal.xml create mode 100644 tests/qemuxmlconfdata/ppc64-pseries-minimal.ppc64-latest.args create mode 100644 tests/qemuxmlconfdata/ppc64-pseries-minimal.ppc64-latest.xml create mode 100644 tests/qemuxmlconfdata/ppc64-pseries-minimal.xml create mode 100644 tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.args create mode 100644 tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.xml create mode 100644 tests/qemuxmlconfdata/riscv64-virt-minimal.xml create mode 100644 tests/qemuxmlconfdata/s390x-ccw-minimal.s390x-latest.args create mode 100644 tests/qemuxmlconfdata/s390x-ccw-minimal.s390x-latest.xml create mode 100644 tests/qemuxmlconfdata/s390x-ccw-minimal.xml create mode 100644 tests/qemuxmlconfdata/x86_64-pc-minimal.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/x86_64-pc-minimal.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/x86_64-pc-minimal.xml create mode 100644 tests/qemuxmlconfdata/x86_64-q35-minimal.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/x86_64-q35-minimal.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/x86_64-q35-minimal.xml diff --git a/tests/qemuxmlconfdata/aarch64-virt-minimal.aarch64-latest.args b/tests/qemuxmlconfdata/aarch64-virt-minimal.aarch64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/aarch64-virt-minimal.aarch64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ +/usr/bin/qemu-system-aarch64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ +-machine virt,usb=off,gic-version=2,dump-guest-core=off,memory-backend=mach-virt.ram,acpi=off \ +-accel tcg \ +-cpu cortex-a15 \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"mach-virt.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 4,sockets=4,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/aarch64-virt-minimal.aarch64-latest.xml b/tests/qemuxmlconfdata/aarch64-virt-minimal.aarch64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/aarch64-virt-minimal.aarch64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>4</vcpu> + <os> + <type arch='aarch64' machine='virt'>hvm</type> + <boot dev='hd'/> + </os> + <features> + <gic version='2'/> + </features> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>cortex-a15</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-aarch64</emulator> + <controller type='pci' index='0' model='pcie-root'/> + <audio id='1' type='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/aarch64-virt-minimal.xml b/tests/qemuxmlconfdata/aarch64-virt-minimal.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/aarch64-virt-minimal.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='aarch64' machine='virt'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-aarch64</emulator> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/ppc64-pseries-minimal.ppc64-latest.args b/tests/qemuxmlconfdata/ppc64-pseries-minimal.ppc64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/ppc64-pseries-minimal.ppc64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ +/usr/bin/qemu-system-ppc64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ +-machine pseries,usb=off,dump-guest-core=off,memory-backend=ppc_spapr.ram \ +-accel tcg \ +-cpu POWER9 \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"ppc_spapr.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 4,sockets=4,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"qemu-xhci","id":"usb","bus":"pci.0","addr":"0x1"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x2"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/ppc64-pseries-minimal.ppc64-latest.xml b/tests/qemuxmlconfdata/ppc64-pseries-minimal.ppc64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/ppc64-pseries-minimal.ppc64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>4</vcpu> + <os> + <type arch='ppc64' machine='pseries'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>POWER9</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-ppc64</emulator> + <controller type='usb' index='0' model='qemu-xhci'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> + </controller> + <controller type='pci' index='0' model='pci-root'> + <model name='spapr-pci-host-bridge'/> + <target index='0'/> + </controller> + <audio id='1' type='none'/> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </memballoon> + <panic model='pseries'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/ppc64-pseries-minimal.xml b/tests/qemuxmlconfdata/ppc64-pseries-minimal.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/ppc64-pseries-minimal.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='ppc64' machine='pseries'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-ppc64</emulator> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.args b/tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ +/usr/bin/qemu-system-riscv64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ +-machine virt,usb=off,dump-guest-core=off,memory-backend=riscv_virt_board.ram \ +-accel tcg \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"riscv_virt_board.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 4,sockets=4,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"pcie-root-port","port":8,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x1"}' \ +-device '{"driver":"pcie-root-port","port":9,"chassis":2,"id":"pci.2","bus":"pcie.0","addr":"0x1.0x1"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.1","addr":"0x0"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.xml b/tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>4</vcpu> + <os> + <type arch='riscv64' machine='virt'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-riscv64</emulator> + <controller type='pci' index='0' model='pcie-root'/> + <controller type='pci' index='1' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='1' port='0x8'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/> + </controller> + <controller type='pci' index='2' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='2' port='0x9'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> + </controller> + <audio id='1' type='none'/> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/riscv64-virt-minimal.xml b/tests/qemuxmlconfdata/riscv64-virt-minimal.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/riscv64-virt-minimal.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='riscv64' machine='virt'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-riscv64</emulator> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/s390x-ccw-minimal.s390x-latest.args b/tests/qemuxmlconfdata/s390x-ccw-minimal.s390x-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/s390x-ccw-minimal.s390x-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ +/usr/bin/qemu-system-s390x \ +-name guest=guest,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ +-machine s390-ccw-virtio,usb=off,dump-guest-core=off,memory-backend=s390.ram \ +-accel tcg \ +-cpu qemu \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 4,sockets=4,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-balloon-ccw","id":"balloon0","devno":"fe.0.0000"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/s390x-ccw-minimal.s390x-latest.xml b/tests/qemuxmlconfdata/s390x-ccw-minimal.s390x-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/s390x-ccw-minimal.s390x-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>4</vcpu> + <os> + <type arch='s390x' machine='s390-ccw-virtio'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-s390x</emulator> + <controller type='pci' index='0' model='pci-root'/> + <audio id='1' type='none'/> + <memballoon model='virtio'> + <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/> + </memballoon> + <panic model='s390'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/s390x-ccw-minimal.xml b/tests/qemuxmlconfdata/s390x-ccw-minimal.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/s390x-ccw-minimal.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='s390x' machine='s390-ccw-virtio'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-s390x</emulator> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/x86_64-pc-minimal.x86_64-latest.args b/tests/qemuxmlconfdata/x86_64-pc-minimal.x86_64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/x86_64-pc-minimal.x86_64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ +-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-cpu qemu64 \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 4,sockets=4,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x2"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/x86_64-pc-minimal.x86_64-latest.xml b/tests/qemuxmlconfdata/x86_64-pc-minimal.x86_64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/x86_64-pc-minimal.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>4</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='usb' index='0' model='piix3-uhci'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> + </controller> + <controller type='pci' index='0' model='pci-root'/> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/x86_64-pc-minimal.xml b/tests/qemuxmlconfdata/x86_64-pc-minimal.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/x86_64-pc-minimal.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/x86_64-q35-minimal.x86_64-latest.args b/tests/qemuxmlconfdata/x86_64-q35-minimal.x86_64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/x86_64-q35-minimal.x86_64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ +-machine q35,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-cpu qemu64 \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 4,sockets=4,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"pcie-root-port","port":8,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x1"}' \ +-device '{"driver":"pcie-root-port","port":9,"chassis":2,"id":"pci.2","bus":"pcie.0","addr":"0x1.0x1"}' \ +-device '{"driver":"pcie-root-port","port":10,"chassis":3,"id":"pci.3","bus":"pcie.0","addr":"0x1.0x2"}' \ +-device '{"driver":"qemu-xhci","id":"usb","bus":"pci.1","addr":"0x0"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-global ICH9-LPC.noreboot=off \ +-watchdog-action reset \ +-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.2","addr":"0x0"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/x86_64-q35-minimal.x86_64-latest.xml b/tests/qemuxmlconfdata/x86_64-q35-minimal.x86_64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/x86_64-q35-minimal.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>4</vcpu> + <os> + <type arch='x86_64' machine='q35'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='usb' index='0' model='qemu-xhci'> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> + </controller> + <controller type='sata' index='0'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/> + </controller> + <controller type='pci' index='0' model='pcie-root'/> + <controller type='pci' index='1' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='1' port='0x8'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/> + </controller> + <controller type='pci' index='2' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='2' port='0x9'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> + </controller> + <controller type='pci' index='3' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='3' port='0xa'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> + </controller> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <watchdog model='itco' action='reset'/> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/x86_64-q35-minimal.xml b/tests/qemuxmlconfdata/x86_64-q35-minimal.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/x86_64-q35-minimal.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='x86_64' machine='q35'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -XXX,XX +XXX,XX @@ mymain(void) g_unsetenv("PIPEWIRE_REMOTE"); g_unsetenv("PIPEWIRE_RUNTIME_DIR"); + DO_TEST_CAPS_LATEST_ABI_UPDATE("x86_64-pc-minimal"); + DO_TEST_CAPS_LATEST_ABI_UPDATE("x86_64-q35-minimal"); + DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("aarch64-virt-minimal", "aarch64"); + DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("riscv64-virt-minimal", "riscv64"); + DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("ppc64-pseries-minimal", "ppc64"); + DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("s390x-ccw-minimal", "s390x"); + DO_TEST_CAPS_LATEST("minimal"); DO_TEST_CAPS_LATEST_PARSE_ERROR("no-memory"); DO_TEST_CAPS_LATEST("title-and-description"); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
We have just added a number of test cases that supersede it. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- .../minimal.x86_64-latest.args | 36 ----------------- .../qemuxmlconfdata/minimal.x86_64-latest.xml | 40 ------------------- tests/qemuxmlconfdata/minimal.xml | 29 -------------- tests/qemuxmlconftest.c | 1 - 4 files changed, 106 deletions(-) delete mode 100644 tests/qemuxmlconfdata/minimal.x86_64-latest.args delete mode 100644 tests/qemuxmlconfdata/minimal.x86_64-latest.xml delete mode 100644 tests/qemuxmlconfdata/minimal.xml diff --git a/tests/qemuxmlconfdata/minimal.x86_64-latest.args b/tests/qemuxmlconfdata/minimal.x86_64-latest.args deleted file mode 100644 index XXXXXXX..XXXXXXX --- a/tests/qemuxmlconfdata/minimal.x86_64-latest.args +++ /dev/null @@ -XXX,XX +XXX,XX @@ -LC_ALL=C \ -PATH=/bin \ -HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \ -USER=test \ -LOGNAME=test \ -XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \ -XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \ -XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ -/usr/bin/qemu-system-x86_64 \ --name guest=QEMUGuest1,debug-threads=on \ --S \ --object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \ --machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ --accel tcg \ --cpu qemu64 \ --m size=219136k \ --object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ --overcommit mem-lock=off \ --smp 1,sockets=1,cores=1,threads=1 \ --uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ --display none \ --no-user-config \ --nodefaults \ --chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ --mon chardev=charmonitor,id=monitor,mode=control \ --rtc base=utc \ --no-shutdown \ --boot strict=on \ --device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \ --blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \ --blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \ --device '{"driver":"ide-hd","bus":"ide.0","unit":0,"drive":"libvirt-1-format","id":"ide0-0-0","bootindex":1}' \ --audiodev '{"id":"audio1","driver":"none"}' \ --device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x2"}' \ --sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ --msg timestamp=on diff --git a/tests/qemuxmlconfdata/minimal.x86_64-latest.xml b/tests/qemuxmlconfdata/minimal.x86_64-latest.xml deleted file mode 100644 index XXXXXXX..XXXXXXX --- a/tests/qemuxmlconfdata/minimal.x86_64-latest.xml +++ /dev/null @@ -XXX,XX +XXX,XX @@ -<domain type='qemu'> - <name>QEMUGuest1</name> - <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <memory unit='KiB'>219100</memory> - <currentMemory unit='KiB'>219100</currentMemory> - <vcpu placement='static' cpuset='1-4,8-20,525'>1</vcpu> - <os> - <type arch='x86_64' machine='pc'>hvm</type> - <boot dev='hd'/> - </os> - <cpu mode='custom' match='exact' check='none'> - <model fallback='forbid'>qemu64</model> - </cpu> - <clock offset='utc'/> - <on_poweroff>destroy</on_poweroff> - <on_reboot>restart</on_reboot> - <on_crash>destroy</on_crash> - <devices> - <emulator>/usr/bin/qemu-system-x86_64</emulator> - <disk type='block' device='disk'> - <driver name='qemu' type='raw'/> - <source dev='/dev/HostVG/QEMUGuest1'/> - <target dev='hda' bus='ide'/> - <address type='drive' controller='0' bus='0' target='0' unit='0'/> - </disk> - <controller type='usb' index='0' model='piix3-uhci'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> - </controller> - <controller type='ide' index='0'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> - </controller> - <controller type='pci' index='0' model='pci-root'/> - <input type='mouse' bus='ps2'/> - <input type='keyboard' bus='ps2'/> - <audio id='1' type='none'/> - <memballoon model='virtio'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> - </memballoon> - </devices> -</domain> diff --git a/tests/qemuxmlconfdata/minimal.xml b/tests/qemuxmlconfdata/minimal.xml deleted file mode 100644 index XXXXXXX..XXXXXXX --- a/tests/qemuxmlconfdata/minimal.xml +++ /dev/null @@ -XXX,XX +XXX,XX @@ -<domain type='qemu'> - <name>QEMUGuest1</name> - <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <memory unit='KiB'>219100</memory> - <currentMemory unit='KiB'>219100</currentMemory> - <vcpu placement='static' cpuset='1-4,8-20,525'>1</vcpu> - <os> - <type arch='x86_64' machine='pc'>hvm</type> - <boot dev='hd'/> - </os> - <clock offset='utc'/> - <on_poweroff>destroy</on_poweroff> - <on_reboot>restart</on_reboot> - <on_crash>destroy</on_crash> - <devices> - <emulator>/usr/bin/qemu-system-x86_64</emulator> - <disk type='block' device='disk'> - <source dev='/dev/HostVG/QEMUGuest1'/> - <target dev='hda' bus='ide'/> - <address type='drive' controller='0' bus='0' target='0' unit='0'/> - </disk> - <controller type='usb' index='0'/> - <controller type='ide' index='0'/> - <controller type='pci' index='0' model='pci-root'/> - <input type='mouse' bus='ps2'/> - <input type='keyboard' bus='ps2'/> - <memballoon model='virtio'/> - </devices> -</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -XXX,XX +XXX,XX @@ mymain(void) DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("ppc64-pseries-minimal", "ppc64"); DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("s390x-ccw-minimal", "s390x"); - DO_TEST_CAPS_LATEST("minimal"); DO_TEST_CAPS_LATEST_PARSE_ERROR("no-memory"); DO_TEST_CAPS_LATEST("title-and-description"); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
These are similar to the minimal cases that we just introduced, but are intended to demonstrate what device or controller model libvirt will choose when one is not provided by the user. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- ...64-virt-default-models.aarch64-latest.args | 44 +++++++++++ ...h64-virt-default-models.aarch64-latest.xml | 79 +++++++++++++++++++ .../aarch64-virt-default-models.xml | 21 +++++ ...4-pseries-default-models.ppc64-latest.args | 38 +++++++++ ...64-pseries-default-models.ppc64-latest.xml | 53 +++++++++++++ .../ppc64-pseries-default-models.xml | 21 +++++ ...64-virt-default-models.riscv64-latest.args | 42 ++++++++++ ...v64-virt-default-models.riscv64-latest.xml | 68 ++++++++++++++++ .../riscv64-virt-default-models.xml | 21 +++++ ...s390x-ccw-default-models.s390x-latest.args | 37 +++++++++ .../s390x-ccw-default-models.s390x-latest.xml | 46 +++++++++++ .../s390x-ccw-default-models.xml | 21 +++++ ...86_64-pc-default-models.x86_64-latest.args | 39 +++++++++ ...x86_64-pc-default-models.x86_64-latest.xml | 50 ++++++++++++ .../x86_64-pc-default-models.xml | 21 +++++ ...6_64-q35-default-models.x86_64-latest.args | 44 +++++++++++ ...86_64-q35-default-models.x86_64-latest.xml | 68 ++++++++++++++++ .../x86_64-q35-default-models.xml | 21 +++++ tests/qemuxmlconftest.c | 7 ++ 19 files changed, 741 insertions(+) create mode 100644 tests/qemuxmlconfdata/aarch64-virt-default-models.aarch64-latest.args create mode 100644 tests/qemuxmlconfdata/aarch64-virt-default-models.aarch64-latest.xml create mode 100644 tests/qemuxmlconfdata/aarch64-virt-default-models.xml create mode 100644 tests/qemuxmlconfdata/ppc64-pseries-default-models.ppc64-latest.args create mode 100644 tests/qemuxmlconfdata/ppc64-pseries-default-models.ppc64-latest.xml create mode 100644 tests/qemuxmlconfdata/ppc64-pseries-default-models.xml create mode 100644 tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args create mode 100644 tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml create mode 100644 tests/qemuxmlconfdata/riscv64-virt-default-models.xml create mode 100644 tests/qemuxmlconfdata/s390x-ccw-default-models.s390x-latest.args create mode 100644 tests/qemuxmlconfdata/s390x-ccw-default-models.s390x-latest.xml create mode 100644 tests/qemuxmlconfdata/s390x-ccw-default-models.xml create mode 100644 tests/qemuxmlconfdata/x86_64-pc-default-models.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/x86_64-pc-default-models.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/x86_64-pc-default-models.xml create mode 100644 tests/qemuxmlconfdata/x86_64-q35-default-models.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/x86_64-q35-default-models.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/x86_64-q35-default-models.xml diff --git a/tests/qemuxmlconfdata/aarch64-virt-default-models.aarch64-latest.args b/tests/qemuxmlconfdata/aarch64-virt-default-models.aarch64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/aarch64-virt-default-models.aarch64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ +/usr/bin/qemu-system-aarch64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ +-machine virt,usb=off,gic-version=2,dump-guest-core=off,memory-backend=mach-virt.ram,acpi=off \ +-accel tcg \ +-cpu cortex-a15 \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"mach-virt.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 4,sockets=4,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"pcie-root-port","port":8,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x1"}' \ +-device '{"driver":"pcie-root-port","port":9,"chassis":2,"id":"pci.2","bus":"pcie.0","addr":"0x1.0x1"}' \ +-device '{"driver":"pcie-root-port","port":10,"chassis":3,"id":"pci.3","bus":"pcie.0","addr":"0x1.0x2"}' \ +-device '{"driver":"pcie-pci-bridge","id":"pci.4","bus":"pci.1","addr":"0x0"}' \ +-device '{"driver":"pcie-root-port","port":11,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x1.0x3"}' \ +-device '{"driver":"pcie-root-port","port":12,"chassis":6,"id":"pci.6","bus":"pcie.0","addr":"0x1.0x4"}' \ +-device '{"driver":"qemu-xhci","id":"usb","bus":"pci.3","addr":"0x0"}' \ +-device '{"driver":"lsi","id":"scsi0","bus":"pci.4","addr":"0x1"}' \ +-netdev '{"type":"user","id":"hostnet0"}' \ +-device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","bus":"pci.2","addr":"0x0"}' \ +-chardev pty,id=charserial0 \ +-serial chardev:charserial0 \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-gpu-pci","id":"video0","max_outputs":1,"bus":"pci.5","addr":"0x0"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/aarch64-virt-default-models.aarch64-latest.xml b/tests/qemuxmlconfdata/aarch64-virt-default-models.aarch64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/aarch64-virt-default-models.aarch64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>4</vcpu> + <os> + <type arch='aarch64' machine='virt'>hvm</type> + <boot dev='hd'/> + </os> + <features> + <gic version='2'/> + </features> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>cortex-a15</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-aarch64</emulator> + <controller type='usb' index='0' model='qemu-xhci'> + <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> + </controller> + <controller type='scsi' index='0' model='lsilogic'> + <address type='pci' domain='0x0000' bus='0x04' slot='0x01' function='0x0'/> + </controller> + <controller type='pci' index='0' model='pcie-root'/> + <controller type='pci' index='1' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='1' port='0x8'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/> + </controller> + <controller type='pci' index='2' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='2' port='0x9'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> + </controller> + <controller type='pci' index='3' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='3' port='0xa'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> + </controller> + <controller type='pci' index='4' model='pcie-to-pci-bridge'> + <model name='pcie-pci-bridge'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> + </controller> + <controller type='pci' index='5' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='5' port='0xb'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/> + </controller> + <controller type='pci' index='6' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='6' port='0xc'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/> + </controller> + <interface type='user'> + <mac address='52:54:00:09:a4:37'/> + <model type='virtio'/> + <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> + </interface> + <serial type='pty'> + <target type='system-serial' port='0'> + <model name='pl011'/> + </target> + </serial> + <console type='pty'> + <target type='serial' port='0'/> + </console> + <audio id='1' type='none'/> + <video> + <model type='virtio' heads='1' primary='yes'/> + <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> + </video> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/aarch64-virt-default-models.xml b/tests/qemuxmlconfdata/aarch64-virt-default-models.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/aarch64-virt-default-models.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='aarch64' machine='virt'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-aarch64</emulator> + <controller type='usb'/> + <controller type='scsi'/> + <interface type='user'> + <mac address='52:54:00:09:a4:37'/> + </interface> + <serial type='pty'/> + <video/> + <memballoon model='none'/> + <!-- No default model for <panic/> on aarch64 --> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/ppc64-pseries-default-models.ppc64-latest.args b/tests/qemuxmlconfdata/ppc64-pseries-default-models.ppc64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/ppc64-pseries-default-models.ppc64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ +/usr/bin/qemu-system-ppc64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ +-machine pseries,usb=off,dump-guest-core=off,memory-backend=ppc_spapr.ram \ +-accel tcg \ +-cpu POWER9 \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"ppc_spapr.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 4,sockets=4,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"qemu-xhci","id":"usb","bus":"pci.0","addr":"0x2"}' \ +-device '{"driver":"spapr-vscsi","id":"scsi0","reg":8192}' \ +-netdev user,id=hostnet0 \ +-device '{"driver":"rtl8139","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","bus":"pci.0","addr":"0x1"}' \ +-chardev pty,id=charserial0 \ +-device '{"driver":"spapr-vty","chardev":"charserial0","id":"serial0","reg":805306368}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"VGA","id":"video0","vgamem_mb":16,"bus":"pci.0","addr":"0x3"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/ppc64-pseries-default-models.ppc64-latest.xml b/tests/qemuxmlconfdata/ppc64-pseries-default-models.ppc64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/ppc64-pseries-default-models.ppc64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>4</vcpu> + <os> + <type arch='ppc64' machine='pseries'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>POWER9</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-ppc64</emulator> + <controller type='usb' index='0' model='qemu-xhci'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </controller> + <controller type='scsi' index='0' model='ibmvscsi'> + <address type='spapr-vio' reg='0x00002000'/> + </controller> + <controller type='pci' index='0' model='pci-root'> + <model name='spapr-pci-host-bridge'/> + <target index='0'/> + </controller> + <interface type='user'> + <mac address='52:54:00:09:a4:37'/> + <model type='rtl8139'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> + </interface> + <serial type='pty'> + <target type='spapr-vio-serial' port='0'> + <model name='spapr-vty'/> + </target> + <address type='spapr-vio' reg='0x30000000'/> + </serial> + <console type='pty'> + <target type='serial' port='0'/> + <address type='spapr-vio' reg='0x30000000'/> + </console> + <audio id='1' type='none'/> + <video> + <model type='vga' vram='16384' heads='1' primary='yes'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </video> + <memballoon model='none'/> + <panic model='pseries'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/ppc64-pseries-default-models.xml b/tests/qemuxmlconfdata/ppc64-pseries-default-models.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/ppc64-pseries-default-models.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='ppc64' machine='pseries'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-ppc64</emulator> + <controller type='usb'/> + <controller type='scsi'/> + <interface type='user'> + <mac address='52:54:00:09:a4:37'/> + </interface> + <serial type='pty'/> + <video/> + <memballoon model='none'/> + <panic/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ +/usr/bin/qemu-system-riscv64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ +-machine virt,usb=off,dump-guest-core=off,memory-backend=riscv_virt_board.ram \ +-accel tcg \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"riscv_virt_board.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 4,sockets=4,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"pcie-root-port","port":8,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x1"}' \ +-device '{"driver":"pcie-root-port","port":9,"chassis":2,"id":"pci.2","bus":"pcie.0","addr":"0x1.0x1"}' \ +-device '{"driver":"pcie-pci-bridge","id":"pci.3","bus":"pci.1","addr":"0x0"}' \ +-device '{"driver":"pcie-root-port","port":10,"chassis":4,"id":"pci.4","bus":"pcie.0","addr":"0x1.0x2"}' \ +-device '{"driver":"pcie-root-port","port":11,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x1.0x3"}' \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.3","addr":"0x1"}' \ +-device '{"driver":"lsi","id":"scsi0","bus":"pci.3","addr":"0x2"}' \ +-netdev '{"type":"user","id":"hostnet0"}' \ +-device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","bus":"pci.2","addr":"0x0"}' \ +-chardev pty,id=charserial0 \ +-serial chardev:charserial0 \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pci.4","addr":"0x0"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>4</vcpu> + <os> + <type arch='riscv64' machine='virt'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-riscv64</emulator> + <controller type='usb' index='0' model='piix3-uhci'> + <address type='pci' domain='0x0000' bus='0x03' slot='0x01' function='0x0'/> + </controller> + <controller type='scsi' index='0' model='lsilogic'> + <address type='pci' domain='0x0000' bus='0x03' slot='0x02' function='0x0'/> + </controller> + <controller type='pci' index='0' model='pcie-root'/> + <controller type='pci' index='1' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='1' port='0x8'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/> + </controller> + <controller type='pci' index='2' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='2' port='0x9'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> + </controller> + <controller type='pci' index='3' model='pcie-to-pci-bridge'> + <model name='pcie-pci-bridge'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> + </controller> + <controller type='pci' index='4' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='4' port='0xa'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> + </controller> + <controller type='pci' index='5' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='5' port='0xb'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/> + </controller> + <interface type='user'> + <mac address='52:54:00:09:a4:37'/> + <model type='virtio'/> + <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> + </interface> + <serial type='pty'> + <target type='system-serial' port='0'> + <model name='16550a'/> + </target> + </serial> + <console type='pty'> + <target type='serial' port='0'/> + </console> + <audio id='1' type='none'/> + <video> + <model type='virtio' heads='1' primary='yes'/> + <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> + </video> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.xml b/tests/qemuxmlconfdata/riscv64-virt-default-models.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='riscv64' machine='virt'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-riscv64</emulator> + <controller type='usb'/> + <controller type='scsi'/> + <interface type='user'> + <mac address='52:54:00:09:a4:37'/> + </interface> + <serial type='pty'/> + <video/> + <memballoon model='none'/> + <!-- No default model for <panic/> on riscv64 --> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/s390x-ccw-default-models.s390x-latest.args b/tests/qemuxmlconfdata/s390x-ccw-default-models.s390x-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/s390x-ccw-default-models.s390x-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ +/usr/bin/qemu-system-s390x \ +-name guest=guest,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ +-machine s390-ccw-virtio,usb=off,dump-guest-core=off,memory-backend=s390.ram \ +-accel tcg \ +-cpu qemu \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 4,sockets=4,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"virtio-scsi-ccw","id":"scsi0","devno":"fe.0.0002"}' \ +-netdev '{"type":"user","id":"hostnet0"}' \ +-device '{"driver":"virtio-net-ccw","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","devno":"fe.0.0000"}' \ +-chardev pty,id=charserial0 \ +-device '{"driver":"sclpconsole","chardev":"charserial0","id":"serial0"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-gpu-ccw","id":"video0","max_outputs":1,"devno":"fe.0.0001"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/s390x-ccw-default-models.s390x-latest.xml b/tests/qemuxmlconfdata/s390x-ccw-default-models.s390x-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/s390x-ccw-default-models.s390x-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>4</vcpu> + <os> + <type arch='s390x' machine='s390-ccw-virtio'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-s390x</emulator> + <controller type='usb' index='0' model='none'/> + <controller type='scsi' index='0' model='virtio-scsi'> + <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0002'/> + </controller> + <controller type='pci' index='0' model='pci-root'/> + <interface type='user'> + <mac address='52:54:00:09:a4:37'/> + <model type='virtio'/> + <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/> + </interface> + <serial type='pty'> + <target type='sclp-serial' port='0'> + <model name='sclpconsole'/> + </target> + </serial> + <console type='pty'> + <target type='serial' port='0'/> + </console> + <audio id='1' type='none'/> + <video> + <model type='virtio' heads='1' primary='yes'/> + <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0001'/> + </video> + <memballoon model='none'/> + <panic model='s390'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/s390x-ccw-default-models.xml b/tests/qemuxmlconfdata/s390x-ccw-default-models.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/s390x-ccw-default-models.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='s390x' machine='s390-ccw-virtio'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-s390x</emulator> + <controller type='usb'/> + <controller type='scsi'/> + <interface type='user'> + <mac address='52:54:00:09:a4:37'/> + </interface> + <serial type='pty'/> + <video/> + <memballoon model='none'/> + <panic/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/x86_64-pc-default-models.x86_64-latest.args b/tests/qemuxmlconfdata/x86_64-pc-default-models.x86_64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/x86_64-pc-default-models.x86_64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ +-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-cpu qemu64 \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 4,sockets=4,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \ +-device '{"driver":"lsi","id":"scsi0","bus":"pci.0","addr":"0x4"}' \ +-netdev '{"type":"user","id":"hostnet0"}' \ +-device '{"driver":"rtl8139","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","bus":"pci.0","addr":"0x3"}' \ +-chardev pty,id=charserial0 \ +-device '{"driver":"isa-serial","chardev":"charserial0","id":"serial0","index":0}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"cirrus-vga","id":"video0","bus":"pci.0","addr":"0x2"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-device '{"driver":"pvpanic"}' \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/x86_64-pc-default-models.x86_64-latest.xml b/tests/qemuxmlconfdata/x86_64-pc-default-models.x86_64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/x86_64-pc-default-models.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>4</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='usb' index='0' model='piix3-uhci'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> + </controller> + <controller type='scsi' index='0' model='lsilogic'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> + </controller> + <controller type='pci' index='0' model='pci-root'/> + <interface type='user'> + <mac address='52:54:00:09:a4:37'/> + <model type='rtl8139'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </interface> + <serial type='pty'> + <target type='isa-serial' port='0'> + <model name='isa-serial'/> + </target> + </serial> + <console type='pty'> + <target type='serial' port='0'/> + </console> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <video> + <model type='cirrus' vram='16384' heads='1' primary='yes'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </video> + <memballoon model='none'/> + <panic model='isa'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/x86_64-pc-default-models.xml b/tests/qemuxmlconfdata/x86_64-pc-default-models.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/x86_64-pc-default-models.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='usb'/> + <controller type='scsi'/> + <interface type='user'> + <mac address='52:54:00:09:a4:37'/> + </interface> + <serial type='pty'/> + <video/> + <memballoon model='none'/> + <panic/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/x86_64-q35-default-models.x86_64-latest.args b/tests/qemuxmlconfdata/x86_64-q35-default-models.x86_64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/x86_64-q35-default-models.x86_64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ +-machine q35,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-cpu qemu64 \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 4,sockets=4,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"pcie-root-port","port":16,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x2"}' \ +-device '{"driver":"pcie-pci-bridge","id":"pci.2","bus":"pci.1","addr":"0x0"}' \ +-device '{"driver":"pcie-root-port","port":17,"chassis":3,"id":"pci.3","bus":"pcie.0","addr":"0x2.0x1"}' \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.2","addr":"0x2"}' \ +-device '{"driver":"lsi","id":"scsi0","bus":"pci.2","addr":"0x3"}' \ +-netdev '{"type":"user","id":"hostnet0"}' \ +-device '{"driver":"rtl8139","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","bus":"pci.2","addr":"0x1"}' \ +-chardev pty,id=charserial0 \ +-device '{"driver":"isa-serial","chardev":"charserial0","id":"serial0","index":0}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"cirrus-vga","id":"video0","bus":"pcie.0","addr":"0x1"}' \ +-global ICH9-LPC.noreboot=off \ +-watchdog-action reset \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-device '{"driver":"pvpanic"}' \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/x86_64-q35-default-models.x86_64-latest.xml b/tests/qemuxmlconfdata/x86_64-q35-default-models.x86_64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/x86_64-q35-default-models.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>4</vcpu> + <os> + <type arch='x86_64' machine='q35'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='usb' index='0' model='piix3-uhci'> + <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x0'/> + </controller> + <controller type='scsi' index='0' model='lsilogic'> + <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x0'/> + </controller> + <controller type='sata' index='0'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/> + </controller> + <controller type='pci' index='0' model='pcie-root'/> + <controller type='pci' index='1' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='1' port='0x10'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/> + </controller> + <controller type='pci' index='2' model='pcie-to-pci-bridge'> + <model name='pcie-pci-bridge'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> + </controller> + <controller type='pci' index='3' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='3' port='0x11'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/> + </controller> + <interface type='user'> + <mac address='52:54:00:09:a4:37'/> + <model type='rtl8139'/> + <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/> + </interface> + <serial type='pty'> + <target type='isa-serial' port='0'> + <model name='isa-serial'/> + </target> + </serial> + <console type='pty'> + <target type='serial' port='0'/> + </console> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <video> + <model type='cirrus' vram='16384' heads='1' primary='yes'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> + </video> + <watchdog model='itco' action='reset'/> + <memballoon model='none'/> + <panic model='isa'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/x86_64-q35-default-models.xml b/tests/qemuxmlconfdata/x86_64-q35-default-models.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/x86_64-q35-default-models.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='x86_64' machine='q35'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='usb'/> + <controller type='scsi'/> + <interface type='user'> + <mac address='52:54:00:09:a4:37'/> + </interface> + <serial type='pty'/> + <video/> + <memballoon model='none'/> + <panic/> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -XXX,XX +XXX,XX @@ mymain(void) DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("ppc64-pseries-minimal", "ppc64"); DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("s390x-ccw-minimal", "s390x"); + DO_TEST_CAPS_LATEST_ABI_UPDATE("x86_64-pc-default-models"); + DO_TEST_CAPS_LATEST_ABI_UPDATE("x86_64-q35-default-models"); + DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("aarch64-virt-default-models", "aarch64"); + DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("riscv64-virt-default-models", "riscv64"); + DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("ppc64-pseries-default-models", "ppc64"); + DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("s390x-ccw-default-models", "s390x"); + DO_TEST_CAPS_LATEST_PARSE_ERROR("no-memory"); DO_TEST_CAPS_LATEST("title-and-description"); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
They reference functions that have since been renamed. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_command.c | 6 +++--- src/qemu/qemu_domain.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -XXX,XX +XXX,XX @@ qemuBuildControllerPCIDevProps(virDomainControllerDef *def, /** - * qemuBuildControllerDevStr: + * qemuBuildControllerDevProps: * @domainDef: domain definition * @def: controller definition * @qemuCaps: QEMU binary capabilities @@ -XXX,XX +XXX,XX @@ qemuBuildControllersByTypeCommandLine(virCommand *cmd, * * Note that we *don't* want to end up with the legacy USB * controller for q35 and virt machines, so we go ahead and - * fail in qemuBuildControllerDevStr(); on the other hand, + * fail in qemuBuildControllerDevProps(); on the other hand, * for s390 machines we want to ignore any USB controller * (see 548ba43028 for the full story), so we skip - * qemuBuildControllerDevStr() but we don't ultimately end + * qemuBuildControllerDevProps() but we don't ultimately end * up adding the legacy USB controller */ continue; } diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, * chance we will get away with using the legacy USB controller * when the relevant device is not available. * - * See qemuBuildControllerDevCommandLine() */ + * See qemuBuildControllersCommandLine() */ /* Default USB controller is piix3-uhci if available. */ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI)) -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
The current defaults, that can be altered on a per-architecture basis, are derived from the historical x86 behavior. Every time support for a new architecture is added to libvirt, care must be taken to override these default: if that doesn't happen, guests will end up with additional hardware, which is something that's generally undesirable. Turn things around, and require architectures to explicitly ask for the devices to be created by default instead. The behavior for existing architectures is preserved. Signed-off-by: Andrea Bolognani <abologna@redhat.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_domain.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, virDomainDef *def, virQEMUCaps *qemuCaps) { - bool addDefaultUSB = true; + bool addDefaultUSB = false; int usbModel = -1; /* "default for machinetype" */ int pciRoot; /* index within def->controllers */ bool addImplicitSATA = false; bool addPCIRoot = false; bool addPCIeRoot = false; - bool addDefaultMemballoon = true; + bool addDefaultMemballoon = false; bool addDefaultUSBKBD = false; bool addDefaultUSBMouse = false; bool addPanicDevice = false; @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, switch (def->os.arch) { case VIR_ARCH_I686: case VIR_ARCH_X86_64: + addDefaultMemballoon = true; + if (STREQ(def->os.machine, "isapc")) { - addDefaultUSB = false; break; } + + addDefaultUSB = true; + if (qemuDomainIsQ35(def)) { addPCIeRoot = true; addImplicitSATA = true; @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, break; case VIR_ARCH_ARMV6L: - addDefaultUSB = false; - addDefaultMemballoon = false; if (STREQ(def->os.machine, "versatilepb")) addPCIRoot = true; break; case VIR_ARCH_ARMV7L: case VIR_ARCH_AARCH64: - addDefaultUSB = false; - addDefaultMemballoon = false; if (qemuDomainIsARMVirt(def)) addPCIeRoot = true; break; @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, case VIR_ARCH_PPC64: case VIR_ARCH_PPC64LE: addPCIRoot = true; + addDefaultUSB = true; addDefaultUSBKBD = true; addDefaultUSBMouse = true; + addDefaultMemballoon = true; /* For pSeries guests, the firmware provides the same * functionality as the pvpanic device, so automatically * add the definition if not already present */ @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, case VIR_ARCH_PPCEMB: case VIR_ARCH_SH4: case VIR_ARCH_SH4EB: + addDefaultUSB = true; + addDefaultMemballoon = true; addPCIRoot = true; break; case VIR_ARCH_RISCV32: case VIR_ARCH_RISCV64: - addDefaultUSB = false; + addDefaultMemballoon = true; if (qemuDomainIsRISCVVirt(def)) addPCIeRoot = true; break; case VIR_ARCH_S390: case VIR_ARCH_S390X: - addDefaultUSB = false; + addDefaultMemballoon = true; addPanicDevice = true; addPCIRoot = virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_ZPCI); break; - case VIR_ARCH_SPARC: - addDefaultUSB = false; - addDefaultMemballoon = false; - break; - case VIR_ARCH_SPARC64: + addDefaultUSB = true; + addDefaultMemballoon = true; addPCIRoot = true; break; @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, case VIR_ARCH_MIPSEL: case VIR_ARCH_MIPS64: case VIR_ARCH_MIPS64EL: + addDefaultUSB = true; + addDefaultMemballoon = true; if (qemuDomainIsMipsMalta(def)) addPCIRoot = true; break; @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, case VIR_ARCH_PARISC: case VIR_ARCH_PARISC64: case VIR_ARCH_PPCLE: + case VIR_ARCH_SPARC: case VIR_ARCH_UNICORE32: case VIR_ARCH_XTENSA: case VIR_ARCH_XTENSAEB: -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Group things together where it makes sense, avoid unnecessary uses of 'else if', plus other tweaks. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ static int qemuDomainDefaultNetModel(const virDomainDef *def, virQEMUCaps *qemuCaps) { - if (ARCH_IS_S390(def->os.arch)) + /* When there are no backwards compatibility concerns getting in + * the way, virtio is a good default */ + if (ARCH_IS_S390(def->os.arch) || + qemuDomainIsRISCVVirt(def)) { return VIR_DOMAIN_NET_MODEL_VIRTIO; + } - if (def->os.arch == VIR_ARCH_ARMV6L || - def->os.arch == VIR_ARCH_ARMV7L || - def->os.arch == VIR_ARCH_AARCH64) { + if (ARCH_IS_ARM(def->os.arch)) { if (STREQ(def->os.machine, "versatilepb")) return VIR_DOMAIN_NET_MODEL_SMC91C111; @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultNetModel(const virDomainDef *def, return VIR_DOMAIN_NET_MODEL_LAN9118; } - /* virtio is a sensible default for RISC-V virt guests */ - if (qemuDomainIsRISCVVirt(def)) - return VIR_DOMAIN_NET_MODEL_VIRTIO; - /* In all other cases the model depends on the capabilities. If they were * not provided don't report any default. */ if (!qemuCaps) @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultNetModel(const virDomainDef *def, * system than the previous one */ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_RTL8139)) return VIR_DOMAIN_NET_MODEL_RTL8139; - else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_E1000)) + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_E1000)) return VIR_DOMAIN_NET_MODEL_E1000; - else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_NET)) + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_NET)) return VIR_DOMAIN_NET_MODEL_VIRTIO; /* We've had no luck detecting support for any network device, -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
It only has a single caller. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_alias.c | 13 +++++++++++-- src/qemu/qemu_domain_address.c | 26 -------------------------- src/qemu/qemu_domain_address.h | 3 --- 3 files changed, 11 insertions(+), 31 deletions(-) diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_alias.c +++ b/src/qemu/qemu_alias.c @@ -XXX,XX +XXX,XX @@ qemuAssignDeviceDiskAlias(virDomainDef *def, if (!disk->info.alias) { if (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) { if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI) { - controllerModel = qemuDomainFindSCSIControllerModel(def, - &disk->info); + virDomainControllerDef *cont; + + if (!(cont = virDomainDeviceFindSCSIController(def, &disk->info.addr.drive))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("unable to find a SCSI controller for idx=%1$d"), + disk->info.addr.drive.controller); + return -1; + } + + controllerModel = cont->model; + if (controllerModel < 0) return -1; } diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -XXX,XX +XXX,XX @@ qemuDomainSetSCSIControllerModel(const virDomainDef *def, } -/** - * @def: Domain definition - * @info: Domain device info - * - * Using the device info, find the controller related to the - * device by index and use that controller to return the model. - * - * Returns the model if found, -1 if not with an error message set - */ -int -qemuDomainFindSCSIControllerModel(const virDomainDef *def, - virDomainDeviceInfo *info) -{ - virDomainControllerDef *cont; - - if (!(cont = virDomainDeviceFindSCSIController(def, &info->addr.drive))) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("unable to find a SCSI controller for idx=%1$d"), - info->addr.drive.controller); - return -1; - } - - return cont->model; -} - - static int qemuDomainAssignVirtioSerialAddresses(virDomainDef *def) { diff --git a/src/qemu/qemu_domain_address.h b/src/qemu/qemu_domain_address.h index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain_address.h +++ b/src/qemu/qemu_domain_address.h @@ -XXX,XX +XXX,XX @@ int qemuDomainSetSCSIControllerModel(const virDomainDef *def, virDomainControllerDef *cont, virQEMUCaps *qemuCaps); -int qemuDomainFindSCSIControllerModel(const virDomainDef *def, - virDomainDeviceInfo *info); - int qemuDomainAssignAddresses(virDomainDef *def, virQEMUCaps *qemuCaps, virQEMUDriver *driver, -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
It only has a single caller. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 4 +++- src/qemu/qemu_domain_address.c | 25 ------------------------- src/qemu/qemu_domain_address.h | 4 ---- 3 files changed, 3 insertions(+), 30 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, switch (cont->type) { case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: /* Set the default SCSI controller model if not already set */ - if (qemuDomainSetSCSIControllerModel(def, cont, qemuCaps) < 0) + cont->model = qemuDomainGetSCSIControllerModel(def, cont, qemuCaps); + + if (cont->model < 0) return -1; break; diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -XXX,XX +XXX,XX @@ qemuDomainGetSCSIControllerModel(const virDomainDef *def, } -/** - * @def: Domain definition - * @cont: Domain controller def - * @qemuCaps: qemu capabilities - * - * Set the controller model based on the existing value and the - * capabilities if possible. - * - * Returns 0 on success, -1 on failure with error set. - */ -int -qemuDomainSetSCSIControllerModel(const virDomainDef *def, - virDomainControllerDef *cont, - virQEMUCaps *qemuCaps) -{ - int model = qemuDomainGetSCSIControllerModel(def, cont, qemuCaps); - - if (model < 0) - return -1; - - cont->model = model; - return 0; -} - - static int qemuDomainAssignVirtioSerialAddresses(virDomainDef *def) { diff --git a/src/qemu/qemu_domain_address.h b/src/qemu/qemu_domain_address.h index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain_address.h +++ b/src/qemu/qemu_domain_address.h @@ -XXX,XX +XXX,XX @@ int qemuDomainGetSCSIControllerModel(const virDomainDef *def, const virDomainControllerDef *cont, virQEMUCaps *qemuCaps); -int qemuDomainSetSCSIControllerModel(const virDomainDef *def, - virDomainControllerDef *cont, - virQEMUCaps *qemuCaps); - int qemuDomainAssignAddresses(virDomainDef *def, virQEMUCaps *qemuCaps, virQEMUDriver *driver, -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
qemuDomainGetSCSIControllerModel() can return -1 on failure, but qemuDomainFindOrCreateSCSIDiskController() didn't implement any handling for this scenario. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_hotplug.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -XXX,XX +XXX,XX @@ qemuDomainFindOrCreateSCSIDiskController(virDomainObj *vm, else cont->model = model; + if (cont->model < 0) { + VIR_FREE(cont); + return NULL; + } + VIR_INFO("No SCSI controller present, hotplugging one model=%s", virDomainControllerModelSCSITypeToString(cont->model)); if (qemuDomainAttachControllerDevice(vm, cont) < 0) { -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Not a massive difference, but it will make upcoming changes nicer. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_hotplug.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -XXX,XX +XXX,XX @@ qemuDomainFindOrCreateSCSIDiskController(virDomainObj *vm, cont = g_new0(virDomainControllerDef, 1); cont->type = VIR_DOMAIN_CONTROLLER_TYPE_SCSI; cont->idx = controller; - if (model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DEFAULT) - cont->model = qemuDomainGetSCSIControllerModel(vm->def, cont, priv->qemuCaps); - else - cont->model = model; + cont->model = model; + + cont->model = qemuDomainGetSCSIControllerModel(vm->def, cont, priv->qemuCaps); if (cont->model < 0) { VIR_FREE(cont); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
It has nothing to do with assigning addresses, so it makes more sense to have it in qemu_domain. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 37 ++++++++++++++++++++++++++++++++++ src/qemu/qemu_domain.h | 3 +++ src/qemu/qemu_domain_address.c | 36 --------------------------------- src/qemu/qemu_domain_address.h | 4 ---- 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultAudioBackend(virQEMUDriver *driver, return 0; } + +/** + * @def: Domain definition + * @cont: Domain controller def + * @qemuCaps: qemu capabilities + * + * If the controller model is already defined, return it immediately; + * otherwise, based on the @qemuCaps return a default model value. + * + * Returns model on success, -1 on failure with error set. + */ +int +qemuDomainGetSCSIControllerModel(const virDomainDef *def, + const virDomainControllerDef *cont, + virQEMUCaps *qemuCaps) +{ + if (cont->model > 0) + return cont->model; + + if (qemuDomainIsPSeries(def)) + return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI; + if (ARCH_IS_S390(def->os.arch)) + return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) + return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI)) + return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; + if (qemuDomainHasBuiltinESP(def)) + return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_NCR53C90; + + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unable to determine model for SCSI controller idx=%1$d"), + cont->idx); + return -1; +} + + static int qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, virDomainDef *def, diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -XXX,XX +XXX,XX @@ bool qemuDomainHasBuiltinESP(const virDomainDef *def); bool qemuDomainNeedsFDC(const virDomainDef *def); bool qemuDomainSupportsPCI(const virDomainDef *def); bool qemuDomainSupportsPCIMultibus(const virDomainDef *def); +int qemuDomainGetSCSIControllerModel(const virDomainDef *def, + const virDomainControllerDef *cont, + virQEMUCaps *qemuCaps); void qemuDomainUpdateCurrentMemorySize(virDomainObj *vm); diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -XXX,XX +XXX,XX @@ VIR_LOG_INIT("qemu.qemu_domain_address"); #define VIO_ADDR_TPM 0x4000ul -/** - * @def: Domain definition - * @cont: Domain controller def - * @qemuCaps: qemu capabilities - * - * If the controller model is already defined, return it immediately; - * otherwise, based on the @qemuCaps return a default model value. - * - * Returns model on success, -1 on failure with error set. - */ -int -qemuDomainGetSCSIControllerModel(const virDomainDef *def, - const virDomainControllerDef *cont, - virQEMUCaps *qemuCaps) -{ - if (cont->model > 0) - return cont->model; - - if (qemuDomainIsPSeries(def)) - return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI; - if (ARCH_IS_S390(def->os.arch)) - return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) - return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC; - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI)) - return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; - if (qemuDomainHasBuiltinESP(def)) - return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_NCR53C90; - - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unable to determine model for SCSI controller idx=%1$d"), - cont->idx); - return -1; -} - - static int qemuDomainAssignVirtioSerialAddresses(virDomainDef *def) { diff --git a/src/qemu/qemu_domain_address.h b/src/qemu/qemu_domain_address.h index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain_address.h +++ b/src/qemu/qemu_domain_address.h @@ -XXX,XX +XXX,XX @@ #include "qemu_conf.h" #include "qemu_capabilities.h" -int qemuDomainGetSCSIControllerModel(const virDomainDef *def, - const virDomainControllerDef *cont, - virQEMUCaps *qemuCaps); - int qemuDomainAssignAddresses(virDomainDef *def, virQEMUCaps *qemuCaps, virQEMUDriver *driver, -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
The function is modified to be stateless, which is more consistent with existing helpers that deal with figuring out default models for devices, and its name needs to change accordingly. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 21 +++++++++++---------- src/qemu/qemu_domain.h | 6 +++--- src/qemu/qemu_hotplug.c | 5 +++-- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultAudioBackend(virQEMUDriver *driver, /** + * qemuDomainDefaultSCSIControllerModel: * @def: Domain definition * @cont: Domain controller def * @qemuCaps: qemu capabilities * - * If the controller model is already defined, return it immediately; - * otherwise, based on the @qemuCaps return a default model value. + * Decides the preferred model for a SCSI controller that it to be + * added to @def. The choice might be based on various factors, + * including the architecture, machine type and what devices are + * available according to @qemuCaps. * * Returns model on success, -1 on failure with error set. */ int -qemuDomainGetSCSIControllerModel(const virDomainDef *def, - const virDomainControllerDef *cont, - virQEMUCaps *qemuCaps) +qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, + const virDomainControllerDef *cont, + virQEMUCaps *qemuCaps) { - if (cont->model > 0) - return cont->model; - if (qemuDomainIsPSeries(def)) return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI; if (ARCH_IS_S390(def->os.arch)) @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, switch (cont->type) { case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: /* Set the default SCSI controller model if not already set */ - cont->model = qemuDomainGetSCSIControllerModel(def, cont, qemuCaps); + if (cont->model <= 0) + cont->model = qemuDomainDefaultSCSIControllerModel(def, cont, qemuCaps); - if (cont->model < 0) + if (cont->model <= 0) return -1; break; diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -XXX,XX +XXX,XX @@ bool qemuDomainHasBuiltinESP(const virDomainDef *def); bool qemuDomainNeedsFDC(const virDomainDef *def); bool qemuDomainSupportsPCI(const virDomainDef *def); bool qemuDomainSupportsPCIMultibus(const virDomainDef *def); -int qemuDomainGetSCSIControllerModel(const virDomainDef *def, - const virDomainControllerDef *cont, - virQEMUCaps *qemuCaps); +int qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, + const virDomainControllerDef *cont, + virQEMUCaps *qemuCaps); void qemuDomainUpdateCurrentMemorySize(virDomainObj *vm); diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -XXX,XX +XXX,XX @@ qemuDomainFindOrCreateSCSIDiskController(virDomainObj *vm, cont->idx = controller; cont->model = model; - cont->model = qemuDomainGetSCSIControllerModel(vm->def, cont, priv->qemuCaps); + if (cont->model <= 0) + cont->model = qemuDomainDefaultSCSIControllerModel(vm->def, cont, priv->qemuCaps); - if (cont->model < 0) { + if (cont->model <= 0) { VIR_FREE(cont); return NULL; } -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, const virDomainControllerDef *cont, virQEMUCaps *qemuCaps) { + /* For machine types with built-in SCSI controllers, the choice + * of model is obvious */ + if (qemuDomainHasBuiltinESP(def)) + return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_NCR53C90; + + /* pSeries has its own special default */ if (qemuDomainIsPSeries(def)) return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI; + + /* Most new architectures should ideally use virtio */ if (ARCH_IS_S390(def->os.arch)) return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; + + /* If there is no preference, base the choice on device + * availability. lsilogic is favored for backwards compatibility + * reasons */ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC; if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI)) return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; - if (qemuDomainHasBuiltinESP(def)) - return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_NCR53C90; virReportError(VIR_ERR_INTERNAL_ERROR, _("Unable to determine model for SCSI controller idx=%1$d"), -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Extract the logic from qemuDomainControllerDefPostParse(). The code is mostly unchanged, but there's a subtle difference: the piix3-uhci has been moved from the top of the chunk to the bottom. This is because the original code set cont->model directly, which made it okay to start with a suboptimal default and subsequently overwrite it with a better one; now that we return the selected value instead, we need to make sure that we only ever consider piix3-uhci if everything else has failed. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 100 +++++++++++++++++++++++------------------ 1 file changed, 56 insertions(+), 44 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, } +static int +qemuDomainDefaultUSBControllerModel(const virDomainDef *def, + const virDomainControllerDef *cont, + virQEMUCaps *qemuCaps, + unsigned int parseFlags) +{ + /* Pick a suitable default model for the USB controller if none + * has been selected by the user and we have the qemuCaps for + * figuring out which controllers are supported. + * + * We rely on device availability instead of setting the model + * unconditionally because, for some machine types, there's a + * chance we will get away with using the legacy USB controller + * when the relevant device is not available. + * + * See qemuBuildControllersCommandLine() */ + + if (ARCH_IS_S390(def->os.arch)) { + if (cont->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { + /* set the default USB model to none for s390 unless an + * address is found */ + return VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE; + } + } else if (ARCH_IS_PPC64(def->os.arch)) { + /* To not break migration we need to set default USB controller + * for ppc64 to pci-ohci if we cannot change ABI of the VM. + * The nec-usb-xhci or qemu-xhci controller is used as default + * only for newly defined domains or devices. */ + if ((parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) { + return VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; + } else if ((parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) { + return VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; + } else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI)) { + return VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI; + } else { + /* Explicitly fallback to legacy USB controller for PPC64. */ + return -1; + } + } else if (def->os.arch == VIR_ARCH_AARCH64) { + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) + return VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; + else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) + return VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; + } + + /* Default USB controller is piix3-uhci if available. */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI)) + return VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI; + + return -1; +} + + static int qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, virDomainDef *def, @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, case VIR_DOMAIN_CONTROLLER_TYPE_USB: if (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT && qemuCaps) { - /* Pick a suitable default model for the USB controller if none - * has been selected by the user and we have the qemuCaps for - * figuring out which controllers are supported. - * - * We rely on device availability instead of setting the model - * unconditionally because, for some machine types, there's a - * chance we will get away with using the legacy USB controller - * when the relevant device is not available. - * - * See qemuBuildControllersCommandLine() */ - - /* Default USB controller is piix3-uhci if available. */ - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI)) - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI; - - if (ARCH_IS_S390(def->os.arch)) { - if (cont->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { - /* set the default USB model to none for s390 unless an - * address is found */ - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE; - } - } else if (ARCH_IS_PPC64(def->os.arch)) { - /* To not break migration we need to set default USB controller - * for ppc64 to pci-ohci if we cannot change ABI of the VM. - * The nec-usb-xhci or qemu-xhci controller is used as default - * only for newly defined domains or devices. */ - if ((parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) && - virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) { - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; - } else if ((parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) && - virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) { - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; - } else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI)) { - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI; - } else { - /* Explicitly fallback to legacy USB controller for PPC64. */ - cont->model = -1; - } - } else if (def->os.arch == VIR_ARCH_AARCH64) { - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; - else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; - } + cont->model = qemuDomainDefaultUSBControllerModel(def, cont, qemuCaps, parseFlags); } /* forbid usb model 'qusb1' and 'qusb2' in this kind of hyperviosr */ if (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB1 || -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
In addition to the code in qemuDomainControllerDefPostParse(), which we have just factored into its own function, we also have some code in qemuDomainDefAddDefaultDevices() that deals with choosing the model for a USB controller, specifically for q35 guests. Integrate it into the newly-created function. Since we want slightly different behaviors depending on whether the USB controller that we're working on is the one that we try to automatically add for certain new guests (addDefaultUSB), introduce a new parameter to the function and a new possible return value. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 74 ++++++++++++++++++++++++++++++++---------- 1 file changed, 56 insertions(+), 18 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, } +/** + * qemuDomainDefaultUSBControllerModel: + * @def: domain definition + * @cont: controller definition, or NULL + * @autoAdded: whether this controller is being automatically added + * @qemuCaps: QEMU capabilities, or NULL + * @parseFlags: parse flags + * + * Choose a reasonable model to use for a USB controller where a + * specific one hasn't been provided by the user. + * + * The choice is based on a number of factors, including the guest's + * architecture and machine type. @qemuCaps, if provided, might be + * taken into consideration too. + * + * @autoAdded should be true is this is a controller that libvirt is + * trying to automatically add on domain creation for the user's + * convenience: in that case, the function might decide to simply not + * add the controller instead of reporting a failure. + * + * Returns: >=0 (a virDomainControllerModelUSB value) on success, + * -1 on error, and + * -2 if no suitable model could be found but it's okay to + * just skip the controller altogether. + */ static int qemuDomainDefaultUSBControllerModel(const virDomainDef *def, const virDomainControllerDef *cont, + bool autoAdded, virQEMUCaps *qemuCaps, unsigned int parseFlags) { @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultUSBControllerModel(const virDomainDef *def, * See qemuBuildControllersCommandLine() */ if (ARCH_IS_S390(def->os.arch)) { - if (cont->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { + if (cont && cont->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { /* set the default USB model to none for s390 unless an * address is found */ return VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE; @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultUSBControllerModel(const virDomainDef *def, return VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; } + if (ARCH_IS_X86(def->os.arch)) { + if (qemuDomainIsQ35(def) && autoAdded) { + /* Prefer adding a USB3 controller if supported, fall back + * to USB2 if there is no USB3 available, and if that's + * unavailable don't add anything. + */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) + return VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) + return VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_ICH9_USB_EHCI1)) + return VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_EHCI1; + return -2; + } + } + /* Default USB controller is piix3-uhci if available. */ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI)) return VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI; @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultUSBControllerModel(const virDomainDef *def, static int qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, virDomainDef *def, - virQEMUCaps *qemuCaps) + virQEMUCaps *qemuCaps, + unsigned int parseFlags) { bool addDefaultUSB = false; int usbModel = -1; /* "default for machinetype" */ @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, addPCIeRoot = true; addImplicitSATA = true; addITCOWatchdog = true; - - /* Prefer adding a USB3 controller if supported, fall back - * to USB2 if there is no USB3 available, and if that's - * unavailable don't add anything. - */ - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) - usbModel = VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; - else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) - usbModel = VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; - else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_ICH9_USB_EHCI1)) - usbModel = VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_EHCI1; - else - addDefaultUSB = false; - break; } if (qemuDomainIsI440FX(def)) addPCIRoot = true; @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, break; } + if (addDefaultUSB) { + usbModel = qemuDomainDefaultUSBControllerModel(def, NULL, true, qemuCaps, parseFlags); + /* A return value of -2 indicates that no reasonable default + * could be figured out, and that we should handle that by + * not adding the USB controller */ + if (usbModel == -2) + addDefaultUSB = false; + } + if (addDefaultUSB && virDomainControllerFind(def, VIR_DOMAIN_CONTROLLER_TYPE_USB, 0) < 0 && virDomainDefAddUSBController(def, 0, usbModel) < 0) @@ -XXX,XX +XXX,XX @@ qemuDomainDefPostParse(virDomainDef *def, if (qemuDomainDefBootPostParse(def, driver, parseFlags) < 0) return -1; - if (qemuDomainDefAddDefaultDevices(driver, def, qemuCaps) < 0) + if (qemuDomainDefAddDefaultDevices(driver, def, qemuCaps, parseFlags) < 0) return -1; if (qemuDomainDefSetDefaultCPU(def, driver->hostarch, qemuCaps) < 0) @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, case VIR_DOMAIN_CONTROLLER_TYPE_USB: if (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT && qemuCaps) { - cont->model = qemuDomainDefaultUSBControllerModel(def, cont, qemuCaps, parseFlags); + cont->model = qemuDomainDefaultUSBControllerModel(def, cont, false, qemuCaps, parseFlags); } /* forbid usb model 'qusb1' and 'qusb2' in this kind of hyperviosr */ if (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB1 || -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Mostly reduce the number of 'else if' and improve comments. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 62 ++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultUSBControllerModel(const virDomainDef *def, virQEMUCaps *qemuCaps, unsigned int parseFlags) { - /* Pick a suitable default model for the USB controller if none - * has been selected by the user and we have the qemuCaps for - * figuring out which controllers are supported. - * - * We rely on device availability instead of setting the model + bool abiUpdate = !!(parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE); + + /* We rely on device availability instead of setting the model * unconditionally because, for some machine types, there's a * chance we will get away with using the legacy USB controller * when the relevant device is not available. @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultUSBControllerModel(const virDomainDef *def, * address is found */ return VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE; } - } else if (ARCH_IS_PPC64(def->os.arch)) { - /* To not break migration we need to set default USB controller - * for ppc64 to pci-ohci if we cannot change ABI of the VM. - * The nec-usb-xhci or qemu-xhci controller is used as default - * only for newly defined domains or devices. */ - if ((parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) && - virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) { + } + + if (ARCH_IS_PPC64(def->os.arch)) { + /* In order not to break migration compatibility, we need to + * set default USB controller to pci-ohci (USB2) for existing + * guests. New guests can use USB3 instead */ + if (abiUpdate && virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) return VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; - } else if ((parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) && - virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) { + if (abiUpdate && virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) return VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; - } else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI)) { + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI)) return VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI; - } else { - /* Explicitly fallback to legacy USB controller for PPC64. */ - return -1; - } - } else if (def->os.arch == VIR_ARCH_AARCH64) { + + /* For ppc64 specifically, returning -1 here will result in + * an attempt to use the legacy USB controller rather than an + * outright failure */ + return -1; + } + + if (def->os.arch == VIR_ARCH_AARCH64) { + /* Prefer USB3 */ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) return VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; - else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) return VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; + + /* We should probably return -1 here and avoid the + * possibility of falling back to piix3-uhci (USB1), but + * historically we haven't done that and starting now might + * cause backwards compatibility issues */ } if (ARCH_IS_X86(def->os.arch)) { if (qemuDomainIsQ35(def) && autoAdded) { - /* Prefer adding a USB3 controller if supported, fall back - * to USB2 if there is no USB3 available, and if that's - * unavailable don't add anything. - */ + /* Prefer USB3 */ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) return VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) return VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; + + /* Fall back to USB2 */ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_ICH9_USB_EHCI1)) return VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_EHCI1; + + /* If no suitable device is available, simply avoid + * adding the controller */ return -2; } } - /* Default USB controller is piix3-uhci if available. */ + /* piix3-uhci (USB1) is the last ditch effort before giving up */ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI)) return VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI; + /* No suitable model could be found. This will return in either + * an error or the use of the legacy USB controller */ return -1; } -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
This function is tightly coupled with qemuDomainDefaultUSBControllerModel(), as whether or not the legacy '-usb' option is going to be used depends on the return value of both. As such, it makes sense for them to be close to one another. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_command.c | 16 ++-------------- src/qemu/qemu_domain.c | 12 ++++++++++++ src/qemu/qemu_domain.h | 1 + 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -XXX,XX +XXX,XX @@ qemuBuildControllerDevProps(const virDomainDef *domainDef, } -static bool -qemuBuildDomainForbidLegacyUSBController(const virDomainDef *def) -{ - if (qemuDomainIsQ35(def) || - qemuDomainIsARMVirt(def) || - qemuDomainIsRISCVVirt(def)) - return true; - - return false; -} - - static int qemuBuildLegacyUSBControllerCommandLine(virCommand *cmd, const virDomainDef *def) @@ -XXX,XX +XXX,XX @@ qemuBuildLegacyUSBControllerCommandLine(virCommand *cmd, } if (nusb == 0 && - !qemuBuildDomainForbidLegacyUSBController(def) && + !qemuDomainForbidLegacyUSBController(def) && !ARCH_IS_S390(def->os.arch)) { /* We haven't added any USB controller yet, but we haven't been asked * not to add one either. Add a legacy USB controller, unless we're @@ -XXX,XX +XXX,XX @@ qemuBuildControllersByTypeCommandLine(virCommand *cmd, if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_USB && cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT && - !qemuBuildDomainForbidLegacyUSBController(def)) { + !qemuDomainForbidLegacyUSBController(def)) { /* An appropriate default USB controller model should already * have been selected in qemuDomainDeviceDefPostParse(); if diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultUSBControllerModel(const virDomainDef *def, } +bool +qemuDomainForbidLegacyUSBController(const virDomainDef *def) +{ + if (qemuDomainIsQ35(def) || + qemuDomainIsARMVirt(def) || + qemuDomainIsRISCVVirt(def)) + return true; + + return false; +} + + static int qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, virDomainDef *def, diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -XXX,XX +XXX,XX @@ bool qemuDomainSupportsPCIMultibus(const virDomainDef *def); int qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, const virDomainControllerDef *cont, virQEMUCaps *qemuCaps); +bool qemuDomainForbidLegacyUSBController(const virDomainDef *def); void qemuDomainUpdateCurrentMemorySize(virDomainObj *vm); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Currently, we have special handling for USB controllers of s390x guests hardcoded into the command line generator. This is not great from a layering point of view and, given the complex interactions between the various parts, just makes things very confusing. In order to make things easier to reason about and centralize decision making, increase the number of possible return values. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_command.c | 5 ++--- src/qemu/qemu_domain.c | 28 +++++++++++++++++++++++++--- src/qemu/qemu_domain.h | 2 +- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -XXX,XX +XXX,XX @@ qemuBuildLegacyUSBControllerCommandLine(virCommand *cmd, } if (nusb == 0 && - !qemuDomainForbidLegacyUSBController(def) && - !ARCH_IS_S390(def->os.arch)) { + qemuDomainForbidLegacyUSBController(def) == 0) { /* We haven't added any USB controller yet, but we haven't been asked * not to add one either. Add a legacy USB controller, unless we're * creating a kind of guest we want to keep legacy-free */ @@ -XXX,XX +XXX,XX @@ qemuBuildControllersByTypeCommandLine(virCommand *cmd, if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_USB && cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT && - !qemuDomainForbidLegacyUSBController(def)) { + qemuDomainForbidLegacyUSBController(def) <= 0) { /* An appropriate default USB controller model should already * have been selected in qemuDomainDeviceDefPostParse(); if diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultUSBControllerModel(const virDomainDef *def, } -bool +/** + * qemuDomainForbidLegacyUSBController: + * @def: domain definition + * + * Tells the command line generator whether it's acceptable to fall + * back to the legacy '-usb' option when a specific model hasn't been + * provided or automatically selected for the USB controller. + * + * Returns: 0 if '-usb' can be used, + * >0 if '-usb' should be avoided, and + * <0 if '-usb' should't be used but the fact that we have + * reached the point where that was the only remaining + * option shouldn't be considered an overall failure. + */ +int qemuDomainForbidLegacyUSBController(const virDomainDef *def) { + /* Modern guests should never use the legacy controller */ if (qemuDomainIsQ35(def) || qemuDomainIsARMVirt(def) || qemuDomainIsRISCVVirt(def)) - return true; + return 1; - return false; + /* In the case of s390x, we also never want to use the legacy + * controller but it's okay if that means that we end up creating + * no USB controller at all */ + if (ARCH_IS_S390(def->os.arch)) + return -1; + + /* In all other cases, using the legacy controller is okay */ + return 0; } diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -XXX,XX +XXX,XX @@ bool qemuDomainSupportsPCIMultibus(const virDomainDef *def); int qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, const virDomainControllerDef *cont, virQEMUCaps *qemuCaps); -bool qemuDomainForbidLegacyUSBController(const virDomainDef *def); +int qemuDomainForbidLegacyUSBController(const virDomainDef *def); void qemuDomainUpdateCurrentMemorySize(virDomainObj *vm); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Factor out the existing code. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainForbidLegacyUSBController(const virDomainDef *def) } +static int +qemuDomainDefaultSerialType(const virDomainDef *def) +{ + if (ARCH_IS_X86(def->os.arch)) + return VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA; + + if (qemuDomainIsPSeries(def)) + return VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO; + + if (ARCH_IS_S390(def->os.arch)) + return VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SCLP; + + if (qemuDomainIsARMVirt(def) || + qemuDomainIsRISCVVirt(def)) + return VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SYSTEM; + + return VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_NONE; +} + + static int qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, virDomainDef *def, @@ -XXX,XX +XXX,XX @@ qemuDomainChrDefPostParse(virDomainChrDef *chr, /* Set the default serial type */ if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL && chr->targetType == VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_NONE) { - if (ARCH_IS_X86(def->os.arch)) { - chr->targetType = VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA; - } else if (qemuDomainIsPSeries(def)) { - chr->targetType = VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO; - } else if (qemuDomainIsARMVirt(def) || qemuDomainIsRISCVVirt(def)) { - chr->targetType = VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SYSTEM; - } else if (ARCH_IS_S390(def->os.arch)) { - chr->targetType = VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SCLP; - } + chr->targetType = qemuDomainDefaultSerialType(def); } /* Set the default target model */ -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Factor out the existing code. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 66 ++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultSerialType(const virDomainDef *def) } +static int +qemuDomainDefaultSerialModel(const virDomainDef *def, + const virDomainChrDef *chr) +{ + switch ((virDomainChrSerialTargetType)chr->targetType) { + case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA: + return VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_SERIAL; + case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB: + return VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_USB_SERIAL; + case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_PCI: + return VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PCI_SERIAL; + case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO: + return VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SPAPR_VTY; + case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SYSTEM: + if (qemuDomainIsARMVirt(def)) { + return VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PL011; + } else if (qemuDomainIsRISCVVirt(def)) { + return VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_16550A; + } + break; + case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SCLP: + return VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SCLPCONSOLE; + case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA_DEBUG: + return VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_DEBUGCON; + case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_NONE: + case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_LAST: + /* Nothing to do */ + break; + } + + return VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_NONE; +} + + static int qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, virDomainDef *def, @@ -XXX,XX +XXX,XX @@ qemuDomainChrDefPostParse(virDomainChrDef *chr, /* Set the default target model */ if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL && chr->targetModel == VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_NONE) { - switch ((virDomainChrSerialTargetType)chr->targetType) { - case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA: - chr->targetModel = VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_SERIAL; - break; - case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB: - chr->targetModel = VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_USB_SERIAL; - break; - case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_PCI: - chr->targetModel = VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PCI_SERIAL; - break; - case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO: - chr->targetModel = VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SPAPR_VTY; - break; - case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SYSTEM: - if (qemuDomainIsARMVirt(def)) { - chr->targetModel = VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PL011; - } else if (qemuDomainIsRISCVVirt(def)) { - chr->targetModel = VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_16550A; - } - break; - case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SCLP: - chr->targetModel = VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SCLPCONSOLE; - break; - case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA_DEBUG: - chr->targetModel = VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_DEBUGCON; - break; - case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_NONE: - case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_LAST: - /* Nothing to do */ - break; - } + chr->targetModel = qemuDomainDefaultSerialModel(def, chr); } /* clear auto generated unix socket path for inactive definitions */ -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Factor out the existing code. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultSerialModel(const virDomainDef *def, } +static int +qemuDomainDefaultPanicModel(const virDomainDef *def) +{ + if (qemuDomainIsPSeries(def)) + return VIR_DOMAIN_PANIC_MODEL_PSERIES; + + if (ARCH_IS_S390(def->os.arch)) + return VIR_DOMAIN_PANIC_MODEL_S390; + + return VIR_DOMAIN_PANIC_MODEL_ISA; +} + + static int qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, virDomainDef *def, @@ -XXX,XX +XXX,XX @@ static int qemuDomainDevicePanicDefPostParse(virDomainPanicDef *panic, const virDomainDef *def) { - if (panic->model == VIR_DOMAIN_PANIC_MODEL_DEFAULT) { - if (qemuDomainIsPSeries(def)) - panic->model = VIR_DOMAIN_PANIC_MODEL_PSERIES; - else if (ARCH_IS_S390(def->os.arch)) - panic->model = VIR_DOMAIN_PANIC_MODEL_S390; - else - panic->model = VIR_DOMAIN_PANIC_MODEL_ISA; - } + if (panic->model == VIR_DOMAIN_PANIC_MODEL_DEFAULT) + panic->model = qemuDomainDefaultPanicModel(def); return 0; } -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
qemuDomainDefAddDefaultDevices() contained what is essentialy an open-coded implementation of the helper. Get rid of it. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, if (addPanicDevice) { size_t j; + int defaultPanicModel = qemuDomainDefaultPanicModel(def); + for (j = 0; j < def->npanics; j++) { if (def->panics[j]->model == VIR_DOMAIN_PANIC_MODEL_DEFAULT || - (ARCH_IS_PPC64(def->os.arch) && - def->panics[j]->model == VIR_DOMAIN_PANIC_MODEL_PSERIES) || - (ARCH_IS_S390(def->os.arch) && - def->panics[j]->model == VIR_DOMAIN_PANIC_MODEL_S390)) + def->panics[j]->model == defaultPanicModel) break; } -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Follow the established naming convention for consistency. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDeviceNetDefPostParse(virDomainNetDef *net, static int -qemuDomainDefaultVideoDevice(const virDomainDef *def, - virQEMUCaps *qemuCaps) +qemuDomainDefaultVideoModel(const virDomainDef *def, + virQEMUCaps *qemuCaps) { if (ARCH_IS_PPC64(def->os.arch)) return VIR_DOMAIN_VIDEO_TYPE_VGA; + if (qemuDomainIsARMVirt(def) || qemuDomainIsRISCVVirt(def) || ARCH_IS_S390(def->os.arch)) { return VIR_DOMAIN_VIDEO_TYPE_VIRTIO; } + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_CIRRUS_VGA)) return VIR_DOMAIN_VIDEO_TYPE_CIRRUS; if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VGA)) return VIR_DOMAIN_VIDEO_TYPE_VGA; + return VIR_DOMAIN_VIDEO_TYPE_DEFAULT; } @@ -XXX,XX +XXX,XX @@ qemuDomainDeviceVideoDefPostParse(virDomainVideoDef *video, virQEMUCaps *qemuCaps) { if (video->type == VIR_DOMAIN_VIDEO_TYPE_DEFAULT) - video->type = qemuDomainDefaultVideoDevice(def, qemuCaps); + video->type = qemuDomainDefaultVideoModel(def, qemuCaps); if (video->type == VIR_DOMAIN_VIDEO_TYPE_QXL && !video->vgamem) { -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Most of the functions responsible for choosing architecture and machine specific defaults are already close to one another, with just a couple of strays. Having everything in one place will hopefully make it harder to miss updating any of the functions when new architectures are being introduced. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 151 ++++++++++++++++++++--------------------- 1 file changed, 75 insertions(+), 76 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainForbidLegacyUSBController(const virDomainDef *def) } +/** + * qemuDomainDefaultNetModel: + * @def: domain definition + * @qemuCaps: qemu capabilities + * + * Returns the default network model for a given domain. Note that if @qemuCaps + * is NULL this function may return NULL if the default model depends on the + * capabilities. + */ +static int +qemuDomainDefaultNetModel(const virDomainDef *def, + virQEMUCaps *qemuCaps) +{ + /* When there are no backwards compatibility concerns getting in + * the way, virtio is a good default */ + if (ARCH_IS_S390(def->os.arch) || + qemuDomainIsRISCVVirt(def)) { + return VIR_DOMAIN_NET_MODEL_VIRTIO; + } + + if (ARCH_IS_ARM(def->os.arch)) { + if (STREQ(def->os.machine, "versatilepb")) + return VIR_DOMAIN_NET_MODEL_SMC91C111; + + if (qemuDomainIsARMVirt(def)) + return VIR_DOMAIN_NET_MODEL_VIRTIO; + + /* Incomplete. vexpress (and a few others) use this, but not all + * arm boards */ + return VIR_DOMAIN_NET_MODEL_LAN9118; + } + + /* In all other cases the model depends on the capabilities. If they were + * not provided don't report any default. */ + if (!qemuCaps) + return VIR_DOMAIN_NET_MODEL_UNKNOWN; + + /* Try several network devices in turn; each of these devices is + * less likely be supported out-of-the-box by the guest operating + * system than the previous one */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_RTL8139)) + return VIR_DOMAIN_NET_MODEL_RTL8139; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_E1000)) + return VIR_DOMAIN_NET_MODEL_E1000; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_NET)) + return VIR_DOMAIN_NET_MODEL_VIRTIO; + + /* We've had no luck detecting support for any network device, + * but we have to return something: might as well be rtl8139 */ + return VIR_DOMAIN_NET_MODEL_RTL8139; +} + + +static int +qemuDomainDefaultVideoModel(const virDomainDef *def, + virQEMUCaps *qemuCaps) +{ + if (ARCH_IS_PPC64(def->os.arch)) + return VIR_DOMAIN_VIDEO_TYPE_VGA; + + if (qemuDomainIsARMVirt(def) || + qemuDomainIsRISCVVirt(def) || + ARCH_IS_S390(def->os.arch)) { + return VIR_DOMAIN_VIDEO_TYPE_VIRTIO; + } + + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_CIRRUS_VGA)) + return VIR_DOMAIN_VIDEO_TYPE_CIRRUS; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VGA)) + return VIR_DOMAIN_VIDEO_TYPE_VGA; + + return VIR_DOMAIN_VIDEO_TYPE_DEFAULT; +} + + static int qemuDomainDefaultSerialType(const virDomainDef *def) { @@ -XXX,XX +XXX,XX @@ qemuDomainValidateStorageSource(virStorageSource *src, } -/** - * qemuDomainDefaultNetModel: - * @def: domain definition - * @qemuCaps: qemu capabilities - * - * Returns the default network model for a given domain. Note that if @qemuCaps - * is NULL this function may return NULL if the default model depends on the - * capabilities. - */ -static int -qemuDomainDefaultNetModel(const virDomainDef *def, - virQEMUCaps *qemuCaps) -{ - /* When there are no backwards compatibility concerns getting in - * the way, virtio is a good default */ - if (ARCH_IS_S390(def->os.arch) || - qemuDomainIsRISCVVirt(def)) { - return VIR_DOMAIN_NET_MODEL_VIRTIO; - } - - if (ARCH_IS_ARM(def->os.arch)) { - if (STREQ(def->os.machine, "versatilepb")) - return VIR_DOMAIN_NET_MODEL_SMC91C111; - - if (qemuDomainIsARMVirt(def)) - return VIR_DOMAIN_NET_MODEL_VIRTIO; - - /* Incomplete. vexpress (and a few others) use this, but not all - * arm boards */ - return VIR_DOMAIN_NET_MODEL_LAN9118; - } - - /* In all other cases the model depends on the capabilities. If they were - * not provided don't report any default. */ - if (!qemuCaps) - return VIR_DOMAIN_NET_MODEL_UNKNOWN; - - /* Try several network devices in turn; each of these devices is - * less likely be supported out-of-the-box by the guest operating - * system than the previous one */ - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_RTL8139)) - return VIR_DOMAIN_NET_MODEL_RTL8139; - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_E1000)) - return VIR_DOMAIN_NET_MODEL_E1000; - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_NET)) - return VIR_DOMAIN_NET_MODEL_VIRTIO; - - /* We've had no luck detecting support for any network device, - * but we have to return something: might as well be rtl8139 */ - return VIR_DOMAIN_NET_MODEL_RTL8139; -} - - - static bool qemuDomainChrMatchDefaultPath(const char *prefix, const char *infix, @@ -XXX,XX +XXX,XX @@ qemuDomainDeviceNetDefPostParse(virDomainNetDef *net, } -static int -qemuDomainDefaultVideoModel(const virDomainDef *def, - virQEMUCaps *qemuCaps) -{ - if (ARCH_IS_PPC64(def->os.arch)) - return VIR_DOMAIN_VIDEO_TYPE_VGA; - - if (qemuDomainIsARMVirt(def) || - qemuDomainIsRISCVVirt(def) || - ARCH_IS_S390(def->os.arch)) { - return VIR_DOMAIN_VIDEO_TYPE_VIRTIO; - } - - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_CIRRUS_VGA)) - return VIR_DOMAIN_VIDEO_TYPE_CIRRUS; - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VGA)) - return VIR_DOMAIN_VIDEO_TYPE_VGA; - - return VIR_DOMAIN_VIDEO_TYPE_DEFAULT; -} - - static int qemuDomainDeviceVideoDefPostParse(virDomainVideoDef *video, const virDomainDef *def, -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Other architectures generally don't have an ISA bus, so this default never worked for them. Since it's now possible for a specific model not to be chosen during postparse, something that couldn't happen until now, we need to handle the scenario by presenting the user with a reasonable error message. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 5 ++++- src/qemu/qemu_validate.c | 9 ++++++++- .../aarch64-panic-no-model.aarch64-latest.err | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultPanicModel(const virDomainDef *def) if (ARCH_IS_S390(def->os.arch)) return VIR_DOMAIN_PANIC_MODEL_S390; - return VIR_DOMAIN_PANIC_MODEL_ISA; + if (ARCH_IS_X86(def->os.arch)) + return VIR_DOMAIN_PANIC_MODEL_ISA; + + return VIR_DOMAIN_PANIC_MODEL_DEFAULT; } diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDefPanic(const virDomainDef *def, } break; - /* default model value was changed before in post parse */ + /* If a reasonable default exists for the architecture and + * machine type, it will have been set during postparse. + * Getting there means that we really need the user to + * provide an explicit model name */ case VIR_DOMAIN_PANIC_MODEL_DEFAULT: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("no model provided for panic device")); + return -1; + case VIR_DOMAIN_PANIC_MODEL_LAST: break; } diff --git a/tests/qemuxmlconfdata/aarch64-panic-no-model.aarch64-latest.err b/tests/qemuxmlconfdata/aarch64-panic-no-model.aarch64-latest.err index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/aarch64-panic-no-model.aarch64-latest.err +++ b/tests/qemuxmlconfdata/aarch64-panic-no-model.aarch64-latest.err @@ -1 +1 @@ -unsupported configuration: the QEMU binary does not support the ISA panic device +unsupported configuration: no model provided for panic device -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
The idea of adding devices such as USB controllers or memory balloons by default comes from attempting to match QEMU's own defaults at a time when x86 was the only game in town. The unfortunate consequence of this is that, if the user does NOT want the device in question to be present, they have to create a special XML element with model=none to stop libvirt. This is counter-intuitive. For architectures for which we've added support more recently, such as aarch64, we've generally chosen to do the sensible thing and create very minimal guests by default. The user is of course still able to ask for additional hardware if they so desire. When adding RISC-V support, we accidentally forgot to skip the creation of the default memory balloon. Address that oversight. This is technically a breaking change, but it's fairly safe to apply it because: * it doesn't affect existing guests; * virt-manager will automatically add the memballoon device by default anyway; * RISC-V is still not widely used. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 1 - .../riscv64-virt-minimal.riscv64-latest.args | 3 --- .../riscv64-virt-minimal.riscv64-latest.xml | 13 ------------- 3 files changed, 17 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, case VIR_ARCH_RISCV32: case VIR_ARCH_RISCV64: - addDefaultMemballoon = true; if (qemuDomainIsRISCVVirt(def)) addPCIeRoot = true; break; diff --git a/tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.args b/tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.args index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.args +++ b/tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.args @@ -XXX,XX +XXX,XX @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ -rtc base=utc \ -no-shutdown \ -boot strict=on \ --device '{"driver":"pcie-root-port","port":8,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x1"}' \ --device '{"driver":"pcie-root-port","port":9,"chassis":2,"id":"pci.2","bus":"pcie.0","addr":"0x1.0x1"}' \ -audiodev '{"id":"audio1","driver":"none"}' \ --device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.1","addr":"0x0"}' \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ -msg timestamp=on diff --git a/tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.xml b/tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.xml +++ b/tests/qemuxmlconfdata/riscv64-virt-minimal.riscv64-latest.xml @@ -XXX,XX +XXX,XX @@ <devices> <emulator>/usr/bin/qemu-system-riscv64</emulator> <controller type='pci' index='0' model='pcie-root'/> - <controller type='pci' index='1' model='pcie-root-port'> - <model name='pcie-root-port'/> - <target chassis='1' port='0x8'/> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/> - </controller> - <controller type='pci' index='2' model='pcie-root-port'> - <model name='pcie-root-port'/> - <target chassis='2' port='0x9'/> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> - </controller> <audio id='1' type='none'/> - <memballoon model='virtio'> - <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> - </memballoon> </devices> </domain> -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Currently we fall back to the x86-derived default of piix3-uhci, which is a USB1 controller that's not virtualization-friendly and overall a terrible choice for a modern architecture. The fact that we didn't choose a better default when RISC-V support was introduced was an oversight which is now addressed. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 9 +++++++ ...64-virt-default-models.riscv64-latest.args | 11 ++++---- ...v64-virt-default-models.riscv64-latest.xml | 25 +++++++++++-------- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultUSBControllerModel(const virDomainDef *def, } } + if (ARCH_IS_RISCV(def->os.arch)) { + if (qemuDomainIsRISCVVirt(def)) { + /* USB3 only, no fallback */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) + return VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; + return -1; + } + } + /* piix3-uhci (USB1) is the last ditch effort before giving up */ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI)) return VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI; diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args @@ -XXX,XX +XXX,XX @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ -boot strict=on \ -device '{"driver":"pcie-root-port","port":8,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x1"}' \ -device '{"driver":"pcie-root-port","port":9,"chassis":2,"id":"pci.2","bus":"pcie.0","addr":"0x1.0x1"}' \ --device '{"driver":"pcie-pci-bridge","id":"pci.3","bus":"pci.1","addr":"0x0"}' \ --device '{"driver":"pcie-root-port","port":10,"chassis":4,"id":"pci.4","bus":"pcie.0","addr":"0x1.0x2"}' \ +-device '{"driver":"pcie-root-port","port":10,"chassis":3,"id":"pci.3","bus":"pcie.0","addr":"0x1.0x2"}' \ +-device '{"driver":"pcie-pci-bridge","id":"pci.4","bus":"pci.1","addr":"0x0"}' \ -device '{"driver":"pcie-root-port","port":11,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x1.0x3"}' \ --device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.3","addr":"0x1"}' \ --device '{"driver":"lsi","id":"scsi0","bus":"pci.3","addr":"0x2"}' \ +-device '{"driver":"pcie-root-port","port":12,"chassis":6,"id":"pci.6","bus":"pcie.0","addr":"0x1.0x4"}' \ +-device '{"driver":"qemu-xhci","id":"usb","bus":"pci.3","addr":"0x0"}' \ +-device '{"driver":"lsi","id":"scsi0","bus":"pci.4","addr":"0x1"}' \ -netdev '{"type":"user","id":"hostnet0"}' \ -device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","bus":"pci.2","addr":"0x0"}' \ -chardev pty,id=charserial0 \ -serial chardev:charserial0 \ -audiodev '{"id":"audio1","driver":"none"}' \ --device '{"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pci.4","addr":"0x0"}' \ +-device '{"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pci.5","addr":"0x0"}' \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ -msg timestamp=on diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml @@ -XXX,XX +XXX,XX @@ <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu-system-riscv64</emulator> - <controller type='usb' index='0' model='piix3-uhci'> - <address type='pci' domain='0x0000' bus='0x03' slot='0x01' function='0x0'/> + <controller type='usb' index='0' model='qemu-xhci'> + <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> </controller> <controller type='scsi' index='0' model='lsilogic'> - <address type='pci' domain='0x0000' bus='0x03' slot='0x02' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x04' slot='0x01' function='0x0'/> </controller> <controller type='pci' index='0' model='pcie-root'/> <controller type='pci' index='1' model='pcie-root-port'> @@ -XXX,XX +XXX,XX @@ <target chassis='2' port='0x9'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> - <controller type='pci' index='3' model='pcie-to-pci-bridge'> - <model name='pcie-pci-bridge'/> - <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> - </controller> - <controller type='pci' index='4' model='pcie-root-port'> + <controller type='pci' index='3' model='pcie-root-port'> <model name='pcie-root-port'/> - <target chassis='4' port='0xa'/> + <target chassis='3' port='0xa'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> + <controller type='pci' index='4' model='pcie-to-pci-bridge'> + <model name='pcie-pci-bridge'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> + </controller> <controller type='pci' index='5' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='5' port='0xb'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/> </controller> + <controller type='pci' index='6' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='6' port='0xc'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/> + </controller> <interface type='user'> <mac address='52:54:00:09:a4:37'/> <model type='virtio'/> @@ -XXX,XX +XXX,XX @@ <audio id='1' type='none'/> <video> <model type='virtio' heads='1' primary='yes'/> - <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> </video> <memballoon model='none'/> </devices> -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Just like piix3-uhci for USB, the choice of lsilogic for SCSI was dictated entirely by that being the default for legacy x86 guests. Use virtio-scsi instead. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 3 ++- ...64-virt-default-models.riscv64-latest.args | 13 +++++------ ...v64-virt-default-models.riscv64-latest.xml | 22 ++++++++----------- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI; /* Most new architectures should ideally use virtio */ - if (ARCH_IS_S390(def->os.arch)) + if (ARCH_IS_S390(def->os.arch) || + qemuDomainIsRISCVVirt(def)) return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; /* If there is no preference, base the choice on device diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args @@ -XXX,XX +XXX,XX @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ -device '{"driver":"pcie-root-port","port":8,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x1"}' \ -device '{"driver":"pcie-root-port","port":9,"chassis":2,"id":"pci.2","bus":"pcie.0","addr":"0x1.0x1"}' \ -device '{"driver":"pcie-root-port","port":10,"chassis":3,"id":"pci.3","bus":"pcie.0","addr":"0x1.0x2"}' \ --device '{"driver":"pcie-pci-bridge","id":"pci.4","bus":"pci.1","addr":"0x0"}' \ --device '{"driver":"pcie-root-port","port":11,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x1.0x3"}' \ --device '{"driver":"pcie-root-port","port":12,"chassis":6,"id":"pci.6","bus":"pcie.0","addr":"0x1.0x4"}' \ --device '{"driver":"qemu-xhci","id":"usb","bus":"pci.3","addr":"0x0"}' \ --device '{"driver":"lsi","id":"scsi0","bus":"pci.4","addr":"0x1"}' \ +-device '{"driver":"pcie-root-port","port":11,"chassis":4,"id":"pci.4","bus":"pcie.0","addr":"0x1.0x3"}' \ +-device '{"driver":"pcie-root-port","port":12,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x1.0x4"}' \ +-device '{"driver":"qemu-xhci","id":"usb","bus":"pci.2","addr":"0x0"}' \ +-device '{"driver":"virtio-scsi-pci","id":"scsi0","bus":"pci.3","addr":"0x0"}' \ -netdev '{"type":"user","id":"hostnet0"}' \ --device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","bus":"pci.2","addr":"0x0"}' \ +-device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","bus":"pci.1","addr":"0x0"}' \ -chardev pty,id=charserial0 \ -serial chardev:charserial0 \ -audiodev '{"id":"audio1","driver":"none"}' \ --device '{"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pci.5","addr":"0x0"}' \ +-device '{"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pci.4","addr":"0x0"}' \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ -msg timestamp=on diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml @@ -XXX,XX +XXX,XX @@ <devices> <emulator>/usr/bin/qemu-system-riscv64</emulator> <controller type='usb' index='0' model='qemu-xhci'> - <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </controller> - <controller type='scsi' index='0' model='lsilogic'> - <address type='pci' domain='0x0000' bus='0x04' slot='0x01' function='0x0'/> + <controller type='scsi' index='0' model='virtio-scsi'> + <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> </controller> <controller type='pci' index='0' model='pcie-root'/> <controller type='pci' index='1' model='pcie-root-port'> @@ -XXX,XX +XXX,XX @@ <target chassis='3' port='0xa'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> - <controller type='pci' index='4' model='pcie-to-pci-bridge'> - <model name='pcie-pci-bridge'/> - <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> - </controller> - <controller type='pci' index='5' model='pcie-root-port'> + <controller type='pci' index='4' model='pcie-root-port'> <model name='pcie-root-port'/> - <target chassis='5' port='0xb'/> + <target chassis='4' port='0xb'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/> </controller> - <controller type='pci' index='6' model='pcie-root-port'> + <controller type='pci' index='5' model='pcie-root-port'> <model name='pcie-root-port'/> - <target chassis='6' port='0xc'/> + <target chassis='5' port='0xc'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/> </controller> <interface type='user'> <mac address='52:54:00:09:a4:37'/> <model type='virtio'/> - <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface> <serial type='pty'> <target type='system-serial' port='0'> @@ -XXX,XX +XXX,XX @@ <audio id='1' type='none'/> <video> <model type='virtio' heads='1' primary='yes'/> - <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </video> <memballoon model='none'/> </devices> -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Changes from [v1]: * several patches have been pushed; * of the remaining changes, only the ones related to SCSI and USB controllers have been retained. I still intend to pursue the rest, but those two are where the real nasty stuff happens, so I'm focusing on them only for now; * improve the handling of USB controllers on s390x; * make all the code dealing with the legacy USB controller obsolete and get rid of it; * use out arguments to return models, making the new helpers fall in line with the usual libvirt API conventions. [v1] https://lists.libvirt.org/archives/list/devel@lists.libvirt.org/thread/G53MRO2IEJOS3M53OKON2S5RM2MPH55K/ Andrea Bolognani (17): tests: Add controller-scsi-default-unavailable qemu: Rename qemuDomainDefaultSCSIControllerModel() qemu: Move error reporting out of qemuDomainDefaultSCSIControllerModel() qemu: Improve qemuDomainDefaultSCSIControllerModel() qemu: Clean up qemuDomainDefaultSCSIControllerModel() qemu: Use virtio-scsi by default on RISC-V tests: Add usb-legacy-multiple tests: Add usb-legacy-device qemu: Always default to no USB controller on s390x qemu: Only use legacy USB controller if actually needed qemu: Validate USB controllers earlier qemu: Improve error message for USB controller validation qemu: Drop all code dealing with the legacy USB controller qemu: Add qemuDomainDefaultUSBControllerModel() qemu: Extend qemuDomainDefaultUSBControllerModel() qemu: Clean up qemuDomainDefaultUSBControllerModel() qemu: Use qemu-xhci by default on RISC-V src/qemu/qemu_command.c | 145 +-------- src/qemu/qemu_domain.c | 300 +++++++++++++----- src/qemu/qemu_domain.h | 6 +- src/qemu/qemu_hotplug.c | 21 +- src/qemu/qemu_validate.c | 69 +++- .../qemuhotplug-base-ccw-live+ccw-virtio.xml | 5 +- ...with-2-ccw-virtio+ccw-virtio-1-reverse.xml | 5 +- ...otplug-base-ccw-live-with-2-ccw-virtio.xml | 5 +- ...-with-ccw-virtio+ccw-virtio-2-explicit.xml | 5 +- ...-ccw-live-with-ccw-virtio+ccw-virtio-2.xml | 5 +- ...uhotplug-base-ccw-live-with-ccw-virtio.xml | 5 +- .../qemuhotplug-base-ccw-live.xml | 5 +- .../arm-vexpressa9-basic.aarch64-latest.args | 1 - .../arm-vexpressa9-nodevs.aarch64-latest.args | 1 - .../arm-vexpressa9-virtio.aarch64-latest.args | 1 - ...scsi-default-unavailable.x86_64-latest.err | 1 + .../controller-scsi-default-unavailable.xml | 15 + .../disk-arm-virtio-sd.aarch64-latest.args | 1 - ...ault-models.riscv64-latest.abi-update.args | 12 +- ...fault-models.riscv64-latest.abi-update.xml | 25 +- ...64-virt-default-models.riscv64-latest.args | 12 +- ...v64-virt-default-models.riscv64-latest.xml | 25 +- .../s390-usb-address.s390x-latest.xml | 6 +- .../sparc-minimal.sparc-latest.args | 1 - ...ault-unavailable-i440fx.x86_64-latest.args | 33 -- ...fault-unavailable-i440fx.x86_64-latest.err | 1 + ...fault-unavailable-i440fx.x86_64-latest.xml | 31 -- ...-default-unavailable-q35.x86_64-latest.err | 2 +- ...-default-unavailable-q35.x86_64-latest.xml | 33 -- ...ntroller-implicit-isapc.x86_64-latest.args | 1 - ...ler-nec-xhci-unavailable.x86_64-latest.xml | 33 -- .../usb-legacy-device.x86_64-latest.err | 1 + tests/qemuxmlconfdata/usb-legacy-device.xml | 15 + .../usb-legacy-multiple.x86_64-latest.err | 1 + tests/qemuxmlconfdata/usb-legacy-multiple.xml | 15 + tests/qemuxmlconftest.c | 28 +- 36 files changed, 418 insertions(+), 453 deletions(-) create mode 100644 tests/qemuxmlconfdata/controller-scsi-default-unavailable.x86_64-latest.err create mode 100644 tests/qemuxmlconfdata/controller-scsi-default-unavailable.xml delete mode 100644 tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.err delete mode 100644 tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.xml delete mode 100644 tests/qemuxmlconfdata/usb-controller-default-unavailable-q35.x86_64-latest.xml delete mode 100644 tests/qemuxmlconfdata/usb-controller-nec-xhci-unavailable.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.err create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.xml create mode 100644 tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.err create mode 100644 tests/qemuxmlconfdata/usb-legacy-multiple.xml -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
This provides coverage for the (very unlikely) scenario in which none of the possible devices are built into QEMU. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- ...ler-scsi-default-unavailable.x86_64-latest.err | 1 + .../controller-scsi-default-unavailable.xml | 15 +++++++++++++++ tests/qemuxmlconftest.c | 6 ++++++ 3 files changed, 22 insertions(+) create mode 100644 tests/qemuxmlconfdata/controller-scsi-default-unavailable.x86_64-latest.err create mode 100644 tests/qemuxmlconfdata/controller-scsi-default-unavailable.xml diff --git a/tests/qemuxmlconfdata/controller-scsi-default-unavailable.x86_64-latest.err b/tests/qemuxmlconfdata/controller-scsi-default-unavailable.x86_64-latest.err new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/controller-scsi-default-unavailable.x86_64-latest.err @@ -0,0 +1 @@ +internal error: Unable to determine model for SCSI controller idx=0 diff --git a/tests/qemuxmlconfdata/controller-scsi-default-unavailable.xml b/tests/qemuxmlconfdata/controller-scsi-default-unavailable.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/controller-scsi-default-unavailable.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <vcpu placement='static'>8</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='scsi'/> + <controller type='usb' model='none'/> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -XXX,XX +XXX,XX @@ mymain(void) DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-scsi-disk-vpd-build-error"); DO_TEST_CAPS_LATEST("controller-virtio-scsi"); DO_TEST_CAPS_LATEST("controller-scsi-auto"); + DO_TEST_FULL("controller-scsi-default-unavailable", ".x86_64-latest", + ARG_CAPS_ARCH, "x86_64", + ARG_CAPS_VER, "latest", + ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR, + ARG_QEMU_CAPS_DEL, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_LAST, + ARG_END); DO_TEST_CAPS_LATEST("disk-sata-device"); DO_TEST_CAPS_LATEST("disk-aio"); DO_TEST_CAPS_LATEST("disk-aio-io_uring"); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 8 ++++---- src/qemu/qemu_domain.h | 6 +++--- src/qemu/qemu_hotplug.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultAudioBackend(virQEMUDriver *driver, * Returns model on success, -1 on failure with error set. */ int -qemuDomainGetSCSIControllerModel(const virDomainDef *def, - const virDomainControllerDef *cont, - virQEMUCaps *qemuCaps) +qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, + const virDomainControllerDef *cont, + virQEMUCaps *qemuCaps) { if (cont->model > 0) return cont->model; @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, switch (cont->type) { case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: /* Set the default SCSI controller model if not already set */ - cont->model = qemuDomainGetSCSIControllerModel(def, cont, qemuCaps); + cont->model = qemuDomainDefaultSCSIControllerModel(def, cont, qemuCaps); if (cont->model < 0) return -1; diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -XXX,XX +XXX,XX @@ bool qemuDomainHasBuiltinESP(const virDomainDef *def); bool qemuDomainNeedsFDC(const virDomainDef *def); bool qemuDomainSupportsPCI(const virDomainDef *def); bool qemuDomainSupportsPCIMultibus(const virDomainDef *def); -int qemuDomainGetSCSIControllerModel(const virDomainDef *def, - const virDomainControllerDef *cont, - virQEMUCaps *qemuCaps); +int qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, + const virDomainControllerDef *cont, + virQEMUCaps *qemuCaps); void qemuDomainUpdateCurrentMemorySize(virDomainObj *vm); diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -XXX,XX +XXX,XX @@ qemuDomainFindOrCreateSCSIDiskController(virDomainObj *vm, cont->idx = controller; if (model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DEFAULT) - cont->model = qemuDomainGetSCSIControllerModel(vm->def, cont, priv->qemuCaps); + cont->model = qemuDomainDefaultSCSIControllerModel(vm->def, cont, priv->qemuCaps); else cont->model = model; -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
We want this helper to work more like other similar ones, where error reporting is performed by the caller. This introduces a small amount of code duplication but makes for a cleaner API. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 9 +++++---- src/qemu/qemu_hotplug.c | 3 +++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, if (qemuDomainHasBuiltinESP(def)) return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_NCR53C90; - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unable to determine model for SCSI controller idx=%1$d"), - cont->idx); return -1; } @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, /* Set the default SCSI controller model if not already set */ cont->model = qemuDomainDefaultSCSIControllerModel(def, cont, qemuCaps); - if (cont->model < 0) + if (cont->model < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unable to determine model for SCSI controller idx=%1$d"), + cont->idx); return -1; + } break; case VIR_DOMAIN_CONTROLLER_TYPE_USB: diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -XXX,XX +XXX,XX @@ qemuDomainFindOrCreateSCSIDiskController(virDomainObj *vm, cont->model = model; if (cont->model < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unable to determine model for SCSI controller idx=%1$d"), + cont->idx); VIR_FREE(cont); return NULL; } -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Make the helper stateless. This requires the caller to check whether it needs to be called in the first place instead of adding this check inside the function, which makes for more readable, if a little more verbose, code. At the same time, change it so that it uses an out argument to return the selected model back to the caller, and only use the return value to signal whether the function completed its task successfully. This is consistent with most APIs in libvirt, and removes the ambiguity caused by the fact that the value of VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DEFAULT is -1. In order to have a nice API while still keeping the implementation short and readable, a small wrapper is required. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 51 ++++++++++++++++++++++++----------------- src/qemu/qemu_domain.h | 4 ++-- src/qemu/qemu_hotplug.c | 18 ++++++++------- 3 files changed, 42 insertions(+), 31 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultAudioBackend(virQEMUDriver *driver, } +/* Internal. Use qemuDomainDefaultSCSIControllerModel() instead */ +static virDomainControllerModelSCSI +qemuDomainDefaultSCSIControllerModelInternal(const virDomainDef *def, + virQEMUCaps *qemuCaps) +{ + if (qemuDomainIsPSeries(def)) + return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI; + if (ARCH_IS_S390(def->os.arch)) + return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) + return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI)) + return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; + if (qemuDomainHasBuiltinESP(def)) + return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_NCR53C90; + + return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DEFAULT; +} + + /** * @def: Domain definition * @cont: Domain controller def @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultAudioBackend(virQEMUDriver *driver, * Returns model on success, -1 on failure with error set. */ int -qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, - const virDomainControllerDef *cont, +qemuDomainDefaultSCSIControllerModel(virDomainControllerModelSCSI *model, + const virDomainDef *def, virQEMUCaps *qemuCaps) { - if (cont->model > 0) - return cont->model; - - if (qemuDomainIsPSeries(def)) - return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI; - if (ARCH_IS_S390(def->os.arch)) - return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) - return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC; - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI)) - return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; - if (qemuDomainHasBuiltinESP(def)) - return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_NCR53C90; - - return -1; + *model = qemuDomainDefaultSCSIControllerModelInternal(def, qemuCaps); + return 0; } @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, { switch (cont->type) { case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: - /* Set the default SCSI controller model if not already set */ - cont->model = qemuDomainDefaultSCSIControllerModel(def, cont, qemuCaps); - - if (cont->model < 0) { + /* If no model is set, try to come up with a reasonable + * default. If one can't be determined, error out */ + if ((cont->model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DEFAULT || + cont->model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_AUTO) && + (qemuDomainDefaultSCSIControllerModel(&cont->model, def, qemuCaps) < 0 || + cont->model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DEFAULT)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Unable to determine model for SCSI controller idx=%1$d"), cont->idx); diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -XXX,XX +XXX,XX @@ bool qemuDomainHasBuiltinESP(const virDomainDef *def); bool qemuDomainNeedsFDC(const virDomainDef *def); bool qemuDomainSupportsPCI(const virDomainDef *def); bool qemuDomainSupportsPCIMultibus(const virDomainDef *def); -int qemuDomainDefaultSCSIControllerModel(const virDomainDef *def, - const virDomainControllerDef *cont, +int qemuDomainDefaultSCSIControllerModel(virDomainControllerModelSCSI *model, + const virDomainDef *def, virQEMUCaps *qemuCaps); void qemuDomainUpdateCurrentMemorySize(virDomainObj *vm); diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -XXX,XX +XXX,XX @@ qemuDomainFindOrCreateSCSIDiskController(virDomainObj *vm, size_t i; virDomainControllerDef *cont; qemuDomainObjPrivate *priv = vm->privateData; - int model = -1; + virDomainControllerModelSCSI model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DEFAULT; for (i = 0; i < vm->def->ncontrollers; i++) { cont = vm->def->controllers[i]; @@ -XXX,XX +XXX,XX @@ qemuDomainFindOrCreateSCSIDiskController(virDomainObj *vm, * now hotplug a controller */ cont = virDomainControllerDefNew(VIR_DOMAIN_CONTROLLER_TYPE_SCSI); cont->idx = controller; - - if (model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DEFAULT) - cont->model = qemuDomainDefaultSCSIControllerModel(vm->def, cont, priv->qemuCaps); - else - cont->model = model; - - if (cont->model < 0) { + cont->model = model; + + /* If no model has been discovered by looking at existing SCSI + * controllers, try to come up with a reasonable default. If one + * can't be determined, error out */ + if ((cont->model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DEFAULT || + cont->model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_AUTO) && + (qemuDomainDefaultSCSIControllerModel(&cont->model, vm->def, priv->qemuCaps) < 0 || + cont->model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DEFAULT)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Unable to determine model for SCSI controller idx=%1$d"), cont->idx); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Use a better order for sections, improve comments. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ static virDomainControllerModelSCSI qemuDomainDefaultSCSIControllerModelInternal(const virDomainDef *def, virQEMUCaps *qemuCaps) { - if (qemuDomainIsPSeries(def)) - return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI; + /* For machine types with built-in SCSI controllers, the choice + * of model is obvious */ + if (qemuDomainHasBuiltinESP(def)) + return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_NCR53C90; + + /* Most new architectures should ideally use virtio */ if (ARCH_IS_S390(def->os.arch)) return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; + + /* pSeries has its own special default */ + if (qemuDomainIsPSeries(def)) + return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI; + + /* If there is no preference, base the choice on device + * availability. In this case, lsilogic is favored over + * virtio-scsi for backwards compatibility reasons */ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC; if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI)) return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; - if (qemuDomainHasBuiltinESP(def)) - return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_NCR53C90; return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DEFAULT; } /** - * @def: Domain definition - * @cont: Domain controller def - * @qemuCaps: qemu capabilities + * qemuDomainDefaultSCSIControllerModel: + * @model: return location + * @def: domain definition + * @qemuCaps: QEMU capabilities, or NULL + * + * Choose a reasonable model to use for a SCSI controller where a + * specific one hasn't been provided by the user. + * + * The choice is based on a number of factors, including the guest's + * architecture and machine type. @qemuCaps, if provided, might be + * taken into consideration too. * - * If the controller model is already defined, return it immediately; - * otherwise, based on the @qemuCaps return a default model value. + * Not being able to come up with a value is NOT considered a + * failure. It's up to the caller to decide how to handle that + * scenario. * - * Returns model on success, -1 on failure with error set. + * Returns: 0 on success, <0 on failure. */ int qemuDomainDefaultSCSIControllerModel(virDomainControllerModelSCSI *model, -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Just like piix3-uhci for USB, the choice of lsilogic for SCSI was dictated entirely by that being the default for legacy x86 guests. Use virtio-scsi instead. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 4 +++- ...virt-default-models.riscv64-latest.abi-update.args | 5 +++-- ...-virt-default-models.riscv64-latest.abi-update.xml | 11 ++++++++--- .../riscv64-virt-default-models.riscv64-latest.args | 5 +++-- .../riscv64-virt-default-models.riscv64-latest.xml | 11 ++++++++--- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultSCSIControllerModelInternal(const virDomainDef *def, return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_NCR53C90; /* Most new architectures should ideally use virtio */ - if (ARCH_IS_S390(def->os.arch)) + if (ARCH_IS_S390(def->os.arch) || + qemuDomainIsRISCVVirt(def)) { return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI; + } /* pSeries has its own special default */ if (qemuDomainIsPSeries(def)) diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.args b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.args index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.args +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.args @@ -XXX,XX +XXX,XX @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ -device '{"driver":"pcie-pci-bridge","id":"pci.3","bus":"pci.1","addr":"0x0"}' \ -device '{"driver":"pcie-root-port","port":10,"chassis":4,"id":"pci.4","bus":"pcie.0","addr":"0x1.0x2"}' \ -device '{"driver":"pcie-root-port","port":11,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x1.0x3"}' \ +-device '{"driver":"pcie-root-port","port":12,"chassis":6,"id":"pci.6","bus":"pcie.0","addr":"0x1.0x4"}' \ -device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.3","addr":"0x1"}' \ --device '{"driver":"lsi","id":"scsi0","bus":"pci.3","addr":"0x2"}' \ +-device '{"driver":"virtio-scsi-pci","id":"scsi0","bus":"pci.4","addr":"0x0"}' \ -netdev '{"type":"user","id":"hostnet0"}' \ -device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","bus":"pci.2","addr":"0x0"}' \ -chardev pty,id=charserial0 \ -serial chardev:charserial0 \ -audiodev '{"id":"audio1","driver":"none"}' \ --device '{"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pci.4","addr":"0x0"}' \ +-device '{"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pci.5","addr":"0x0"}' \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ -msg timestamp=on diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.xml b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.xml +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.xml @@ -XXX,XX +XXX,XX @@ <controller type='usb' index='0' model='piix3-uhci'> <address type='pci' domain='0x0000' bus='0x03' slot='0x01' function='0x0'/> </controller> - <controller type='scsi' index='0' model='lsilogic'> - <address type='pci' domain='0x0000' bus='0x03' slot='0x02' function='0x0'/> + <controller type='scsi' index='0' model='virtio-scsi'> + <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </controller> <controller type='pci' index='0' model='pcie-root'/> <controller type='pci' index='1' model='pcie-root-port'> @@ -XXX,XX +XXX,XX @@ <target chassis='5' port='0xb'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/> </controller> + <controller type='pci' index='6' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='6' port='0xc'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/> + </controller> <interface type='user'> <mac address='52:54:00:09:a4:37'/> <model type='virtio'/> @@ -XXX,XX +XXX,XX @@ <audio id='1' type='none'/> <video> <model type='virtio' heads='1' primary='yes'/> - <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> </video> <memballoon model='none'/> </devices> diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args @@ -XXX,XX +XXX,XX @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ -device '{"driver":"pcie-pci-bridge","id":"pci.3","bus":"pci.1","addr":"0x0"}' \ -device '{"driver":"pcie-root-port","port":10,"chassis":4,"id":"pci.4","bus":"pcie.0","addr":"0x1.0x2"}' \ -device '{"driver":"pcie-root-port","port":11,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x1.0x3"}' \ +-device '{"driver":"pcie-root-port","port":12,"chassis":6,"id":"pci.6","bus":"pcie.0","addr":"0x1.0x4"}' \ -device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.3","addr":"0x1"}' \ --device '{"driver":"lsi","id":"scsi0","bus":"pci.3","addr":"0x2"}' \ +-device '{"driver":"virtio-scsi-pci","id":"scsi0","bus":"pci.4","addr":"0x0"}' \ -netdev '{"type":"user","id":"hostnet0"}' \ -device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","bus":"pci.2","addr":"0x0"}' \ -chardev pty,id=charserial0 \ -serial chardev:charserial0 \ -audiodev '{"id":"audio1","driver":"none"}' \ --device '{"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pci.4","addr":"0x0"}' \ +-device '{"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pci.5","addr":"0x0"}' \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ -msg timestamp=on diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml @@ -XXX,XX +XXX,XX @@ <controller type='usb' index='0' model='piix3-uhci'> <address type='pci' domain='0x0000' bus='0x03' slot='0x01' function='0x0'/> </controller> - <controller type='scsi' index='0' model='lsilogic'> - <address type='pci' domain='0x0000' bus='0x03' slot='0x02' function='0x0'/> + <controller type='scsi' index='0' model='virtio-scsi'> + <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </controller> <controller type='pci' index='0' model='pcie-root'/> <controller type='pci' index='1' model='pcie-root-port'> @@ -XXX,XX +XXX,XX @@ <target chassis='5' port='0xb'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/> </controller> + <controller type='pci' index='6' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='6' port='0xc'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/> + </controller> <interface type='user'> <mac address='52:54:00:09:a4:37'/> <model type='virtio'/> @@ -XXX,XX +XXX,XX @@ <audio id='1' type='none'/> <video> <model type='virtio' heads='1' primary='yes'/> - <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> </video> <memballoon model='none'/> </devices> -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
We have special handling for this configuration, so make sure that there is some test coverage too. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- .../usb-legacy-multiple.x86_64-latest.err | 1 + .../usb-legacy-multiple.x86_64-latest.xml | 32 +++++++++++++++++++ tests/qemuxmlconfdata/usb-legacy-multiple.xml | 15 +++++++++ tests/qemuxmlconftest.c | 7 ++++ 4 files changed, 55 insertions(+) create mode 100644 tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.err create mode 100644 tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/usb-legacy-multiple.xml diff --git a/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.err b/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.err new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.err @@ -0,0 +1 @@ +unsupported configuration: Multiple legacy USB controllers are not supported diff --git a/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.xml b/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>4</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='usb' index='0'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> + </controller> + <controller type='usb' index='1'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </controller> + <controller type='pci' index='0' model='pci-root'/> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/usb-legacy-multiple.xml b/tests/qemuxmlconfdata/usb-legacy-multiple.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/usb-legacy-multiple.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='usb'/> + <controller type='usb'/> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -XXX,XX +XXX,XX @@ mymain(void) ARG_QEMU_CAPS_DEL, QEMU_CAPS_DEVICE_QEMU_XHCI, QEMU_CAPS_NEC_USB_XHCI, QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_LAST, ARG_END); + DO_TEST_FULL("usb-legacy-multiple", ".x86_64-latest", + ARG_CAPS_ARCH, "x86_64", + ARG_CAPS_VER, "latest", + ARG_FLAGS, FLAG_EXPECT_FAILURE, + ARG_QEMU_CAPS_DEL, QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_LAST, + ARG_END); + DO_TEST_CAPS_LATEST("usb-none"); DO_TEST_CAPS_LATEST("usb-controller-piix3"); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
This provides coverage for the scenario in which an attempt is made to use a USB device together with the legacy USB controller. Note that, while the test case passes, the configuration it produces doesn't actually work: $ qemu-system-x86_64 -M pc -usb -device usb-tablet,bus=usb.0 Bus 'usb.0' not found This is because the bus created by the legacy USB controller is automatically assigned ID "usb-bus.0", but libvirt doesn't take this into consideration when assigning addresses to USB devices. In other words, the legacy USB controller will only work as long as no attempt is made to attach devices to it, which arguably doesn't make for a very useful controller. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- .../usb-legacy-device.x86_64-latest.args | 33 +++++++++++++++++++ .../usb-legacy-device.x86_64-latest.xml | 30 +++++++++++++++++ tests/qemuxmlconfdata/usb-legacy-device.xml | 15 +++++++++ tests/qemuxmlconftest.c | 5 +++ 4 files changed, 83 insertions(+) create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.xml diff --git a/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ +-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-cpu qemu64 \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 4,sockets=4,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-usb \ +-device '{"driver":"usb-tablet","id":"input0","bus":"usb.0","port":"1"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>4</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='usb' index='0'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> + </controller> + <controller type='pci' index='0' model='pci-root'/> + <input type='tablet' bus='usb'/> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/usb-legacy-device.xml b/tests/qemuxmlconfdata/usb-legacy-device.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/usb-legacy-device.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <vcpu>4</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='usb'/> + <input type='tablet' bus='usb'/> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -XXX,XX +XXX,XX @@ mymain(void) ARG_FLAGS, FLAG_EXPECT_FAILURE, ARG_QEMU_CAPS_DEL, QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_LAST, ARG_END); + DO_TEST_FULL("usb-legacy-device", ".x86_64-latest", + ARG_CAPS_ARCH, "x86_64", + ARG_CAPS_VER, "latest", + ARG_QEMU_CAPS_DEL, QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_LAST, + ARG_END); DO_TEST_CAPS_LATEST("usb-none"); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
When support for s390x was introduced in libvirt, it naturally followed the conventions established at the time for x86, which were to have a USB controller added by default. Later, in 2013, commit 3a82f628a964 made the default USB controller model for s390x VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE, effectively overriding the architecture-independent default. However, an exception was carved out at the time: if the USB controller had an address assigned to it, then it would be left alone. A couple of years later, commit 09ab9dcc85ec changed things again in two ways: for starters, libvirt would no longer automatically attempt to add a USB controller to newly-defined s390x guests; moreover, the command line generator was changed so that the legacy USB controller (-usb) would never be used on s390x. In other words, unless a model name is explicitly provided for the USB controller, which is something that only actually works when using a recent QEMU version (see commit f9ed4d385ab8), s390x guests will never have USB controllers attached to them. Remove the exception carved out a decade ago and always reflect this fact accurately in the guest XML. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 14 +++++++++----- .../qemuhotplug-base-ccw-live+ccw-virtio.xml | 5 +---- ...live-with-2-ccw-virtio+ccw-virtio-1-reverse.xml | 5 +---- ...qemuhotplug-base-ccw-live-with-2-ccw-virtio.xml | 5 +---- ...-live-with-ccw-virtio+ccw-virtio-2-explicit.xml | 5 +---- ...-base-ccw-live-with-ccw-virtio+ccw-virtio-2.xml | 5 +---- .../qemuhotplug-base-ccw-live-with-ccw-virtio.xml | 5 +---- .../qemuhotplug-base-ccw-live.xml | 5 +---- .../s390-usb-address.s390x-latest.xml | 6 +----- 9 files changed, 17 insertions(+), 38 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI; if (ARCH_IS_S390(def->os.arch)) { - if (cont->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { - /* set the default USB model to none for s390 unless an - * address is found */ - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE; - } + /* No default model on s390x, one has to be provided + * explicitly by the user */ + cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE; } else if (ARCH_IS_PPC64(def->os.arch)) { /* To not break migration we need to set default USB controller * for ppc64 to pci-ohci if we cannot change ABI of the VM. @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; } } + + /* Make sure the 'none' USB controller doesn't have an address + * associated with it, as that would trip up later checks */ + if (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE) + cont->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE; + /* forbid usb model 'qusb1' and 'qusb2' in this kind of hyperviosr */ if (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB1 || cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB2) { diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live+ccw-virtio.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live+ccw-virtio.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live+ccw-virtio.xml +++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live+ccw-virtio.xml @@ -XXX,XX +XXX,XX @@ <alias name='virtio-disk4'/> <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/> </disk> - <controller type='usb' index='0'> + <controller type='usb' index='0' model='none'> <alias name='usb'/> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'> - <zpci uid='0x0001' fid='0x00000000'/> - </address> </controller> <controller type='scsi' index='0' model='virtio-scsi'> <alias name='scsi0'/> diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-reverse.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-reverse.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-reverse.xml +++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-reverse.xml @@ -XXX,XX +XXX,XX @@ <alias name='virtio-disk1'/> <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/> </disk> - <controller type='usb' index='0'> + <controller type='usb' index='0' model='none'> <alias name='usb'/> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'> - <zpci uid='0x0001' fid='0x00000000'/> - </address> </controller> <controller type='scsi' index='0' model='virtio-scsi'> <alias name='scsi0'/> diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio.xml +++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio.xml @@ -XXX,XX +XXX,XX @@ <alias name='virtio-disk0'/> <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0001'/> </disk> - <controller type='usb' index='0'> + <controller type='usb' index='0' model='none'> <alias name='usb'/> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'> - <zpci uid='0x0001' fid='0x00000000'/> - </address> </controller> <controller type='scsi' index='0' model='virtio-scsi'> <alias name='scsi0'/> diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2-explicit.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2-explicit.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2-explicit.xml +++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2-explicit.xml @@ -XXX,XX +XXX,XX @@ <alias name='virtio-disk4'/> <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/> </disk> - <controller type='usb' index='0'> + <controller type='usb' index='0' model='none'> <alias name='usb'/> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'> - <zpci uid='0x0001' fid='0x00000000'/> - </address> </controller> <controller type='scsi' index='0' model='virtio-scsi'> <alias name='scsi0'/> diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2.xml +++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2.xml @@ -XXX,XX +XXX,XX @@ <alias name='virtio-disk4'/> <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/> </disk> - <controller type='usb' index='0'> + <controller type='usb' index='0' model='none'> <alias name='usb'/> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'> - <zpci uid='0x0001' fid='0x00000000'/> - </address> </controller> <controller type='scsi' index='0' model='virtio-scsi'> <alias name='scsi0'/> diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio.xml +++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio.xml @@ -XXX,XX +XXX,XX @@ <alias name='virtio-disk4'/> <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/> </disk> - <controller type='usb' index='0'> + <controller type='usb' index='0' model='none'> <alias name='usb'/> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'> - <zpci uid='0x0001' fid='0x00000000'/> - </address> </controller> <controller type='scsi' index='0' model='virtio-scsi'> <alias name='scsi0'/> diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live.xml +++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live.xml @@ -XXX,XX +XXX,XX @@ <on_crash>restart</on_crash> <devices> <emulator>/usr/bin/qemu-system-s390x</emulator> - <controller type='usb' index='0'> + <controller type='usb' index='0' model='none'> <alias name='usb'/> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'> - <zpci uid='0x0001' fid='0x00000000'/> - </address> </controller> <controller type='scsi' index='0' model='virtio-scsi'> <alias name='scsi0'/> diff --git a/tests/qemuxmlconfdata/s390-usb-address.s390x-latest.xml b/tests/qemuxmlconfdata/s390-usb-address.s390x-latest.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/s390-usb-address.s390x-latest.xml +++ b/tests/qemuxmlconfdata/s390-usb-address.s390x-latest.xml @@ -XXX,XX +XXX,XX @@ <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu-system-s390x</emulator> - <controller type='usb' index='0'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'> - <zpci uid='0x0001' fid='0x00000000'/> - </address> - </controller> + <controller type='usb' index='0' model='none'/> <controller type='pci' index='0' model='pci-root'/> <audio id='1' type='none'/> <memballoon model='none'/> -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
With the way the code is currently written, we can end up using the legacy USB controller (-usb) for a guest that doesn't have any USB controllers at all in its configuration. This is pretty harmless, since in these cases QEMU will ignore the request and not create any USB controller, but it's also incorrect and gets in the way of further changes that we want to make. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_command.c | 1 + tests/qemuxmlconfdata/arm-vexpressa9-basic.aarch64-latest.args | 1 - tests/qemuxmlconfdata/arm-vexpressa9-nodevs.aarch64-latest.args | 1 - tests/qemuxmlconfdata/arm-vexpressa9-virtio.aarch64-latest.args | 1 - tests/qemuxmlconfdata/disk-arm-virtio-sd.aarch64-latest.args | 1 - tests/qemuxmlconfdata/sparc-minimal.sparc-latest.args | 1 - .../usb-controller-implicit-isapc.x86_64-latest.args | 1 - 7 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -XXX,XX +XXX,XX @@ qemuBuildLegacyUSBControllerCommandLine(virCommand *cmd, } if (nusb == 0 && + nlegacy > 0 && !qemuBuildDomainForbidLegacyUSBController(def) && !ARCH_IS_S390(def->os.arch)) { /* We haven't added any USB controller yet, but we haven't been asked diff --git a/tests/qemuxmlconfdata/arm-vexpressa9-basic.aarch64-latest.args b/tests/qemuxmlconfdata/arm-vexpressa9-basic.aarch64-latest.args index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/arm-vexpressa9-basic.aarch64-latest.args +++ b/tests/qemuxmlconfdata/arm-vexpressa9-basic.aarch64-latest.args @@ -XXX,XX +XXX,XX @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-armtest/.config \ -initrd /arm.initrd \ -append 'console=ttyAMA0,115200n8 rw root=/dev/mmcblk0p3 rootwait physmap.enabled=0' \ -dtb /arm.dtb \ --usb \ -drive file=/arm.raw,format=raw,if=sd,index=0 \ -netdev '{"type":"user","id":"hostnet0"}' \ -net nic,macaddr=52:54:00:09:a4:37,netdev=hostnet0,model=lan9118,id=net0 \ diff --git a/tests/qemuxmlconfdata/arm-vexpressa9-nodevs.aarch64-latest.args b/tests/qemuxmlconfdata/arm-vexpressa9-nodevs.aarch64-latest.args index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/arm-vexpressa9-nodevs.aarch64-latest.args +++ b/tests/qemuxmlconfdata/arm-vexpressa9-nodevs.aarch64-latest.args @@ -XXX,XX +XXX,XX @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-armtest/.config \ -initrd /arm.initrd \ -append console=ttyAMA0,115200n8 \ -dtb /arm.dtb \ --usb \ -audiodev '{"id":"audio1","driver":"none"}' \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ -msg timestamp=on diff --git a/tests/qemuxmlconfdata/arm-vexpressa9-virtio.aarch64-latest.args b/tests/qemuxmlconfdata/arm-vexpressa9-virtio.aarch64-latest.args index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/arm-vexpressa9-virtio.aarch64-latest.args +++ b/tests/qemuxmlconfdata/arm-vexpressa9-virtio.aarch64-latest.args @@ -XXX,XX +XXX,XX @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-armtest/.config \ -append 'console=ttyAMA0,115200n8 rw root=/dev/vda3 rootwait physmap.enabled=0' \ -dtb /arm.dtb \ -device '{"driver":"virtio-serial-device","id":"virtio-serial0"}' \ --usb \ -blockdev '{"driver":"file","filename":"/arm.raw","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \ -device '{"driver":"virtio-blk-device","drive":"libvirt-1-format","id":"virtio-disk0","bootindex":1}' \ diff --git a/tests/qemuxmlconfdata/disk-arm-virtio-sd.aarch64-latest.args b/tests/qemuxmlconfdata/disk-arm-virtio-sd.aarch64-latest.args index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/disk-arm-virtio-sd.aarch64-latest.args +++ b/tests/qemuxmlconfdata/disk-arm-virtio-sd.aarch64-latest.args @@ -XXX,XX +XXX,XX @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-armtest/.config \ -initrd /arm.initrd \ -append 'console=ttyAMA0,115200n8 rw root=/dev/vda3 rootwait physmap.enabled=0' \ -dtb /arm.dtb \ --usb \ -drive file=/arm-sd.qcow2,format=qcow2,if=sd,index=0 \ -drive file.driver=nbd,file.server.type=inet,file.server.host=localhost,file.server.port=10809,file.export=export,format=qcow2,if=sd,index=1 \ -drive file.driver=gluster,file.volume=Volume3,file.path=Image.qcow2,file.server.0.type=inet,file.server.0.host=example.org,file.server.0.port=6000,file.server.1.type=inet,file.server.1.host=example.org,file.server.1.port=24007,file.server.2.type=unix,file.server.2.path=/path/to/sock,file.debug=4,format=qcow2,if=sd,index=2 \ diff --git a/tests/qemuxmlconfdata/sparc-minimal.sparc-latest.args b/tests/qemuxmlconfdata/sparc-minimal.sparc-latest.args index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/sparc-minimal.sparc-latest.args +++ b/tests/qemuxmlconfdata/sparc-minimal.sparc-latest.args @@ -XXX,XX +XXX,XX @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-redhat62sparc/.config \ -rtc base=utc \ -no-shutdown \ -boot strict=on \ --usb \ -blockdev '{"driver":"file","filename":"/home/berrange/VirtualMachines/redhat-6.2-sparc.img","node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \ -blockdev '{"node-name":"libvirt-2-format","read-only":false,"driver":"qcow2","file":"libvirt-2-storage"}' \ -device scsi-hd,bus=scsi.0,scsi-id=0,device_id=drive-scsi0-0-0-0,drive=libvirt-2-format,id=scsi0-0-0-0,bootindex=1 \ diff --git a/tests/qemuxmlconfdata/usb-controller-implicit-isapc.x86_64-latest.args b/tests/qemuxmlconfdata/usb-controller-implicit-isapc.x86_64-latest.args index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/usb-controller-implicit-isapc.x86_64-latest.args +++ b/tests/qemuxmlconfdata/usb-controller-implicit-isapc.x86_64-latest.args @@ -XXX,XX +XXX,XX @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ -rtc base=utc \ -no-shutdown \ -boot strict=on \ --usb \ -audiodev '{"id":"audio1","driver":"none"}' \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ -msg timestamp=on -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Right now we call qemuValidateDomainDeviceDefControllerUSB() quite late, just as we're generating the QEMU command line. The intention here is to prevent configurations from being rejected, even though a default USB controller model could not be found, because using -usb could work as a last resort. As it turns out, this premise is flawed, as can easily be demonstrated by using a build of QEMU which has the default USB controller compiled out: $ qemu-system-x86_64 -M pc -device piix3-usb-uhci 'piix3-usb-uhci' is not a valid device model name $ qemu-system-x86_64 -M pc -usb missing object type 'piix3-usb-uhci' In other words, if the device that needs to be built into QEMU in order for -usb to work was available, we would have detected it and used it via -device instead; if we didn't, using -usb won't change anything. Unsurprisingly, a number of test cases start failing, or fail in a different way, because of this change. That's okay: even in the unlikely event that there actually are any existing guests with such problematic configurations out there, they will not disappear but merely fail to start, and the user will have the opportunity to fix them. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_command.c | 68 +------------------ src/qemu/qemu_validate.c | 68 ++++++++++++++++++- ...ault-unavailable-i440fx.x86_64-latest.args | 33 --------- ...fault-unavailable-i440fx.x86_64-latest.err | 1 + ...fault-unavailable-i440fx.x86_64-latest.xml | 31 --------- ...-default-unavailable-q35.x86_64-latest.xml | 33 --------- ...ler-nec-xhci-unavailable.x86_64-latest.xml | 33 --------- .../usb-legacy-device.x86_64-latest.args | 33 --------- .../usb-legacy-device.x86_64-latest.err | 1 + .../usb-legacy-device.x86_64-latest.xml | 30 -------- .../usb-legacy-multiple.x86_64-latest.err | 2 +- .../usb-legacy-multiple.x86_64-latest.xml | 32 --------- tests/qemuxmlconftest.c | 12 ++-- 13 files changed, 79 insertions(+), 298 deletions(-) delete mode 100644 tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.err delete mode 100644 tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.xml delete mode 100644 tests/qemuxmlconfdata/usb-controller-default-unavailable-q35.x86_64-latest.xml delete mode 100644 tests/qemuxmlconfdata/usb-controller-nec-xhci-unavailable.x86_64-latest.xml delete mode 100644 tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.err delete mode 100644 tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml delete mode 100644 tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.xml diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -XXX,XX +XXX,XX @@ qemuBuildFilesystemCommandLine(virCommand *cmd, } -static int -qemuControllerModelUSBToCaps(int model) -{ - switch (model) { - case VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI: - return QEMU_CAPS_PIIX3_USB_UHCI; - case VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX4_UHCI: - return QEMU_CAPS_PIIX4_USB_UHCI; - case VIR_DOMAIN_CONTROLLER_MODEL_USB_EHCI: - return QEMU_CAPS_USB_EHCI; - case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_EHCI1: - case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI1: - case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI2: - case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI3: - return QEMU_CAPS_ICH9_USB_EHCI1; - case VIR_DOMAIN_CONTROLLER_MODEL_USB_VT82C686B_UHCI: - return QEMU_CAPS_VT82C686B_USB_UHCI; - case VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI: - return QEMU_CAPS_PCI_OHCI; - case VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI: - return QEMU_CAPS_NEC_USB_XHCI; - case VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI: - return QEMU_CAPS_DEVICE_QEMU_XHCI; - default: - return -1; - } -} - - -static int -qemuValidateDomainDeviceDefControllerUSB(const virDomainControllerDef *def, - virQEMUCaps *qemuCaps) -{ - if (def->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("no model provided for USB controller")); - return -1; - } - - if (!virQEMUCapsGet(qemuCaps, qemuControllerModelUSBToCaps(def->model))) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("USB controller model '%1$s' not supported in this QEMU binary"), - virDomainControllerModelUSBTypeToString(def->model)); - return -1; - } - - if (def->opts.usbopts.ports != -1) { - if (def->model != VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI && - def->model != VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("usb controller type '%1$s' doesn't support 'ports' with this QEMU binary"), - virDomainControllerModelUSBTypeToString(def->model)); - return -1; - } - } - - return 0; -} - - static const char * qemuBuildUSBControllerFindMasterAlias(const virDomainDef *domainDef, const virDomainControllerDef *def) @@ -XXX,XX +XXX,XX @@ qemuBuildUSBControllerFindMasterAlias(const virDomainDef *domainDef, static virJSONValue * qemuBuildUSBControllerDevProps(const virDomainDef *domainDef, - virDomainControllerDef *def, - virQEMUCaps *qemuCaps) + virDomainControllerDef *def) { g_autoptr(virJSONValue) props = NULL; - if (qemuValidateDomainDeviceDefControllerUSB(def, qemuCaps) < 0) - return NULL; - if (virJSONValueObjectAdd(&props, "s:driver", qemuControllerModelUSBTypeToString(def->model), "k:p2", def->opts.usbopts.ports, @@ -XXX,XX +XXX,XX @@ qemuBuildControllerDevProps(const virDomainDef *domainDef, break; case VIR_DOMAIN_CONTROLLER_TYPE_USB: - if (!(props = qemuBuildUSBControllerDevProps(domainDef, def, qemuCaps))) + if (!(props = qemuBuildUSBControllerDevProps(domainDef, def))) return -1; break; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefControllerSCSI(const virDomainControllerDef *controll } +static int +qemuControllerModelUSBToCaps(int model) +{ + switch (model) { + case VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI: + return QEMU_CAPS_PIIX3_USB_UHCI; + case VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX4_UHCI: + return QEMU_CAPS_PIIX4_USB_UHCI; + case VIR_DOMAIN_CONTROLLER_MODEL_USB_EHCI: + return QEMU_CAPS_USB_EHCI; + case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_EHCI1: + case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI1: + case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI2: + case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI3: + return QEMU_CAPS_ICH9_USB_EHCI1; + case VIR_DOMAIN_CONTROLLER_MODEL_USB_VT82C686B_UHCI: + return QEMU_CAPS_VT82C686B_USB_UHCI; + case VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI: + return QEMU_CAPS_PCI_OHCI; + case VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI: + return QEMU_CAPS_NEC_USB_XHCI; + case VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI: + return QEMU_CAPS_DEVICE_QEMU_XHCI; + default: + return -1; + } +} + + +static int +qemuValidateDomainDeviceDefControllerUSB(const virDomainControllerDef *def, + virQEMUCaps *qemuCaps) +{ + if (def->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE) + return 0; + + if (def->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("no model provided for USB controller")); + return -1; + } + + if (!virQEMUCapsGet(qemuCaps, qemuControllerModelUSBToCaps(def->model))) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("USB controller model '%1$s' not supported in this QEMU binary"), + virDomainControllerModelUSBTypeToString(def->model)); + return -1; + } + + if (def->opts.usbopts.ports != -1) { + if (def->model != VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI && + def->model != VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("usb controller type '%1$s' doesn't support 'ports' with this QEMU binary"), + virDomainControllerModelUSBTypeToString(def->model)); + return -1; + } + } + + return 0; +} + + /** * virValidateControllerPCIModelNameToQEMUCaps: * @modelName: model name @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefController(const virDomainControllerDef *controller, qemuCaps); break; + case VIR_DOMAIN_CONTROLLER_TYPE_USB: + ret = qemuValidateDomainDeviceDefControllerUSB(controller, qemuCaps); + break; + case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: - case VIR_DOMAIN_CONTROLLER_TYPE_USB: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: diff --git a/tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.args b/tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.args deleted file mode 100644 index XXXXXXX..XXXXXXX --- a/tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.args +++ /dev/null @@ -XXX,XX +XXX,XX @@ -LC_ALL=C \ -PATH=/bin \ -HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \ -USER=test \ -LOGNAME=test \ -XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \ -XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \ -XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ -/usr/bin/qemu-system-x86_64 \ --name guest=QEMUGuest1,debug-threads=on \ --S \ --object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \ --machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ --accel tcg \ --cpu qemu64 \ --m size=219136k \ --object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ --overcommit mem-lock=off \ --smp 1,sockets=1,cores=1,threads=1 \ --uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ --display none \ --no-user-config \ --nodefaults \ --chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ --mon chardev=charmonitor,id=monitor,mode=control \ --rtc base=utc \ --no-shutdown \ --boot strict=on \ --usb \ --audiodev '{"id":"audio1","driver":"none"}' \ --device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x2"}' \ --sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ --msg timestamp=on diff --git a/tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.err b/tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.err new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.err @@ -0,0 +1 @@ +unsupported configuration: no model provided for USB controller diff --git a/tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.xml b/tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.xml deleted file mode 100644 index XXXXXXX..XXXXXXX --- a/tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.xml +++ /dev/null @@ -XXX,XX +XXX,XX @@ -<domain type='qemu'> - <name>QEMUGuest1</name> - <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> - <memory unit='KiB'>219136</memory> - <currentMemory unit='KiB'>219136</currentMemory> - <vcpu placement='static'>1</vcpu> - <os> - <type arch='x86_64' machine='pc'>hvm</type> - <boot dev='hd'/> - </os> - <cpu mode='custom' match='exact' check='none'> - <model fallback='forbid'>qemu64</model> - </cpu> - <clock offset='utc'/> - <on_poweroff>destroy</on_poweroff> - <on_reboot>restart</on_reboot> - <on_crash>destroy</on_crash> - <devices> - <emulator>/usr/bin/qemu-system-x86_64</emulator> - <controller type='usb' index='0'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> - </controller> - <controller type='pci' index='0' model='pci-root'/> - <input type='mouse' bus='ps2'/> - <input type='keyboard' bus='ps2'/> - <audio id='1' type='none'/> - <memballoon model='virtio'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> - </memballoon> - </devices> -</domain> diff --git a/tests/qemuxmlconfdata/usb-controller-default-unavailable-q35.x86_64-latest.xml b/tests/qemuxmlconfdata/usb-controller-default-unavailable-q35.x86_64-latest.xml deleted file mode 100644 index XXXXXXX..XXXXXXX --- a/tests/qemuxmlconfdata/usb-controller-default-unavailable-q35.x86_64-latest.xml +++ /dev/null @@ -XXX,XX +XXX,XX @@ -<domain type='qemu'> - <name>q35-test</name> - <uuid>11dbdcdd-4c3b-482b-8903-9bdb8c0a2774</uuid> - <memory unit='KiB'>2097152</memory> - <currentMemory unit='KiB'>2097152</currentMemory> - <vcpu placement='static'>1</vcpu> - <os> - <type arch='x86_64' machine='q35'>hvm</type> - <boot dev='hd'/> - </os> - <cpu mode='custom' match='exact' check='none'> - <model fallback='forbid'>qemu64</model> - </cpu> - <clock offset='utc'/> - <on_poweroff>destroy</on_poweroff> - <on_reboot>restart</on_reboot> - <on_crash>destroy</on_crash> - <devices> - <emulator>/usr/bin/qemu-system-x86_64</emulator> - <controller type='pci' index='0' model='pcie-root'/> - <controller type='usb' index='0'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> - </controller> - <controller type='sata' index='0'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/> - </controller> - <input type='mouse' bus='ps2'/> - <input type='keyboard' bus='ps2'/> - <audio id='1' type='none'/> - <watchdog model='itco' action='reset'/> - <memballoon model='none'/> - </devices> -</domain> diff --git a/tests/qemuxmlconfdata/usb-controller-nec-xhci-unavailable.x86_64-latest.xml b/tests/qemuxmlconfdata/usb-controller-nec-xhci-unavailable.x86_64-latest.xml deleted file mode 100644 index XXXXXXX..XXXXXXX --- a/tests/qemuxmlconfdata/usb-controller-nec-xhci-unavailable.x86_64-latest.xml +++ /dev/null @@ -XXX,XX +XXX,XX @@ -<domain type='qemu'> - <name>q35-test</name> - <uuid>11dbdcdd-4c3b-482b-8903-9bdb8c0a2774</uuid> - <memory unit='KiB'>2097152</memory> - <currentMemory unit='KiB'>2097152</currentMemory> - <vcpu placement='static'>1</vcpu> - <os> - <type arch='x86_64' machine='q35'>hvm</type> - <boot dev='hd'/> - </os> - <cpu mode='custom' match='exact' check='none'> - <model fallback='forbid'>qemu64</model> - </cpu> - <clock offset='utc'/> - <on_poweroff>destroy</on_poweroff> - <on_reboot>restart</on_reboot> - <on_crash>destroy</on_crash> - <devices> - <emulator>/usr/bin/qemu-system-x86_64</emulator> - <controller type='pci' index='0' model='pcie-root'/> - <controller type='usb' index='0' model='nec-xhci'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> - </controller> - <controller type='sata' index='0'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/> - </controller> - <input type='mouse' bus='ps2'/> - <input type='keyboard' bus='ps2'/> - <audio id='1' type='none'/> - <watchdog model='itco' action='reset'/> - <memballoon model='none'/> - </devices> -</domain> diff --git a/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args deleted file mode 100644 index XXXXXXX..XXXXXXX --- a/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args +++ /dev/null @@ -XXX,XX +XXX,XX @@ -LC_ALL=C \ -PATH=/bin \ -HOME=/var/lib/libvirt/qemu/domain--1-guest \ -USER=test \ -LOGNAME=test \ -XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \ -XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \ -XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ -/usr/bin/qemu-system-x86_64 \ --name guest=guest,debug-threads=on \ --S \ --object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ --machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ --accel tcg \ --cpu qemu64 \ --m size=4194304k \ --object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":4294967296}' \ --overcommit mem-lock=off \ --smp 4,sockets=4,cores=1,threads=1 \ --uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ --display none \ --no-user-config \ --nodefaults \ --chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ --mon chardev=charmonitor,id=monitor,mode=control \ --rtc base=utc \ --no-shutdown \ --boot strict=on \ --usb \ --device '{"driver":"usb-tablet","id":"input0","bus":"usb.0","port":"1"}' \ --audiodev '{"id":"audio1","driver":"none"}' \ --sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ --msg timestamp=on diff --git a/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.err b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.err new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.err @@ -0,0 +1 @@ +unsupported configuration: no model provided for USB controller diff --git a/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml deleted file mode 100644 index XXXXXXX..XXXXXXX --- a/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml +++ /dev/null @@ -XXX,XX +XXX,XX @@ -<domain type='qemu'> - <name>guest</name> - <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> - <memory unit='KiB'>4194304</memory> - <currentMemory unit='KiB'>4194304</currentMemory> - <vcpu placement='static'>4</vcpu> - <os> - <type arch='x86_64' machine='pc'>hvm</type> - <boot dev='hd'/> - </os> - <cpu mode='custom' match='exact' check='none'> - <model fallback='forbid'>qemu64</model> - </cpu> - <clock offset='utc'/> - <on_poweroff>destroy</on_poweroff> - <on_reboot>restart</on_reboot> - <on_crash>destroy</on_crash> - <devices> - <emulator>/usr/bin/qemu-system-x86_64</emulator> - <controller type='usb' index='0'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> - </controller> - <controller type='pci' index='0' model='pci-root'/> - <input type='tablet' bus='usb'/> - <input type='mouse' bus='ps2'/> - <input type='keyboard' bus='ps2'/> - <audio id='1' type='none'/> - <memballoon model='none'/> - </devices> -</domain> diff --git a/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.err b/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.err index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.err +++ b/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.err @@ -1 +1 @@ -unsupported configuration: Multiple legacy USB controllers are not supported +unsupported configuration: no model provided for USB controller diff --git a/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.xml b/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.xml deleted file mode 100644 index XXXXXXX..XXXXXXX --- a/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.xml +++ /dev/null @@ -XXX,XX +XXX,XX @@ -<domain type='qemu'> - <name>guest</name> - <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> - <memory unit='KiB'>4194304</memory> - <currentMemory unit='KiB'>4194304</currentMemory> - <vcpu placement='static'>4</vcpu> - <os> - <type arch='x86_64' machine='pc'>hvm</type> - <boot dev='hd'/> - </os> - <cpu mode='custom' match='exact' check='none'> - <model fallback='forbid'>qemu64</model> - </cpu> - <clock offset='utc'/> - <on_poweroff>destroy</on_poweroff> - <on_reboot>restart</on_reboot> - <on_crash>destroy</on_crash> - <devices> - <emulator>/usr/bin/qemu-system-x86_64</emulator> - <controller type='usb' index='0'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> - </controller> - <controller type='usb' index='1'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> - </controller> - <controller type='pci' index='0' model='pci-root'/> - <input type='mouse' bus='ps2'/> - <input type='keyboard' bus='ps2'/> - <audio id='1' type='none'/> - <memballoon model='none'/> - </devices> -</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -XXX,XX +XXX,XX @@ mymain(void) DO_TEST_CAPS_LATEST_PARSE_ERROR("usb-controller-default-isapc"); DO_TEST_CAPS_LATEST("usb-controller-default-i440fx"); DO_TEST_CAPS_LATEST("usb-controller-default-q35"); - /* i440fx downgrades to use '-usb' if the explicit controller is not present */ + /* Both i440fx and q35 error out when the default USB controller + * type is not available */ DO_TEST_FULL("usb-controller-default-unavailable-i440fx", ".x86_64-latest", ARG_CAPS_ARCH, "x86_64", ARG_CAPS_VER, "latest", + ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR, ARG_QEMU_CAPS_DEL, QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_LAST, ARG_END); - /* q35 fails instead */ DO_TEST_FULL("usb-controller-default-unavailable-q35", ".x86_64-latest", ARG_CAPS_ARCH, "x86_64", ARG_CAPS_VER, "latest", - ARG_FLAGS, FLAG_EXPECT_FAILURE, + ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR, ARG_QEMU_CAPS_DEL, QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_LAST, ARG_END); /* However, if the USB controller is the one that gets added @@ -XXX,XX +XXX,XX @@ mymain(void) DO_TEST_FULL("usb-legacy-multiple", ".x86_64-latest", ARG_CAPS_ARCH, "x86_64", ARG_CAPS_VER, "latest", - ARG_FLAGS, FLAG_EXPECT_FAILURE, + ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR, ARG_QEMU_CAPS_DEL, QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_LAST, ARG_END); DO_TEST_FULL("usb-legacy-device", ".x86_64-latest", ARG_CAPS_ARCH, "x86_64", ARG_CAPS_VER, "latest", + ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR, ARG_QEMU_CAPS_DEL, QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_LAST, ARG_END); @@ -XXX,XX +XXX,XX @@ mymain(void) DO_TEST_FULL("usb-controller-nec-xhci-unavailable", ".x86_64-latest", ARG_CAPS_ARCH, "x86_64", ARG_CAPS_VER, "latest", - ARG_FLAGS, FLAG_EXPECT_FAILURE, + ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR, ARG_QEMU_CAPS_DEL, QEMU_CAPS_NEC_USB_XHCI, QEMU_CAPS_LAST, ARG_END); DO_TEST_CAPS_LATEST("usb-controller-nex-xhci-autoassign"); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Use the same wording as for SCSI controllers, which also happens to contain additional information (the controller's index). The new error message and error type are more accurate anyway: in most cases, it's perfectly fine for the user not to provide a controller model explicitly, as libvirt will try to figure out a reasonable default. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_validate.c | 5 +++-- ...b-controller-default-unavailable-i440fx.x86_64-latest.err | 2 +- .../usb-controller-default-unavailable-q35.x86_64-latest.err | 2 +- tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.err | 2 +- tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.err | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefControllerUSB(const virDomainControllerDef *def, return 0; if (def->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("no model provided for USB controller")); + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unable to determine model for USB controller idx=%1$d"), + def->idx); return -1; } diff --git a/tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.err b/tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.err index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.err +++ b/tests/qemuxmlconfdata/usb-controller-default-unavailable-i440fx.x86_64-latest.err @@ -1 +1 @@ -unsupported configuration: no model provided for USB controller +internal error: Unable to determine model for USB controller idx=0 diff --git a/tests/qemuxmlconfdata/usb-controller-default-unavailable-q35.x86_64-latest.err b/tests/qemuxmlconfdata/usb-controller-default-unavailable-q35.x86_64-latest.err index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/usb-controller-default-unavailable-q35.x86_64-latest.err +++ b/tests/qemuxmlconfdata/usb-controller-default-unavailable-q35.x86_64-latest.err @@ -1 +1 @@ -unsupported configuration: no model provided for USB controller +internal error: Unable to determine model for USB controller idx=0 diff --git a/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.err b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.err index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.err +++ b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.err @@ -1 +1 @@ -unsupported configuration: no model provided for USB controller +internal error: Unable to determine model for USB controller idx=0 diff --git a/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.err b/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.err index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.err +++ b/tests/qemuxmlconfdata/usb-legacy-multiple.x86_64-latest.err @@ -1 +1 @@ -unsupported configuration: no model provided for USB controller +internal error: Unable to determine model for USB controller idx=0 -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
With the recent changes, we have ensured that all situations that would have until now caused this code to be executed are either handled by dropping the USB controller or by raising an error. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_command.c | 78 ----------------------------------------- src/qemu/qemu_domain.c | 11 ------ 2 files changed, 89 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -XXX,XX +XXX,XX @@ qemuBuildControllerDevProps(const virDomainDef *domainDef, } -static bool -qemuBuildDomainForbidLegacyUSBController(const virDomainDef *def) -{ - if (qemuDomainIsQ35(def) || - qemuDomainIsARMVirt(def) || - qemuDomainIsRISCVVirt(def)) - return true; - - return false; -} - - -static int -qemuBuildLegacyUSBControllerCommandLine(virCommand *cmd, - const virDomainDef *def) -{ - size_t i; - size_t nlegacy = 0; - size_t nusb = 0; - - for (i = 0; i < def->ncontrollers; i++) { - virDomainControllerDef *cont = def->controllers[i]; - - if (cont->type != VIR_DOMAIN_CONTROLLER_TYPE_USB) - continue; - - /* If we have mode='none', there are no other USB controllers */ - if (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE) - return 0; - - if (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT) - nlegacy++; - else - nusb++; - } - - if (nlegacy > 1) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("Multiple legacy USB controllers are not supported")); - return -1; - } - - if (nusb == 0 && - nlegacy > 0 && - !qemuBuildDomainForbidLegacyUSBController(def) && - !ARCH_IS_S390(def->os.arch)) { - /* We haven't added any USB controller yet, but we haven't been asked - * not to add one either. Add a legacy USB controller, unless we're - * creating a kind of guest we want to keep legacy-free */ - virCommandAddArg(cmd, "-usb"); - } - - return 0; -} - - /** * qemuBuildSkipController: * @controller: Controller to check @@ -XXX,XX +XXX,XX @@ qemuBuildControllersByTypeCommandLine(virCommand *cmd, continue; } - if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_USB && - cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT && - !qemuBuildDomainForbidLegacyUSBController(def)) { - - /* An appropriate default USB controller model should already - * have been selected in qemuDomainDeviceDefPostParse(); if - * we still have no model by now, we have to fall back to the - * legacy USB controller. - * - * Note that we *don't* want to end up with the legacy USB - * controller for q35 and virt machines, so we go ahead and - * fail in qemuBuildControllerDevProps(); on the other hand, - * for s390 machines we want to ignore any USB controller - * (see 548ba43028 for the full story), so we skip - * qemuBuildControllerDevProps() but we don't ultimately end - * up adding the legacy USB controller */ - continue; - } - if (qemuBuildControllerDevProps(def, cont, qemuCaps, &props) < 0) return -1; @@ -XXX,XX +XXX,XX @@ qemuBuildControllersCommandLine(virCommand *cmd, return -1; } - if (qemuBuildLegacyUSBControllerCommandLine(cmd, def) < 0) - return -1; - return 0; } diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, case VIR_DOMAIN_CONTROLLER_TYPE_USB: if (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT && qemuCaps) { - /* Pick a suitable default model for the USB controller if none - * has been selected by the user and we have the qemuCaps for - * figuring out which controllers are supported. - * - * We rely on device availability instead of setting the model - * unconditionally because, for some machine types, there's a - * chance we will get away with using the legacy USB controller - * when the relevant device is not available. - * - * See qemuBuildControllersCommandLine() */ - /* Default USB controller is piix3-uhci if available. */ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI)) cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI; -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Extract the logic from qemuDomainControllerDefPostParse(). The behavior is unchanged, we simply use an out argument to return the model and entertain the possibility of the process failing, even though the current implementation never will. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 80 +++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 32 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultSCSIControllerModel(virDomainControllerModelSCSI *model, } +static int +qemuDomainDefaultUSBControllerModel(virDomainControllerModelUSB *model, + const virDomainDef *def, + virQEMUCaps *qemuCaps, + unsigned int parseFlags) +{ + /* Default USB controller is piix3-uhci if available. */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI)) + *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI; + + if (ARCH_IS_S390(def->os.arch)) { + /* No default model on s390x, one has to be provided + * explicitly by the user */ + *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE; + } else if (ARCH_IS_PPC64(def->os.arch)) { + /* To not break migration we need to set default USB controller + * for ppc64 to pci-ohci if we cannot change ABI of the VM. + * The nec-usb-xhci or qemu-xhci controller is used as default + * only for newly defined domains or devices. */ + if ((parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) { + *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; + } else if ((parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) { + *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; + } else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI)) { + *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI; + } else { + /* Explicitly fallback to legacy USB controller for PPC64. */ + *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT; + } + } else if (def->os.arch == VIR_ARCH_AARCH64) { + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) + *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; + else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) + *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; + } + + return 0; +} + static int qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, virDomainDef *def, @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, break; case VIR_DOMAIN_CONTROLLER_TYPE_USB: - if (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT && qemuCaps) { - /* Default USB controller is piix3-uhci if available. */ - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI)) - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI; - - if (ARCH_IS_S390(def->os.arch)) { - /* No default model on s390x, one has to be provided - * explicitly by the user */ - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE; - } else if (ARCH_IS_PPC64(def->os.arch)) { - /* To not break migration we need to set default USB controller - * for ppc64 to pci-ohci if we cannot change ABI of the VM. - * The nec-usb-xhci or qemu-xhci controller is used as default - * only for newly defined domains or devices. */ - if ((parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) && - virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) { - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; - } else if ((parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) && - virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) { - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; - } else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI)) { - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI; - } else { - /* Explicitly fallback to legacy USB controller for PPC64. */ - cont->model = -1; - } - } else if (def->os.arch == VIR_ARCH_AARCH64) { - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; - else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) - cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; - } + if (qemuCaps && + cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT && + qemuDomainDefaultUSBControllerModel(&cont->model, def, qemuCaps, parseFlags) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unable to determine model for USB controller idx=%1$d"), + cont->idx); + return -1; } /* Make sure the 'none' USB controller doesn't have an address -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
In addition to the code in qemuDomainControllerDefPostParse(), which we have just factored into its own function, we also have some code in qemuDomainDefAddDefaultDevices() that deals with choosing the model for a USB controller, specifically for q35 guests. Integrate it into the newly-created function. Since we want slightly different behaviors depending on whether the USB controller that we're working on is the one that we try to automatically add for certain new guests (addDefaultUSB), we need to introduce a new parameter to the function. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 50 ++++++++++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultSCSIControllerModel(virDomainControllerModelSCSI *model, static int qemuDomainDefaultUSBControllerModel(virDomainControllerModelUSB *model, + bool autoAdded, const virDomainDef *def, virQEMUCaps *qemuCaps, unsigned int parseFlags) @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultUSBControllerModel(virDomainControllerModelUSB *model, *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; } + if (ARCH_IS_X86(def->os.arch)) { + if (qemuDomainIsQ35(def) && autoAdded) { + /* Prefer adding a USB3 controller if supported, fall back + * to USB2 if there is no USB3 available, and if that's + * unavailable don't add anything. + */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) + *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; + else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) + *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; + else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_ICH9_USB_EHCI1)) + *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_EHCI1; + else + *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT; + } + } + return 0; } static int qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, virDomainDef *def, - virQEMUCaps *qemuCaps) + virQEMUCaps *qemuCaps, + unsigned int parseFlags) { bool addDefaultUSB = false; - int usbModel = -1; /* "default for machinetype" */ + virDomainControllerModelUSB usbModel = VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT; int pciRoot; /* index within def->controllers */ bool addImplicitSATA = false; bool addPCIRoot = false; @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, addPCIeRoot = true; addImplicitSATA = true; addITCOWatchdog = true; - - /* Prefer adding a USB3 controller if supported, fall back - * to USB2 if there is no USB3 available, and if that's - * unavailable don't add anything. - */ - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) - usbModel = VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; - else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) - usbModel = VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; - else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_ICH9_USB_EHCI1)) - usbModel = VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_EHCI1; - else - addDefaultUSB = false; break; } if (qemuDomainIsI440FX(def)) @@ -XXX,XX +XXX,XX @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, break; } + if (addDefaultUSB) { + /* If no reasonable model can be figured out, we should + * simply not add the default USB controller */ + if (qemuDomainDefaultUSBControllerModel(&usbModel, true, def, qemuCaps, parseFlags) < 0 || + usbModel == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT) { + addDefaultUSB = false; + } + } + + if (addDefaultUSB && virDomainControllerFind(def, VIR_DOMAIN_CONTROLLER_TYPE_USB, 0) < 0 && virDomainDefAddUSBController(def, 0, usbModel) < 0) @@ -XXX,XX +XXX,XX @@ qemuDomainDefPostParse(virDomainDef *def, if (qemuDomainDefBootPostParse(def, driver, parseFlags) < 0) return -1; - if (qemuDomainDefAddDefaultDevices(driver, def, qemuCaps) < 0) + if (qemuDomainDefAddDefaultDevices(driver, def, qemuCaps, parseFlags) < 0) return -1; if (qemuDomainDefSetDefaultCPU(def, driver->hostarch, qemuCaps) < 0) @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, case VIR_DOMAIN_CONTROLLER_TYPE_USB: if (qemuCaps && cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT && - qemuDomainDefaultUSBControllerModel(&cont->model, def, qemuCaps, parseFlags) < 0) { + qemuDomainDefaultUSBControllerModel(&cont->model, false, def, qemuCaps, parseFlags) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Unable to determine model for USB controller idx=%1$d"), cont->idx); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Just like qemuDomainDefaultSCSIControllerModel() before that, split the function into an internal part and a trivial public wrapper. This allows us to rewrite the internal logic in the much more compact and readable if (condition) return value; if (other_condition) return other_value; return default_value; style, while still implementing the usual error handling behavior and avoiding any ambiguity caused by VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT having value -1. The conversion is straightforward if messy, with one notable exception: the piix3-uhci case, which serves as our fallback, has to be moved from the top of the function to the bottom due the change from the previous set-and-overwrite approach to the new return-early approach. The use of 'else if' is eliminated completely, comments are updated and improved. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 143 +++++++++++++++++++++++++++++------------ 1 file changed, 101 insertions(+), 42 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultSCSIControllerModel(virDomainControllerModelSCSI *model, } -static int -qemuDomainDefaultUSBControllerModel(virDomainControllerModelUSB *model, - bool autoAdded, - const virDomainDef *def, - virQEMUCaps *qemuCaps, - unsigned int parseFlags) +/* Internal. Use qemuDomainDefaultUSBControllerModel() instead */ +static virDomainControllerModelUSB +qemuDomainDefaultUSBControllerModelInternal(bool autoAdded, + const virDomainDef *def, + virQEMUCaps *qemuCaps, + unsigned int parseFlags) { - /* Default USB controller is piix3-uhci if available. */ - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI)) - *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI; + bool abiUpdate = !!(parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE); if (ARCH_IS_S390(def->os.arch)) { /* No default model on s390x, one has to be provided * explicitly by the user */ - *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE; - } else if (ARCH_IS_PPC64(def->os.arch)) { - /* To not break migration we need to set default USB controller - * for ppc64 to pci-ohci if we cannot change ABI of the VM. - * The nec-usb-xhci or qemu-xhci controller is used as default - * only for newly defined domains or devices. */ - if ((parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) && - virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) { - *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; - } else if ((parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) && - virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) { - *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; - } else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI)) { - *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI; - } else { - /* Explicitly fallback to legacy USB controller for PPC64. */ - *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT; - } - } else if (def->os.arch == VIR_ARCH_AARCH64) { + return VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE; + } + + if (ARCH_IS_PPC64(def->os.arch)) { + /* Newly-defined guests should use USB3 if possible */ + if (abiUpdate && virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) + return VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; + if (abiUpdate && virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) + return VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; + + /* To preserve backwards compatibility, existing guests need to + * use pci-ohci (USB2) instead */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI)) + return VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI; + + /* If neither USB3 nor USB2 can be used, bail */ + return VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT; + } + + if (def->os.arch == VIR_ARCH_AARCH64) { + /* Prefer USB3 */ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) - *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; - else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) - *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; + return VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) + return VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; + + /* If USB3 is unavailable, we should probably bail by + * returning VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT here + * instead of possibly falling back to piix3-uhci (USB1), but + * historically we haven't done that and starting now might + * cause backwards compatibility issues */ } if (ARCH_IS_X86(def->os.arch)) { if (qemuDomainIsQ35(def) && autoAdded) { - /* Prefer adding a USB3 controller if supported, fall back - * to USB2 if there is no USB3 available, and if that's - * unavailable don't add anything. - */ + /* Prefer USB3 */ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) - *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; - else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) - *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; - else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_ICH9_USB_EHCI1)) - *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_EHCI1; - else - *model = VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT; + return VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI)) + return VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI; + + /* Fall back to USB2 */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_ICH9_USB_EHCI1)) + return VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_EHCI1; + + /* If no suitable device is available, simply avoid + * adding the controller. + * + * Note that this is only the case for the USB controller + * that gets automatically added for new guests, and only + * for the q35 machine type */ + return VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT; } } + /* The default USB controller is piix3-uhci (USB1) if available. + * This choice is a fairly poor one, rooted primarily in historical + * reasons; thankfully, in most cases we will overwrite it with a + * much more reasonable value below */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI)) + return VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI; + + return VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT; +} + + +/** + * qemuDomainDefaultUSBControllerModel: + * @model: return location + * @autoAdded: whether this controller is being automatically added + * @def: domain definition + * @cont: controller definition, or NULL + * @qemuCaps: QEMU capabilities, or NULL + * @parseFlags: parse flags + * + * Choose a reasonable model to use for a USB controller where a + * specific one hasn't been provided by the user. + * + * The choice is based on a number of factors, including the guest's + * architecture and machine type. @qemuCaps, if provided, might be + * taken into consideration too. + * + * @autoAdded should be true is this is a controller that libvirt is + * trying to automatically add on domain creation for the user's + * convenience: in that case, the function might decide that the best + * course of action is to not add the controller after all. This + * decision will be communicated to the caller by setting @model + * to VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT. + * + * Not being able to come up with a value is NOT considered a + * failure. It's up to the caller to decide how to handle that + * scenario. + * + * Returns: 0 on success, <0 on failure. + */ +static int +qemuDomainDefaultUSBControllerModel(virDomainControllerModelUSB *model, + bool autoAdded, + const virDomainDef *def, + virQEMUCaps *qemuCaps, + unsigned int parseFlags) +{ + *model = qemuDomainDefaultUSBControllerModelInternal(autoAdded, def, qemuCaps, parseFlags); return 0; } -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
Currently we fall back to the x86-derived default of piix3-uhci, which is a USB1 controller that's not virtualization-friendly and overall a terrible choice for a modern architecture. The fact that we didn't choose a better default when RISC-V support was introduced was an oversight which is now addressed. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 9 +++++++ ...ault-models.riscv64-latest.abi-update.args | 15 +++++------ ...fault-models.riscv64-latest.abi-update.xml | 26 ++++++++----------- ...64-virt-default-models.riscv64-latest.args | 15 +++++------ ...v64-virt-default-models.riscv64-latest.xml | 26 ++++++++----------- 5 files changed, 45 insertions(+), 46 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -XXX,XX +XXX,XX @@ qemuDomainDefaultUSBControllerModelInternal(bool autoAdded, { bool abiUpdate = !!(parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE); + /* For modern architectures we want to use qemu-xhci (USB3), with + * no fallback if that's not available */ + if (qemuDomainIsRISCVVirt(def)) { + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QEMU_XHCI)) { + return VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI; + } + return VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT; + } + if (ARCH_IS_S390(def->os.arch)) { /* No default model on s390x, one has to be provided * explicitly by the user */ diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.args b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.args index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.args +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.args @@ -XXX,XX +XXX,XX @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ -boot strict=on \ -device '{"driver":"pcie-root-port","port":8,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x1"}' \ -device '{"driver":"pcie-root-port","port":9,"chassis":2,"id":"pci.2","bus":"pcie.0","addr":"0x1.0x1"}' \ --device '{"driver":"pcie-pci-bridge","id":"pci.3","bus":"pci.1","addr":"0x0"}' \ --device '{"driver":"pcie-root-port","port":10,"chassis":4,"id":"pci.4","bus":"pcie.0","addr":"0x1.0x2"}' \ --device '{"driver":"pcie-root-port","port":11,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x1.0x3"}' \ --device '{"driver":"pcie-root-port","port":12,"chassis":6,"id":"pci.6","bus":"pcie.0","addr":"0x1.0x4"}' \ --device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.3","addr":"0x1"}' \ --device '{"driver":"virtio-scsi-pci","id":"scsi0","bus":"pci.4","addr":"0x0"}' \ +-device '{"driver":"pcie-root-port","port":10,"chassis":3,"id":"pci.3","bus":"pcie.0","addr":"0x1.0x2"}' \ +-device '{"driver":"pcie-root-port","port":11,"chassis":4,"id":"pci.4","bus":"pcie.0","addr":"0x1.0x3"}' \ +-device '{"driver":"pcie-root-port","port":12,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x1.0x4"}' \ +-device '{"driver":"qemu-xhci","id":"usb","bus":"pci.2","addr":"0x0"}' \ +-device '{"driver":"virtio-scsi-pci","id":"scsi0","bus":"pci.3","addr":"0x0"}' \ -netdev '{"type":"user","id":"hostnet0"}' \ --device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","bus":"pci.2","addr":"0x0"}' \ +-device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","bus":"pci.1","addr":"0x0"}' \ -chardev pty,id=charserial0 \ -serial chardev:charserial0 \ -audiodev '{"id":"audio1","driver":"none"}' \ --device '{"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pci.5","addr":"0x0"}' \ +-device '{"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pci.4","addr":"0x0"}' \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ -msg timestamp=on diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.xml b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.xml +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.abi-update.xml @@ -XXX,XX +XXX,XX @@ <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu-system-riscv64</emulator> - <controller type='usb' index='0' model='piix3-uhci'> - <address type='pci' domain='0x0000' bus='0x03' slot='0x01' function='0x0'/> + <controller type='usb' index='0' model='qemu-xhci'> + <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </controller> <controller type='scsi' index='0' model='virtio-scsi'> - <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> </controller> <controller type='pci' index='0' model='pcie-root'/> <controller type='pci' index='1' model='pcie-root-port'> @@ -XXX,XX +XXX,XX @@ <target chassis='2' port='0x9'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> - <controller type='pci' index='3' model='pcie-to-pci-bridge'> - <model name='pcie-pci-bridge'/> - <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> - </controller> - <controller type='pci' index='4' model='pcie-root-port'> + <controller type='pci' index='3' model='pcie-root-port'> <model name='pcie-root-port'/> - <target chassis='4' port='0xa'/> + <target chassis='3' port='0xa'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> - <controller type='pci' index='5' model='pcie-root-port'> + <controller type='pci' index='4' model='pcie-root-port'> <model name='pcie-root-port'/> - <target chassis='5' port='0xb'/> + <target chassis='4' port='0xb'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/> </controller> - <controller type='pci' index='6' model='pcie-root-port'> + <controller type='pci' index='5' model='pcie-root-port'> <model name='pcie-root-port'/> - <target chassis='6' port='0xc'/> + <target chassis='5' port='0xc'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/> </controller> <interface type='user'> <mac address='52:54:00:09:a4:37'/> <model type='virtio'/> - <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface> <serial type='pty'> <target type='system-serial' port='0'> @@ -XXX,XX +XXX,XX @@ <audio id='1' type='none'/> <video> <model type='virtio' heads='1' primary='yes'/> - <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </video> <memballoon model='none'/> </devices> diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.args @@ -XXX,XX +XXX,XX @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \ -boot strict=on \ -device '{"driver":"pcie-root-port","port":8,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x1"}' \ -device '{"driver":"pcie-root-port","port":9,"chassis":2,"id":"pci.2","bus":"pcie.0","addr":"0x1.0x1"}' \ --device '{"driver":"pcie-pci-bridge","id":"pci.3","bus":"pci.1","addr":"0x0"}' \ --device '{"driver":"pcie-root-port","port":10,"chassis":4,"id":"pci.4","bus":"pcie.0","addr":"0x1.0x2"}' \ --device '{"driver":"pcie-root-port","port":11,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x1.0x3"}' \ --device '{"driver":"pcie-root-port","port":12,"chassis":6,"id":"pci.6","bus":"pcie.0","addr":"0x1.0x4"}' \ --device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.3","addr":"0x1"}' \ --device '{"driver":"virtio-scsi-pci","id":"scsi0","bus":"pci.4","addr":"0x0"}' \ +-device '{"driver":"pcie-root-port","port":10,"chassis":3,"id":"pci.3","bus":"pcie.0","addr":"0x1.0x2"}' \ +-device '{"driver":"pcie-root-port","port":11,"chassis":4,"id":"pci.4","bus":"pcie.0","addr":"0x1.0x3"}' \ +-device '{"driver":"pcie-root-port","port":12,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x1.0x4"}' \ +-device '{"driver":"qemu-xhci","id":"usb","bus":"pci.2","addr":"0x0"}' \ +-device '{"driver":"virtio-scsi-pci","id":"scsi0","bus":"pci.3","addr":"0x0"}' \ -netdev '{"type":"user","id":"hostnet0"}' \ --device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","bus":"pci.2","addr":"0x0"}' \ +-device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":"52:54:00:09:a4:37","bus":"pci.1","addr":"0x0"}' \ -chardev pty,id=charserial0 \ -serial chardev:charserial0 \ -audiodev '{"id":"audio1","driver":"none"}' \ --device '{"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pci.5","addr":"0x0"}' \ +-device '{"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pci.4","addr":"0x0"}' \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ -msg timestamp=on diff --git a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml +++ b/tests/qemuxmlconfdata/riscv64-virt-default-models.riscv64-latest.xml @@ -XXX,XX +XXX,XX @@ <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu-system-riscv64</emulator> - <controller type='usb' index='0' model='piix3-uhci'> - <address type='pci' domain='0x0000' bus='0x03' slot='0x01' function='0x0'/> + <controller type='usb' index='0' model='qemu-xhci'> + <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </controller> <controller type='scsi' index='0' model='virtio-scsi'> - <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> </controller> <controller type='pci' index='0' model='pcie-root'/> <controller type='pci' index='1' model='pcie-root-port'> @@ -XXX,XX +XXX,XX @@ <target chassis='2' port='0x9'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> - <controller type='pci' index='3' model='pcie-to-pci-bridge'> - <model name='pcie-pci-bridge'/> - <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> - </controller> - <controller type='pci' index='4' model='pcie-root-port'> + <controller type='pci' index='3' model='pcie-root-port'> <model name='pcie-root-port'/> - <target chassis='4' port='0xa'/> + <target chassis='3' port='0xa'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> - <controller type='pci' index='5' model='pcie-root-port'> + <controller type='pci' index='4' model='pcie-root-port'> <model name='pcie-root-port'/> - <target chassis='5' port='0xb'/> + <target chassis='4' port='0xb'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/> </controller> - <controller type='pci' index='6' model='pcie-root-port'> + <controller type='pci' index='5' model='pcie-root-port'> <model name='pcie-root-port'/> - <target chassis='6' port='0xc'/> + <target chassis='5' port='0xc'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/> </controller> <interface type='user'> <mac address='52:54:00:09:a4:37'/> <model type='virtio'/> - <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface> <serial type='pty'> <target type='system-serial' port='0'> @@ -XXX,XX +XXX,XX @@ <audio id='1' type='none'/> <video> <model type='virtio' heads='1' primary='yes'/> - <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </video> <memballoon model='none'/> </devices> -- 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org