[libvirt] [PATCH v3 00/52] qemu: Store default CPU in domain XML

When starting a domain without a CPU model specified in the domain XML, QEMU will choose a default one. Which is fine unless the domain gets migrated to another host because libvirt doesn't perform any CPU ABI checks and the virtual CPU provided by QEMU on the destination host can differ from the one on the source host. With QEMU 4.2.0 we can probe for the default CPU model used by QEMU for a particular machine type and store it in the domain XML. This way the chosen CPU model is more visible to users and libvirt will make sure the guest will see the exact same CPU after migration. https://bugzilla.redhat.com/show_bug.cgi?id=1598151 https://bugzilla.redhat.com/show_bug.cgi?id=1598162 Version 2: - more tests - TCG-only support for non x86_64 architectures Version 3: - as a result of talking with QEMU developers dealing with s390 and ppc64 I have to enhance the series so that libvirt is able to fetch different default CPU models on TCG vs. KVM --- Some patches were too large so I decided to shorten them before sending to the list. You can check the full version of this series with git fetch https://gitlab.com/jirkade/libvirt cpu-default-type Jiri Denemark (52): tests: Add capabilities for QEMU 4.2.0 on s390x tests: Update 4.2.0 capabilities data on ppc64 conf: Use VIR_AUTO* in virDomainCapsCPUModelsAdd conf: Drop nameLen parameter from virDomainCapsCPUModelsAdd qemu: Copy CPU models in virQEMUCapsGetCPUDefinitions qemu: Filter models in virQEMUCapsGetCPUDefinitions qemu: Use virQEMUCapsGetCPUDefinitions more qemu: Use g_autoptr in qemuMonitorJSONGetCPUDefinitions qemu: Change return type of virQEMUCapsFetchCPUDefinitions qemu: Introduce qemuMonitorCPUDefs struct qemu: Flatten qemuMonitorCPUDefs.cpus qemu: Add qemuMonitorCPUDefsCopy qemu: Use g_autofree in virQEMUCapsLoadCPUModels qemu: Use virDomainCapsCPUUsable in qemuMonitorCPUDefInfo qemu: Introduce virQEMUCapsCPUDefsToModels qemu: Rename virQEMUCaps{Get,Fetch}CPUDefinitions qemu: Split virQEMUCapsFetchCPUModels qemu: Switch qemuCaps to use qemuMonitorCPUDefs conf: Drop unused virDomainCapsCPUModelsFilter conf: Drop virDomainCapsCPUModelsAddSteal qemu: Store typename from query-cpu-definitions in qemuCaps qemu: Drop unused virQEMUCapsGetDefaultMachine qemu: Add virQEMUCaps{Load,Format}Accel qemu: Introduce virQEMUCapsAccel structure qemu: Introduce virQEMUCapsAccelCopy qemu: Introduce virQEMUCapsAccelClear qemu: Introduce and use virQEMUCapsGetAccel qemu: Drop virQEMUCapsGetHostCPUData qemu: Refactor virQEMUCapsLoadAccel qemu: Refactor virQEMUCapsFormatAccel qemu: Introduce virQEMUCapsProbeCPUDefinitionsTest qemu: Refactor probing of accelerator dependent data qemu: Make virQEMUCapsGetMachineTypesCaps static qemu: Make virQEMUCapsIsMachineSupported static qemu: Refactor virQEMUCapsLoadCache a bit qemu: Refactor virQEMUCapsFormatCache a bit qemu: Pass virDomainVirtType to APIs dealing with machine types qemu: Move machine type data in capabilities cache qemu: Use typedef for virQEMUCapsMachineType qemu: Introduce virQEMUCapsCopyMachineTypes qemu: Make probed machine types depend on accelerator qemu: Probe machine types for both KVM and TCG qemu: Probe for default CPU types qemu: Introduce virQEMUCapsGetMachineDefaultCPU qemu: Use g_autoptr in qemuDomainDefPostParse conf: Define g_autoptr cleanup function for virCPUDef qemuxml2argvtest: Update host arch for DO_TEST*ARCH* tests qemuxml2*test: Add test cases for default CPU models on aarch64 qemuxml2*test: Add test cases for default CPU models on ppc64 qemuxml2*test: Add test cases for default CPU models on s390x qemuxml2*test: Add test cases for default CPU models on x86_64 qemu: Store default CPU in domain XML src/conf/cpu_conf.h | 1 + src/conf/domain_capabilities.c | 86 +- src/conf/domain_capabilities.h | 10 +- src/libvirt_private.syms | 2 - src/qemu/qemu_capabilities.c | 1064 +- src/qemu/qemu_capabilities.h | 29 +- src/qemu/qemu_capspriv.h | 5 +- src/qemu/qemu_domain.c | 97 +- src/qemu/qemu_driver.c | 4 +- src/qemu/qemu_monitor.c | 61 +- src/qemu/qemu_monitor.h | 19 +- src/qemu/qemu_monitor_json.c | 82 +- src/qemu/qemu_monitor_json.h | 2 +- src/qemu/qemu_process.c | 24 +- tests/cputest.c | 12 +- tests/domaincapsdata/qemu_4.2.0.s390x.xml | 202 + tests/domaincapstest.c | 10 +- .../caps_1.5.3.x86_64.replies | 78 + .../caps_1.5.3.x86_64.xml | 45 +- .../caps_1.6.0.x86_64.replies | 86 + .../caps_1.6.0.x86_64.xml | 51 +- .../caps_1.7.0.x86_64.replies | 94 + .../caps_1.7.0.x86_64.xml | 57 +- .../caps_2.1.1.x86_64.replies | 110 + .../caps_2.1.1.x86_64.xml | 69 +- .../caps_2.10.0.aarch64.replies | 272 + .../caps_2.10.0.aarch64.xml | 279 +- .../caps_2.10.0.ppc64.replies | 123 + .../caps_2.10.0.ppc64.xml | 575 +- .../caps_2.10.0.s390x.replies | 53 + .../caps_2.10.0.s390x.xml | 285 +- .../caps_2.10.0.x86_64.replies | 194 + .../caps_2.10.0.x86_64.xml | 387 +- .../caps_2.11.0.s390x.replies | 58 + .../caps_2.11.0.s390x.xml | 288 +- .../caps_2.11.0.x86_64.replies | 194 + .../caps_2.11.0.x86_64.xml | 327 +- .../caps_2.12.0.aarch64.replies | 302 + .../caps_2.12.0.aarch64.xml | 307 +- .../caps_2.12.0.ppc64.replies | 143 + .../caps_2.12.0.ppc64.xml | 591 +- .../caps_2.12.0.s390x.replies | 63 + .../caps_2.12.0.s390x.xml | 291 +- .../caps_2.12.0.x86_64.replies | 204 + .../caps_2.12.0.x86_64.xml | 631 +- .../caps_2.4.0.x86_64.replies | 134 + .../caps_2.4.0.x86_64.xml | 87 +- .../caps_2.5.0.x86_64.replies | 142 + .../caps_2.5.0.x86_64.xml | 93 +- .../caps_2.6.0.aarch64.replies | 180 + .../caps_2.6.0.aarch64.xml | 123 +- .../caps_2.6.0.ppc64.replies | 77 + .../qemucapabilitiesdata/caps_2.6.0.ppc64.xml | 45 +- .../caps_2.6.0.x86_64.replies | 118 + .../caps_2.6.0.x86_64.xml | 75 +- .../caps_2.7.0.s390x.replies | 38 + .../qemucapabilitiesdata/caps_2.7.0.s390x.xml | 12 +- .../caps_2.7.0.x86_64.replies | 154 + .../caps_2.7.0.x86_64.xml | 81 +- .../caps_2.8.0.s390x.replies | 43 + .../qemucapabilitiesdata/caps_2.8.0.s390x.xml | 15 +- .../caps_2.8.0.x86_64.replies | 174 + .../caps_2.8.0.x86_64.xml | 93 +- .../caps_2.9.0.ppc64.replies | 118 + .../qemucapabilitiesdata/caps_2.9.0.ppc64.xml | 572 +- .../caps_2.9.0.s390x.replies | 48 + .../qemucapabilitiesdata/caps_2.9.0.s390x.xml | 274 +- .../caps_2.9.0.x86_64.replies | 184 + .../caps_2.9.0.x86_64.xml | 277 +- .../caps_3.0.0.ppc64.replies | 148 + .../qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 594 +- .../caps_3.0.0.riscv32.replies | 42 + .../caps_3.0.0.riscv32.xml | 10 +- .../caps_3.0.0.riscv64.replies | 42 + .../caps_3.0.0.riscv64.xml | 10 +- .../caps_3.0.0.s390x.replies | 68 + .../qemucapabilitiesdata/caps_3.0.0.s390x.xml | 302 +- .../caps_3.0.0.x86_64.replies | 214 + .../caps_3.0.0.x86_64.xml | 447 +- .../caps_3.1.0.ppc64.replies | 153 + .../qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 597 +- .../caps_3.1.0.x86_64.replies | 224 + .../caps_3.1.0.x86_64.xml | 587 +- .../caps_4.0.0.aarch64.replies | 347 + .../caps_4.0.0.aarch64.xml | 346 +- .../caps_4.0.0.ppc64.replies | 158 + .../qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 600 +- .../caps_4.0.0.riscv32.replies | 42 + .../caps_4.0.0.riscv32.xml | 10 +- .../caps_4.0.0.riscv64.replies | 42 + .../caps_4.0.0.riscv64.xml | 10 +- .../caps_4.0.0.s390x.replies | 78 + .../qemucapabilitiesdata/caps_4.0.0.s390x.xml | 324 +- .../caps_4.0.0.x86_64.replies | 224 + .../caps_4.0.0.x86_64.xml | 583 +- .../caps_4.1.0.x86_64.replies | 329 + .../caps_4.1.0.x86_64.xml | 930 +- .../caps_4.2.0.aarch64.replies | 556 + .../caps_4.2.0.aarch64.xml | 358 +- .../caps_4.2.0.ppc64.replies | 305 +- .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 611 +- .../caps_4.2.0.s390x.replies | 22548 ++++++++++++++++ .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 3359 +++ .../caps_4.2.0.x86_64.replies | 389 + .../caps_4.2.0.x86_64.xml | 942 +- tests/qemumonitorjsontest.c | 42 +- ...fault-cpu-kvm-virt-4.2.aarch64-latest.args | 38 + .../aarch64-default-cpu-kvm-virt-4.2.xml | 20 + ...fault-cpu-tcg-virt-4.2.aarch64-latest.args | 39 + .../aarch64-default-cpu-tcg-virt-4.2.xml | 20 + .../disk-cache.x86_64-latest.args | 1 + .../disk-cdrom-network.x86_64-latest.args | 1 + .../disk-cdrom-tray.x86_64-latest.args | 1 + .../disk-copy_on_read.x86_64-latest.args | 1 + .../disk-detect-zeroes.x86_64-latest.args | 1 + .../disk-floppy-q35-2_11.x86_64-latest.args | 1 + .../disk-floppy-q35-2_9.x86_64-latest.args | 1 + .../os-firmware-bios.x86_64-latest.args | 1 + ...os-firmware-efi-secboot.x86_64-latest.args | 1 + .../os-firmware-efi.x86_64-latest.args | 1 + ...ault-cpu-kvm-pseries-2.7.ppc64-latest.args | 39 + .../ppc64-default-cpu-kvm-pseries-2.7.xml | 22 + ...ault-cpu-kvm-pseries-3.1.ppc64-latest.args | 39 + .../ppc64-default-cpu-kvm-pseries-3.1.xml | 22 + ...ault-cpu-kvm-pseries-4.2.ppc64-latest.args | 39 + .../ppc64-default-cpu-kvm-pseries-4.2.xml | 22 + ...ault-cpu-tcg-pseries-2.7.ppc64-latest.args | 39 + .../ppc64-default-cpu-tcg-pseries-2.7.xml | 22 + ...ault-cpu-tcg-pseries-3.1.ppc64-latest.args | 39 + .../ppc64-default-cpu-tcg-pseries-3.1.xml | 22 + ...ault-cpu-tcg-pseries-4.2.ppc64-latest.args | 39 + .../ppc64-default-cpu-tcg-pseries-4.2.xml | 22 + ...t-cpu-kvm-ccw-virtio-4.2.s390x-latest.args | 32 + .../s390-default-cpu-kvm-ccw-virtio-4.2.xml | 16 + ...t-cpu-tcg-ccw-virtio-4.2.s390x-latest.args | 32 + .../s390-default-cpu-tcg-ccw-virtio-4.2.xml | 16 + .../tpm-emulator-tpm2-enc.x86_64-latest.args | 1 + .../tpm-emulator-tpm2.x86_64-latest.args | 1 + .../tpm-emulator.x86_64-latest.args | 1 + .../tseg-explicit-size.x86_64-latest.args | 1 + .../vhost-vsock-auto.x86_64-latest.args | 1 + .../vhost-vsock.x86_64-latest.args | 1 + ...-default-cpu-kvm-pc-4.2.x86_64-latest.args | 37 + .../x86_64-default-cpu-kvm-pc-4.2.xml | 24 + ...default-cpu-kvm-q35-4.2.x86_64-latest.args | 42 + .../x86_64-default-cpu-kvm-q35-4.2.xml | 24 + ...-default-cpu-tcg-pc-4.2.x86_64-latest.args | 37 + .../x86_64-default-cpu-tcg-pc-4.2.xml | 24 + ...default-cpu-tcg-q35-4.2.x86_64-latest.args | 42 + .../x86_64-default-cpu-tcg-q35-4.2.xml | 24 + tests/qemuxml2argvtest.c | 19 + ...efault-cpu-kvm-virt-4.2.aarch64-latest.xml | 38 + ...efault-cpu-tcg-virt-4.2.aarch64-latest.xml | 41 + .../os-firmware-bios.x86_64-latest.xml | 3 + .../os-firmware-efi-secboot.x86_64-latest.xml | 3 + .../os-firmware-efi.x86_64-latest.xml | 3 + ...fault-cpu-kvm-pseries-2.7.ppc64-latest.xml | 48 + ...fault-cpu-kvm-pseries-3.1.ppc64-latest.xml | 48 + ...fault-cpu-kvm-pseries-4.2.ppc64-latest.xml | 48 + ...fault-cpu-tcg-pseries-2.7.ppc64-latest.xml | 48 + ...fault-cpu-tcg-pseries-3.1.ppc64-latest.xml | 48 + ...fault-cpu-tcg-pseries-4.2.ppc64-latest.xml | 48 + ...lt-cpu-kvm-ccw-virtio-4.2.s390x-latest.xml | 24 + ...lt-cpu-tcg-ccw-virtio-4.2.s390x-latest.xml | 26 + .../tpm-emulator-tpm2-enc.x86_64-latest.xml | 3 + .../tpm-emulator-tpm2.x86_64-latest.xml | 3 + .../tpm-emulator.x86_64-latest.xml | 3 + .../tpm-passthrough-crb.x86_64-latest.xml | 3 + .../tpm-passthrough.x86_64-latest.xml | 3 + ...4-default-cpu-kvm-pc-4.2.x86_64-latest.xml | 40 + ...-default-cpu-kvm-q35-4.2.x86_64-latest.xml | 63 + ...4-default-cpu-tcg-pc-4.2.x86_64-latest.xml | 40 + ...-default-cpu-tcg-q35-4.2.x86_64-latest.xml | 63 + tests/qemuxml2xmltest.c | 15 + tests/testutilsqemu.c | 6 +- tests/testutilsqemu.h | 1 + 176 files changed, 42397 insertions(+), 6735 deletions(-) create mode 100644 tests/domaincapsdata/qemu_4.2.0.s390x.xml create mode 100644 tests/qemucapabilitiesdata/caps_4.2.0.s390x.replies create mode 100644 tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml create mode 100644 tests/qemuxml2argvdata/aarch64-default-cpu-kvm-virt-4.2.aarch64-latest.args create mode 100644 tests/qemuxml2argvdata/aarch64-default-cpu-kvm-virt-4.2.xml create mode 100644 tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.args create mode 100644 tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.xml create mode 100644 tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.args create mode 100644 tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.xml create mode 100644 tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.args create mode 100644 tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.xml create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.xml create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.xml create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.xml create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.xml create mode 100644 tests/qemuxml2xmloutdata/aarch64-default-cpu-kvm-virt-4.2.aarch64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.xml create mode 100644 tests/qemuxml2xmloutdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.xml create mode 100644 tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.xml -- 2.23.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - new patch Version 3: - regenerated with the following QEMU patch applied "s390x/kvm: Set default cpu model for all machine classes" - includes domaincapsdata (previously in patch 2/31) tests/domaincapsdata/qemu_4.2.0.s390x.xml | 202 + .../caps_4.2.0.s390x.replies | 22416 ++++++++++++++++ .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 3345 +++ 3 files changed, 25963 insertions(+) create mode 100644 tests/domaincapsdata/qemu_4.2.0.s390x.xml create mode 100644 tests/qemucapabilitiesdata/caps_4.2.0.s390x.replies create mode 100644 tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml diff --git a/tests/domaincapsdata/qemu_4.2.0.s390x.xml b/tests/domaincapsdata/qemu_4.2.0.s390x.xml new file mode 100644 index 0000000000..fd71df46a7 --- /dev/null +++ b/tests/domaincapsdata/qemu_4.2.0.s390x.xml @@ -0,0 +1,202 @@ +<domainCapabilities> + <path>/usr/bin/qemu-system-s390x</path> + <domain>kvm</domain> + <machine>s390-ccw-virtio-4.2</machine> + <arch>s390x</arch> + <vcpu max='248'/> + <iothreads supported='yes'/> + <os supported='yes'> ... +</domainCapabilities> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.replies b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.replies new file mode 100644 index 0000000000..ae0d733df3 --- /dev/null +++ b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.replies @@ -0,0 +1,22416 @@ +{ + "execute": "qmp_capabilities", + "id": "libvirt-1" +} + +{ + "return": { + }, + "id": "libvirt-1" +} ... diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml new file mode 100644 index 0000000000..ebc5b48999 --- /dev/null +++ b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml @@ -0,0 +1,3345 @@ +<qemuCaps> + <qemuctime>0</qemuctime> + <selfctime>0</selfctime> + <selfvers>0</selfvers> + <flag name='kvm'/> ... +</qemuCaps> -- 2.23.0

Generated with "spapr/kvm: Set default cpu model for all machine classes" fix for QEMU applied. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch .../caps_4.2.0.ppc64.replies | 38 +++++++++---------- .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.replies b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.replies index e6266f5fe1..0423043f96 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.replies +++ b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.replies @@ -21,7 +21,7 @@ "minor": 1, "major": 4 }, - "package": "v4.1.0-1378-g98b2e3c9ab" + "package": "v4.1.0-2198-g9e583f2" }, "id": "libvirt-2" } @@ -6097,7 +6097,7 @@ "hotpluggable-cpus": true, "name": "pseries-3.1", "numa-mem-supported": true, - "default-cpu-type": "power8_v2.0-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6105,7 +6105,7 @@ "hotpluggable-cpus": true, "name": "pseries-2.12-sxxm", "numa-mem-supported": true, - "default-cpu-type": "power8_v2.0-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6129,7 +6129,7 @@ "hotpluggable-cpus": true, "name": "pseries-3.0", "numa-mem-supported": true, - "default-cpu-type": "power8_v2.0-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6137,7 +6137,7 @@ "hotpluggable-cpus": true, "name": "pseries-2.10", "numa-mem-supported": true, - "default-cpu-type": "power8_v2.0-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6153,7 +6153,7 @@ "hotpluggable-cpus": true, "name": "pseries-2.11", "numa-mem-supported": true, - "default-cpu-type": "power8_v2.0-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6161,7 +6161,7 @@ "hotpluggable-cpus": true, "name": "pseries-2.12", "numa-mem-supported": true, - "default-cpu-type": "power8_v2.0-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6169,7 +6169,7 @@ "hotpluggable-cpus": true, "name": "pseries-2.9", "numa-mem-supported": true, - "default-cpu-type": "power8_v2.0-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6185,7 +6185,7 @@ "hotpluggable-cpus": false, "name": "pseries-2.6", "numa-mem-supported": true, - "default-cpu-type": "power7_v2.3-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6193,7 +6193,7 @@ "hotpluggable-cpus": true, "name": "pseries-2.7", "numa-mem-supported": true, - "default-cpu-type": "power7_v2.3-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6201,7 +6201,7 @@ "hotpluggable-cpus": true, "name": "pseries-2.8", "numa-mem-supported": true, - "default-cpu-type": "power8_v2.0-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6209,7 +6209,7 @@ "hotpluggable-cpus": true, "name": "pseries-4.2", "numa-mem-supported": true, - "default-cpu-type": "power9_v2.0-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "is-default": true, "cpu-max": 1024, "deprecated": false, @@ -6219,7 +6219,7 @@ "hotpluggable-cpus": false, "name": "pseries-2.4", "numa-mem-supported": true, - "default-cpu-type": "power7_v2.3-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6227,7 +6227,7 @@ "hotpluggable-cpus": false, "name": "pseries-2.5", "numa-mem-supported": true, - "default-cpu-type": "power7_v2.3-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6235,7 +6235,7 @@ "hotpluggable-cpus": true, "name": "pseries-4.0", "numa-mem-supported": true, - "default-cpu-type": "power9_v2.0-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6243,7 +6243,7 @@ "hotpluggable-cpus": true, "name": "pseries-4.1", "numa-mem-supported": true, - "default-cpu-type": "power9_v2.0-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6251,7 +6251,7 @@ "hotpluggable-cpus": false, "name": "pseries-2.2", "numa-mem-supported": true, - "default-cpu-type": "power7_v2.3-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6266,7 +6266,7 @@ "hotpluggable-cpus": false, "name": "pseries-2.3", "numa-mem-supported": true, - "default-cpu-type": "power7_v2.3-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, @@ -6274,7 +6274,7 @@ "hotpluggable-cpus": false, "name": "pseries-2.1", "numa-mem-supported": true, - "default-cpu-type": "power7_v2.3-powerpc64-cpu", + "default-cpu-type": "host-powerpc64-cpu", "cpu-max": 1024, "deprecated": false }, diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml index 561d955247..101c095446 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml @@ -176,7 +176,7 @@ <version>4001050</version> <kvmVersion>0</kvmVersion> <microcodeVersion>42900242</microcodeVersion> - <package>v4.1.0-1378-g98b2e3c9ab</package> + <package>v4.1.0-2198-g9e583f2</package> <arch>ppc64</arch> <cpu type='kvm' name='default'/> <cpu type='kvm' name='ppc'/> -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:00PM +0100, Jiri Denemark wrote:
Generated with "spapr/kvm: Set default cpu model for all machine classes" fix for QEMU applied.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
.../caps_4.2.0.ppc64.replies | 38 +++++++++---------- .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-)
Once this hits QEMU master: Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

On Tue, Nov 12, 2019 at 15:26:16 +0100, Ján Tomko wrote:
On Tue, Nov 05, 2019 at 02:27:00PM +0100, Jiri Denemark wrote:
Generated with "spapr/kvm: Set default cpu model for all machine classes" fix for QEMU applied.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
.../caps_4.2.0.ppc64.replies | 38 +++++++++---------- .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-)
Once this hits QEMU master: Reviewed-by: Ján Tomko <jtomko@redhat.com>
The change is included in QEMU 4.2.0-rc2 so I pushed this series. Thanks for the review. Jirka

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - no change Version 3: - g_autofree src/conf/domain_capabilities.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index 09bf047647..e92df9e9da 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -242,25 +242,20 @@ virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels, virDomainCapsCPUUsable usable, char **blockers) { - char *nameCopy = NULL; - char **blockersCopy = NULL; + g_autofree char * nameCopy = NULL; + VIR_AUTOSTRINGLIST blockersCopy = NULL; if (VIR_STRNDUP(nameCopy, name, nameLen) < 0) - goto error; + return -1; if (virStringListCopy(&blockersCopy, (const char **)blockers) < 0) - goto error; + return -1; if (virDomainCapsCPUModelsAddSteal(cpuModels, &nameCopy, usable, &blockersCopy) < 0) - goto error; + return -1; return 0; - - error: - VIR_FREE(nameCopy); - virStringListFree(blockersCopy); - return -1; } -- 2.23.0

All callers use nameLen == -1 anyway. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - no change Version 3: - no change src/conf/domain_capabilities.c | 7 +++---- src/conf/domain_capabilities.h | 1 - src/qemu/qemu_capabilities.c | 2 +- tests/cputest.c | 4 ++-- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index e92df9e9da..0a89ccd071 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -167,7 +167,7 @@ virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr old) for (i = 0; i < old->nmodels; i++) { if (virDomainCapsCPUModelsAdd(cpuModels, - old->models[i].name, -1, + old->models[i].name, old->models[i].usable, old->models[i].blockers) < 0) goto error; @@ -200,7 +200,7 @@ virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old, continue; if (virDomainCapsCPUModelsAdd(cpuModels, - old->models[i].name, -1, + old->models[i].name, old->models[i].usable, old->models[i].blockers) < 0) goto error; @@ -238,14 +238,13 @@ virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels, int virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels, const char *name, - ssize_t nameLen, virDomainCapsCPUUsable usable, char **blockers) { g_autofree char * nameCopy = NULL; VIR_AUTOSTRINGLIST blockersCopy = NULL; - if (VIR_STRNDUP(nameCopy, name, nameLen) < 0) + if (VIR_STRDUP(nameCopy, name) < 0) return -1; if (virStringListCopy(&blockersCopy, (const char **)blockers) < 0) diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index a31458c653..264c7fc429 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -203,7 +203,6 @@ int virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels, char ***blockers); int virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels, const char *name, - ssize_t nameLen, virDomainCapsCPUUsable usable, char **blockers); virDomainCapsCPUModelPtr diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 9bb3c96448..8fd503a49c 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1873,7 +1873,7 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, } for (i = 0; i < count; i++) { - if (virDomainCapsCPUModelsAdd(cpus, name[i], -1, usable, NULL) < 0) + if (virDomainCapsCPUModelsAdd(cpus, name[i], usable, NULL) < 0) return -1; } diff --git a/tests/cputest.c b/tests/cputest.c index a277224918..6ead9e0982 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -861,7 +861,7 @@ cpuTestUpdateLive(const void *arg) usable = hvModel->usable; } - if (virDomainCapsCPUModelsAdd(models, expected->model, -1, + if (virDomainCapsCPUModelsAdd(models, expected->model, usable, blockers) < 0) goto cleanup; @@ -971,7 +971,7 @@ cpuTestInitModels(const char **list) return NULL; for (model = list; *model; model++) { - if (virDomainCapsCPUModelsAdd(cpus, *model, -1, + if (virDomainCapsCPUModelsAdd(cpus, *model, VIR_DOMCAPS_CPU_USABLE_UNKNOWN, NULL) < 0) goto error; } -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:02PM +0100, Jiri Denemark wrote:
All callers use nameLen == -1 anyway.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> ---
Notes: Version 2: - no change
Version 3: - no change
src/conf/domain_capabilities.c | 7 +++---- src/conf/domain_capabilities.h | 1 - src/qemu/qemu_capabilities.c | 2 +- tests/cputest.c | 4 ++-- 4 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index e92df9e9da..0a89ccd071 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -167,7 +167,7 @@ virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr old)
for (i = 0; i < old->nmodels; i++) { if (virDomainCapsCPUModelsAdd(cpuModels, - old->models[i].name, -1, + old->models[i].name, old->models[i].usable, old->models[i].blockers) < 0) goto error; @@ -200,7 +200,7 @@ virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old, continue;
if (virDomainCapsCPUModelsAdd(cpuModels, - old->models[i].name, -1, + old->models[i].name, old->models[i].usable, old->models[i].blockers) < 0) goto error; @@ -238,14 +238,13 @@ virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels, int virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels, const char *name, - ssize_t nameLen, virDomainCapsCPUUsable usable, char **blockers) { g_autofree char * nameCopy = NULL; VIR_AUTOSTRINGLIST blockersCopy = NULL;
- if (VIR_STRNDUP(nameCopy, name, nameLen) < 0) + if (VIR_STRDUP(nameCopy, name) < 0) return -1;
nameCopy = g_strdup(name);
if (virStringListCopy(&blockersCopy, (const char **)blockers) < 0)
Either way, could you push this sooner than the patches waiting for QEMU? I'd like to clean up the rest of VIR_STRNDUP and forbid VIR_STR(N)DUP completely. Jano

Rather than returning a direct pointer the list stored in qemuCaps the function now creates a new copy of the CPU models list. The main purpose of this seemingly useless change is to update callers to free the result returned by virQEMUCapsGetCPUDefinitions because the internals of this function will change significantly in the following patches. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - no change Version 3: - g_autoptr src/conf/domain_capabilities.h | 2 ++ src/qemu/qemu_capabilities.c | 23 ++++++++++++++++++----- src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_process.c | 7 +++++-- tests/cputest.c | 1 - 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index 264c7fc429..36500435fd 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -139,6 +139,8 @@ struct _virDomainCapsCPUModels { virDomainCapsCPUModelPtr models; }; +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainCapsCPUModels, virObjectUnref); + typedef struct _virDomainCapsCPU virDomainCapsCPU; typedef virDomainCapsCPU *virDomainCapsCPUPtr; struct _virDomainCapsCPU { diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 8fd503a49c..afac77c1e4 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1885,10 +1885,17 @@ virDomainCapsCPUModelsPtr virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, virDomainVirtType type) { + virDomainCapsCPUModelsPtr cpuModels; + if (type == VIR_DOMAIN_VIRT_KVM) - return qemuCaps->kvmCPUModels; + cpuModels = qemuCaps->kvmCPUModels; else - return qemuCaps->tcgCPUModels; + cpuModels = qemuCaps->tcgCPUModels; + + if (!cpuModels) + return NULL; + + return virDomainCapsCPUModelsCopy(cpuModels); } @@ -3112,6 +3119,7 @@ virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps, virCPUDefPtr cpu, bool migratable) { + g_autoptr(virDomainCapsCPUModels) cpuModels = NULL; virCPUDataPtr data = NULL; int ret = -1; @@ -3121,7 +3129,9 @@ virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps, if (!(data = virQEMUCapsGetCPUModelX86Data(qemuCaps, model, migratable))) goto cleanup; - if (cpuDecode(cpu, data, virQEMUCapsGetCPUDefinitions(qemuCaps, type)) < 0) + cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type); + + if (cpuDecode(cpu, data, cpuModels) < 0) goto cleanup; ret = 0; @@ -3204,10 +3214,13 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, if ((rc = virQEMUCapsInitCPUModel(qemuCaps, type, cpu, false)) < 0) { goto error; } else if (rc == 1) { + g_autoptr(virDomainCapsCPUModels) cpuModels = NULL; + VIR_DEBUG("No host CPU model info from QEMU; probing host CPU directly"); - hostCPU = virQEMUCapsProbeHostCPU(hostArch, - virQEMUCapsGetCPUDefinitions(qemuCaps, type)); + cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type); + hostCPU = virQEMUCapsProbeHostCPU(hostArch, cpuModels); + if (!hostCPU || virCPUDefCopyModelFilter(cpu, hostCPU, true, virQEMUCapsCPUFilterFeatures, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index d17c18705b..380943dda3 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -13704,7 +13704,7 @@ qemuConnectBaselineHypervisorCPU(virConnectPtr conn, g_autoptr(virQEMUCaps) qemuCaps = NULL; virArch arch; virDomainVirtType virttype; - virDomainCapsCPUModelsPtr cpuModels; + g_autoptr(virDomainCapsCPUModels) cpuModels = NULL; bool migratable; virCPUDefPtr cpu = NULL; char *cpustr = NULL; diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index ed8666e9d1..5bc13035a4 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6110,6 +6110,8 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def, /* nothing to update for host-passthrough */ if (def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH) { + g_autoptr(virDomainCapsCPUModels) cpuModels = NULL; + if (def->cpu->check == VIR_CPU_CHECK_PARTIAL && virCPUCompare(caps->host.arch, virQEMUCapsGetHostModel(qemuCaps, def->virtType, @@ -6122,8 +6124,9 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def, VIR_QEMU_CAPS_HOST_CPU_MIGRATABLE)) < 0) return -1; - if (virCPUTranslate(def->os.arch, def->cpu, - virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType)) < 0) + cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType); + + if (virCPUTranslate(def->os.arch, def->cpu, cpuModels) < 0) return -1; def->cpu->fallback = VIR_CPU_FALLBACK_FORBID; diff --git a/tests/cputest.c b/tests/cputest.c index 6ead9e0982..e75e8bf906 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -549,7 +549,6 @@ cpuTestGetCPUModels(const struct data *data, return -1; *models = virQEMUCapsGetCPUDefinitions(qemuCaps, VIR_DOMAIN_VIRT_KVM); - virObjectRef(*models); virObjectUnref(qemuCaps); -- 2.23.0

Some callers of virQEMUCapsGetCPUDefinitions will need to filter the returned list of CPU models. Let's add the filtering parameters directly to virQEMUCapsGetCPUDefinitions to avoid copying the CPU models list twice. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - no change Version 3: - no change src/qemu/qemu_capabilities.c | 11 ++++++++--- src/qemu/qemu_capabilities.h | 4 +++- src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_process.c | 2 +- tests/cputest.c | 2 +- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index afac77c1e4..3d8a1c1721 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1883,7 +1883,9 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, virDomainCapsCPUModelsPtr virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, - virDomainVirtType type) + virDomainVirtType type, + const char **modelWhitelist, + const char **modelBlacklist) { virDomainCapsCPUModelsPtr cpuModels; @@ -1895,6 +1897,9 @@ virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, if (!cpuModels) return NULL; + if (modelWhitelist || modelBlacklist) + return virDomainCapsCPUModelsFilter(cpuModels, modelWhitelist, modelBlacklist); + return virDomainCapsCPUModelsCopy(cpuModels); } @@ -3129,7 +3134,7 @@ virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps, if (!(data = virQEMUCapsGetCPUModelX86Data(qemuCaps, model, migratable))) goto cleanup; - cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type); + cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type, NULL, NULL); if (cpuDecode(cpu, data, cpuModels) < 0) goto cleanup; @@ -3218,7 +3223,7 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, VIR_DEBUG("No host CPU model info from QEMU; probing host CPU directly"); - cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type); + cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type, NULL, NULL); hostCPU = virQEMUCapsProbeHostCPU(hostArch, cpuModels); if (!hostCPU || diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 10f0ce2654..67dccc522e 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -570,7 +570,9 @@ int virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, size_t count, virDomainCapsCPUUsable usable); virDomainCapsCPUModelsPtr virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, - virDomainVirtType type); + virDomainVirtType type, + const char **modelWhitelist, + const char **modelBlacklist); virDomainCapsCPUModelsPtr virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, virArch arch); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 380943dda3..76787bf56a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -13730,7 +13730,7 @@ qemuConnectBaselineHypervisorCPU(virConnectPtr conn, if (!qemuCaps) goto cleanup; - if (!(cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, virttype)) || + if (!(cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, virttype, NULL, NULL)) || cpuModels->nmodels == 0) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("QEMU '%s' does not support any CPU models for " diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 5bc13035a4..4c61332871 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6124,7 +6124,7 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def, VIR_QEMU_CAPS_HOST_CPU_MIGRATABLE)) < 0) return -1; - cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType); + cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType, NULL, NULL); if (virCPUTranslate(def->os.arch, def->cpu, cpuModels) < 0) return -1; diff --git a/tests/cputest.c b/tests/cputest.c index e75e8bf906..11c061e37a 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -548,7 +548,7 @@ cpuTestGetCPUModels(const struct data *data, if (!(qemuCaps = cpuTestMakeQEMUCaps(data))) return -1; - *models = virQEMUCapsGetCPUDefinitions(qemuCaps, VIR_DOMAIN_VIRT_KVM); + *models = virQEMUCapsGetCPUDefinitions(qemuCaps, VIR_DOMAIN_VIRT_KVM, NULL, NULL); virObjectUnref(qemuCaps); -- 2.23.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - no change Version 3: - no change src/qemu/qemu_capabilities.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 3d8a1c1721..33b91d23dc 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -5276,24 +5276,17 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps, if (virQEMUCapsIsCPUModeSupported(qemuCaps, caps, domCaps->virttype, VIR_CPU_MODE_CUSTOM)) { - virDomainCapsCPUModelsPtr filtered = NULL; - char **models = NULL; const char *blacklist[] = { "host", NULL }; + VIR_AUTOSTRINGLIST models = NULL; if (virCPUGetModels(domCaps->arch, &models) >= 0) { - virDomainCapsCPUModelsPtr cpus; - - if (domCaps->virttype == VIR_DOMAIN_VIRT_KVM) - cpus = qemuCaps->kvmCPUModels; - else - cpus = qemuCaps->tcgCPUModels; - - filtered = virDomainCapsCPUModelsFilter(cpus, - (const char **)models, - blacklist); - virStringListFree(models); + domCaps->cpu.custom = virQEMUCapsGetCPUDefinitions(qemuCaps, + domCaps->virttype, + (const char **)models, + blacklist); + } else { + domCaps->cpu.custom = NULL; } - domCaps->cpu.custom = filtered; } return 0; -- 2.23.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - no change Version 3: - g_autoptr src/qemu/qemu_monitor_json.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index f4794b2a43..c330026692 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -5578,8 +5578,8 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon, qemuMonitorCPUDefInfoPtr **cpus) { int ret = -1; - virJSONValuePtr cmd; - virJSONValuePtr reply = NULL; + g_autoptr(virJSONValue) cmd = NULL; + g_autoptr(virJSONValue) reply = NULL; virJSONValuePtr data; qemuMonitorCPUDefInfoPtr *cpulist = NULL; size_t n = 0; @@ -5679,8 +5679,6 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon, qemuMonitorCPUDefInfoFree(cpulist[i]); VIR_FREE(cpulist); } - virJSONValueFree(cmd); - virJSONValueFree(reply); return ret; } -- 2.23.0

The function would return a valid virDomainCapsCPUModelsPtr with empty CPU models list if query-cpu-definitions exists in QEMU, but returns GenericError meaning it's not in fact implemented. This behaviour is a bit strange especially after such virDomainCapsCPUModels structure is stored in capabilities XML and parsed back, which will result in NULL virDomainCapsCPUModelsPtr rather than a structure containing nothing. Let's just keep virDomainCapsCPUModelsPtr NULL if the QMP command is not implemented and change the return value to int so that callers can easily check for failure or success. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - new patch Version 3: - g_steal_pointer src/qemu/qemu_capabilities.c | 32 ++++++++++++++++++++------------ src/qemu/qemu_capabilities.h | 5 +++-- src/qemu/qemu_process.c | 17 ++++++++++------- 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 33b91d23dc..c88cf2f3b0 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2442,17 +2442,26 @@ virQEMUCapsProbeQMPMachineProps(virQEMUCapsPtr qemuCaps, } -virDomainCapsCPUModelsPtr +int virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, - virArch arch) + virArch arch, + virDomainCapsCPUModelsPtr *cpuModels) { virDomainCapsCPUModelsPtr models = NULL; qemuMonitorCPUDefInfoPtr *cpus = NULL; int ncpus = 0; size_t i; + int ret = -1; + + *cpuModels = NULL; if ((ncpus = qemuMonitorGetCPUDefinitions(mon, &cpus)) < 0) - return NULL; + return -1; + + if (ncpus == 0) { + ret = 0; + goto cleanup; + } /* QEMU 2.11 for Power renamed all CPU models to lower case, we need to * translate them back to libvirt's upper case model names. */ @@ -2461,7 +2470,7 @@ virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, char **name; if (virCPUGetModels(arch, &libvirtModels) < 0) - goto error; + goto cleanup; for (name = libvirtModels; name && *name; name++) { for (i = 0; i < ncpus; i++) { @@ -2475,7 +2484,7 @@ virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, } if (!(models = virDomainCapsCPUModelsNew(ncpus))) - goto error; + goto cleanup; for (i = 0; i < ncpus; i++) { virDomainCapsCPUUsable usable = VIR_DOMCAPS_CPU_USABLE_UNKNOWN; @@ -2487,19 +2496,18 @@ virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, if (virDomainCapsCPUModelsAddSteal(models, &cpus[i]->name, usable, &cpus[i]->blockers) < 0) - goto error; + goto cleanup; } + *cpuModels = g_steal_pointer(&models); + ret = 0; + cleanup: for (i = 0; i < ncpus; i++) qemuMonitorCPUDefInfoFree(cpus[i]); VIR_FREE(cpus); - return models; - - error: virObjectUnref(models); - models = NULL; - goto cleanup; + return ret; } @@ -2513,7 +2521,7 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps, if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS)) return 0; - if (!(models = virQEMUCapsFetchCPUDefinitions(mon, qemuCaps->arch))) + if (virQEMUCapsFetchCPUDefinitions(mon, qemuCaps->arch, &models) < 0) return -1; if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 67dccc522e..ba3fe3d2b6 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -573,8 +573,9 @@ virDomainCapsCPUModelsPtr virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, virDomainVirtType type, const char **modelWhitelist, const char **modelBlacklist); -virDomainCapsCPUModelsPtr virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, - virArch arch); +int virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, + virArch arch, + virDomainCapsCPUModelsPtr *cpuModels); typedef enum { /* Host CPU definition reported in domain capabilities. */ diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 4c61332871..bdd01993a2 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4345,27 +4345,30 @@ qemuProcessUpdateAndVerifyCPU(virQEMUDriverPtr driver, } -static virDomainCapsCPUModelsPtr +static int qemuProcessFetchCPUDefinitions(virQEMUDriverPtr driver, virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob) + qemuDomainAsyncJob asyncJob, + virDomainCapsCPUModelsPtr *cpuModels) { qemuDomainObjPrivatePtr priv = vm->privateData; virDomainCapsCPUModelsPtr models = NULL; + int rc; if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) goto error; - models = virQEMUCapsFetchCPUDefinitions(priv->mon, vm->def->os.arch); + rc = virQEMUCapsFetchCPUDefinitions(priv->mon, vm->def->os.arch, &models); - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) goto error; - return models; + *cpuModels = models; + return 0; error: virObjectUnref(models); - return NULL; + return -1; } @@ -4390,7 +4393,7 @@ qemuProcessUpdateCPU(virQEMUDriverPtr driver, if (qemuProcessUpdateLiveGuestCPU(vm, cpu, disabled) < 0) goto cleanup; - if (!(models = qemuProcessFetchCPUDefinitions(driver, vm, asyncJob)) || + if (qemuProcessFetchCPUDefinitions(driver, vm, asyncJob, &models) < 0 || virCPUTranslate(vm->def->os.arch, vm->def->cpu, models) < 0) goto cleanup; -- 2.23.0

It is a container for a CPU models list (qemuMonitorCPUDefInfo) and a number of elements in this list. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - v1 reviewed by Ján Tomko, but the patch had to be changed because of the previous patch Version 3: - new functions use glib src/qemu/qemu_capabilities.c | 30 +++++++++------------ src/qemu/qemu_monitor.c | 36 +++++++++++++++++++------ src/qemu/qemu_monitor.h | 14 ++++++++-- src/qemu/qemu_monitor_json.c | 52 ++++++++++++++---------------------- src/qemu/qemu_monitor_json.h | 2 +- tests/qemumonitorjsontest.c | 38 ++++++++++---------------- 6 files changed, 88 insertions(+), 84 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index c88cf2f3b0..e8b857b8cf 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2447,18 +2447,17 @@ virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, virArch arch, virDomainCapsCPUModelsPtr *cpuModels) { + g_autoptr(qemuMonitorCPUDefs) defs = NULL; virDomainCapsCPUModelsPtr models = NULL; - qemuMonitorCPUDefInfoPtr *cpus = NULL; - int ncpus = 0; size_t i; int ret = -1; *cpuModels = NULL; - if ((ncpus = qemuMonitorGetCPUDefinitions(mon, &cpus)) < 0) + if (qemuMonitorGetCPUDefinitions(mon, &defs) < 0) return -1; - if (ncpus == 0) { + if (!defs) { ret = 0; goto cleanup; } @@ -2473,29 +2472,29 @@ virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, goto cleanup; for (name = libvirtModels; name && *name; name++) { - for (i = 0; i < ncpus; i++) { - if (STRCASENEQ(cpus[i]->name, *name)) + for (i = 0; i < defs->ncpus; i++) { + if (STRCASENEQ(defs->cpus[i]->name, *name)) continue; - VIR_FREE(cpus[i]->name); - cpus[i]->name = g_strdup(*name); + VIR_FREE(defs->cpus[i]->name); + defs->cpus[i]->name = g_strdup(*name); } } } - if (!(models = virDomainCapsCPUModelsNew(ncpus))) + if (!(models = virDomainCapsCPUModelsNew(defs->ncpus))) goto cleanup; - for (i = 0; i < ncpus; i++) { + for (i = 0; i < defs->ncpus; i++) { virDomainCapsCPUUsable usable = VIR_DOMCAPS_CPU_USABLE_UNKNOWN; - if (cpus[i]->usable == VIR_TRISTATE_BOOL_YES) + if (defs->cpus[i]->usable == VIR_TRISTATE_BOOL_YES) usable = VIR_DOMCAPS_CPU_USABLE_YES; - else if (cpus[i]->usable == VIR_TRISTATE_BOOL_NO) + else if (defs->cpus[i]->usable == VIR_TRISTATE_BOOL_NO) usable = VIR_DOMCAPS_CPU_USABLE_NO; - if (virDomainCapsCPUModelsAddSteal(models, &cpus[i]->name, usable, - &cpus[i]->blockers) < 0) + if (virDomainCapsCPUModelsAddSteal(models, &defs->cpus[i]->name, usable, + &defs->cpus[i]->blockers) < 0) goto cleanup; } @@ -2503,9 +2502,6 @@ virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, ret = 0; cleanup: - for (i = 0; i < ncpus; i++) - qemuMonitorCPUDefInfoFree(cpus[i]); - VIR_FREE(cpus); virObjectUnref(models); return ret; } diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 224d6a76c9..44c8ba2adb 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3553,25 +3553,45 @@ qemuMonitorMachineInfoFree(qemuMonitorMachineInfoPtr machine) int qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon, - qemuMonitorCPUDefInfoPtr **cpus) + qemuMonitorCPUDefsPtr *cpuDefs) { - VIR_DEBUG("cpus=%p", cpus); + VIR_DEBUG("cpuDefs=%p", cpuDefs); QEMU_CHECK_MONITOR(mon); - return qemuMonitorJSONGetCPUDefinitions(mon, cpus); + return qemuMonitorJSONGetCPUDefinitions(mon, cpuDefs); } void -qemuMonitorCPUDefInfoFree(qemuMonitorCPUDefInfoPtr cpu) +qemuMonitorCPUDefsFree(qemuMonitorCPUDefsPtr defs) { - if (!cpu) + size_t i; + + if (!defs) return; - virStringListFree(cpu->blockers); - VIR_FREE(cpu->name); - VIR_FREE(cpu); + for (i = 0; i < defs->ncpus; i++) { + g_strfreev(defs->cpus[i]->blockers); + g_free(defs->cpus[i]->name); + g_free(defs->cpus[i]); + } + + g_free(defs->cpus); + g_free(defs); +} + + +qemuMonitorCPUDefsPtr +qemuMonitorCPUDefsNew(size_t count) +{ + g_autoptr(qemuMonitorCPUDefs) defs = NULL; + + defs = g_new0(qemuMonitorCPUDefs, 1); + defs->cpus = g_new0(qemuMonitorCPUDefInfoPtr, count); + defs->ncpus = count; + + return g_steal_pointer(&defs); } diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index c4b7196794..00f4dd437f 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1112,9 +1112,19 @@ struct _qemuMonitorCPUDefInfo { char **blockers; /* NULL-terminated string list */ }; +typedef struct _qemuMonitorCPUDefs qemuMonitorCPUDefs; +typedef qemuMonitorCPUDefs *qemuMonitorCPUDefsPtr; +struct _qemuMonitorCPUDefs { + size_t ncpus; + qemuMonitorCPUDefInfoPtr *cpus; +}; + int qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon, - qemuMonitorCPUDefInfoPtr **cpus); -void qemuMonitorCPUDefInfoFree(qemuMonitorCPUDefInfoPtr cpu); + qemuMonitorCPUDefsPtr *cpuDefs); +qemuMonitorCPUDefsPtr qemuMonitorCPUDefsNew(size_t count); +void qemuMonitorCPUDefsFree(qemuMonitorCPUDefsPtr defs); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuMonitorCPUDefs, qemuMonitorCPUDefsFree); + typedef enum { QEMU_MONITOR_CPU_PROPERTY_BOOLEAN, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index c330026692..8f04be79c1 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -5575,56 +5575,53 @@ int qemuMonitorJSONGetMachines(qemuMonitorPtr mon, int qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon, - qemuMonitorCPUDefInfoPtr **cpus) + qemuMonitorCPUDefsPtr *cpuDefs) { - int ret = -1; + g_autoptr(qemuMonitorCPUDefs) defs = NULL; g_autoptr(virJSONValue) cmd = NULL; g_autoptr(virJSONValue) reply = NULL; virJSONValuePtr data; - qemuMonitorCPUDefInfoPtr *cpulist = NULL; - size_t n = 0; + size_t ncpus; size_t i; - *cpus = NULL; + *cpuDefs = NULL; if (!(cmd = qemuMonitorJSONMakeCommand("query-cpu-definitions", NULL))) return -1; if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) - goto cleanup; + return -1; /* Urgh, some QEMU architectures have the query-cpu-definitions * command, but return 'GenericError' with string "Not supported", * instead of simply omitting the command entirely :-( */ - if (qemuMonitorJSONHasError(reply, "GenericError")) { - ret = 0; - goto cleanup; - } + if (qemuMonitorJSONHasError(reply, "GenericError")) + return 0; if (qemuMonitorJSONCheckReply(cmd, reply, VIR_JSON_TYPE_ARRAY) < 0) - goto cleanup; + return -1; data = virJSONValueObjectGetArray(reply, "return"); - n = virJSONValueArraySize(data); + ncpus = virJSONValueArraySize(data); - if (VIR_ALLOC_N(cpulist, n) < 0) - goto cleanup; + if (!(defs = qemuMonitorCPUDefsNew(ncpus))) + return -1; - for (i = 0; i < n; i++) { + for (i = 0; i < defs->ncpus; i++) { virJSONValuePtr child = virJSONValueArrayGet(data, i); const char *tmp; qemuMonitorCPUDefInfoPtr cpu; if (VIR_ALLOC(cpu) < 0) - goto cleanup; + return -1; - cpulist[i] = cpu; + defs->cpus[i] = cpu; if (!(tmp = virJSONValueObjectGetString(child, "name"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("query-cpu-definitions reply data was missing 'name'")); - goto cleanup; + return -1; } cpu->name = g_strdup(tmp); @@ -5640,7 +5637,7 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon, virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("unavailable-features in query-cpu-definitions " "reply data was not an array")); - goto cleanup; + return -1; } len = virJSONValueArraySize(blockers); @@ -5652,7 +5649,7 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon, cpu->usable = VIR_TRISTATE_BOOL_NO; if (VIR_ALLOC_N(cpu->blockers, len + 1) < 0) - goto cleanup; + return -1; for (j = 0; j < len; j++) { virJSONValuePtr blocker = virJSONValueArrayGet(blockers, j); @@ -5661,7 +5658,7 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon, virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("unexpected value in unavailable-features " "array")); - goto cleanup; + return -1; } cpu->blockers[j] = g_strdup(virJSONValueGetString(blocker)); @@ -5669,17 +5666,8 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon, } } - ret = n; - *cpus = cpulist; - cpulist = NULL; - - cleanup: - if (cpulist) { - for (i = 0; i < n; i++) - qemuMonitorCPUDefInfoFree(cpulist[i]); - VIR_FREE(cpulist); - } - return ret; + *cpuDefs = g_steal_pointer(&defs); + return 0; } diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index e85a606792..7e6d1b9919 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -379,7 +379,7 @@ int qemuMonitorJSONGetMachines(qemuMonitorPtr mon, ATTRIBUTE_NONNULL(2); int qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon, - qemuMonitorCPUDefInfoPtr **cpus) + qemuMonitorCPUDefsPtr *cpuDefs) ATTRIBUTE_NONNULL(2); int qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 963b54d27f..c84ff0d6b4 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -428,10 +428,7 @@ testQemuMonitorJSONGetCPUDefinitions(const void *opaque) { const testGenericData *data = opaque; virDomainXMLOptionPtr xmlopt = data->xmlopt; - int ret = -1; - qemuMonitorCPUDefInfoPtr *cpus = NULL; - int ncpus = 0; - size_t i; + g_autoptr(qemuMonitorCPUDefs) defs = NULL; g_autoptr(qemuMonitorTest) test = NULL; if (!(test = qemuMonitorTestNewSchema(xmlopt, data->schema))) @@ -453,31 +450,30 @@ testQemuMonitorJSONGetCPUDefinitions(const void *opaque) " } " " ]" "}") < 0) - goto cleanup; + return -1; - if ((ncpus = qemuMonitorGetCPUDefinitions(qemuMonitorTestGetMonitor(test), - &cpus)) < 0) - goto cleanup; + if (qemuMonitorGetCPUDefinitions(qemuMonitorTestGetMonitor(test), &defs) < 0) + return -1; - if (ncpus != 3) { + if (defs->ncpus != 3) { virReportError(VIR_ERR_INTERNAL_ERROR, - "ncpus %d is not 3", ncpus); - goto cleanup; + "ncpus %zu is not 3", defs->ncpus); + return -1; } #define CHECK_FULL(i, wantname, Usable) \ do { \ - if (STRNEQ(cpus[i]->name, (wantname))) { \ + if (STRNEQ(defs->cpus[i]->name, (wantname))) { \ virReportError(VIR_ERR_INTERNAL_ERROR, \ "name %s is not %s", \ - cpus[i]->name, (wantname)); \ - goto cleanup; \ + defs->cpus[i]->name, (wantname)); \ + return -1; \ } \ - if (cpus[i]->usable != (Usable)) { \ + if (defs->cpus[i]->usable != (Usable)) { \ virReportError(VIR_ERR_INTERNAL_ERROR, \ "%s: expecting usable flag %d, got %d", \ - cpus[i]->name, Usable, cpus[i]->usable); \ - goto cleanup; \ + defs->cpus[i]->name, Usable, defs->cpus[i]->usable); \ + return -1; \ } \ } while (0) @@ -496,13 +492,7 @@ testQemuMonitorJSONGetCPUDefinitions(const void *opaque) #undef CHECK_USABLE #undef CHECK_FULL - ret = 0; - - cleanup: - for (i = 0; i < ncpus; i++) - qemuMonitorCPUDefInfoFree(cpus[i]); - VIR_FREE(cpus); - return ret; + return 0; } -- 2.23.0

Let's store qemuMonitorCPUDefInfo directly in the array of CPUs in qemuMonitorCPUDefs rather then using an array of pointers. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - trivial rebase Version 3: - minor change caused by g_new0 introduced in v3 of the previous patch src/qemu/qemu_capabilities.c | 14 +++++++------- src/qemu/qemu_monitor.c | 7 +++---- src/qemu/qemu_monitor.h | 2 +- src/qemu/qemu_monitor_json.c | 7 +------ tests/qemumonitorjsontest.c | 8 ++++---- 5 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index e8b857b8cf..af51a701b1 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2473,11 +2473,11 @@ virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, for (name = libvirtModels; name && *name; name++) { for (i = 0; i < defs->ncpus; i++) { - if (STRCASENEQ(defs->cpus[i]->name, *name)) + if (STRCASENEQ(defs->cpus[i].name, *name)) continue; - VIR_FREE(defs->cpus[i]->name); - defs->cpus[i]->name = g_strdup(*name); + VIR_FREE(defs->cpus[i].name); + defs->cpus[i].name = g_strdup(*name); } } } @@ -2488,13 +2488,13 @@ virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, for (i = 0; i < defs->ncpus; i++) { virDomainCapsCPUUsable usable = VIR_DOMCAPS_CPU_USABLE_UNKNOWN; - if (defs->cpus[i]->usable == VIR_TRISTATE_BOOL_YES) + if (defs->cpus[i].usable == VIR_TRISTATE_BOOL_YES) usable = VIR_DOMCAPS_CPU_USABLE_YES; - else if (defs->cpus[i]->usable == VIR_TRISTATE_BOOL_NO) + else if (defs->cpus[i].usable == VIR_TRISTATE_BOOL_NO) usable = VIR_DOMCAPS_CPU_USABLE_NO; - if (virDomainCapsCPUModelsAddSteal(models, &defs->cpus[i]->name, usable, - &defs->cpus[i]->blockers) < 0) + if (virDomainCapsCPUModelsAddSteal(models, &defs->cpus[i].name, usable, + &defs->cpus[i].blockers) < 0) goto cleanup; } diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 44c8ba2adb..f906472cd1 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3572,9 +3572,8 @@ qemuMonitorCPUDefsFree(qemuMonitorCPUDefsPtr defs) return; for (i = 0; i < defs->ncpus; i++) { - g_strfreev(defs->cpus[i]->blockers); - g_free(defs->cpus[i]->name); - g_free(defs->cpus[i]); + g_strfreev(defs->cpus[i].blockers); + g_free(defs->cpus[i].name); } g_free(defs->cpus); @@ -3588,7 +3587,7 @@ qemuMonitorCPUDefsNew(size_t count) g_autoptr(qemuMonitorCPUDefs) defs = NULL; defs = g_new0(qemuMonitorCPUDefs, 1); - defs->cpus = g_new0(qemuMonitorCPUDefInfoPtr, count); + defs->cpus = g_new0(qemuMonitorCPUDefInfo, count); defs->ncpus = count; return g_steal_pointer(&defs); diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 00f4dd437f..f275e910cf 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1116,7 +1116,7 @@ typedef struct _qemuMonitorCPUDefs qemuMonitorCPUDefs; typedef qemuMonitorCPUDefs *qemuMonitorCPUDefsPtr; struct _qemuMonitorCPUDefs { size_t ncpus; - qemuMonitorCPUDefInfoPtr *cpus; + qemuMonitorCPUDefInfoPtr cpus; }; int qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 8f04be79c1..a6cf70c70a 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -5611,12 +5611,7 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon, for (i = 0; i < defs->ncpus; i++) { virJSONValuePtr child = virJSONValueArrayGet(data, i); const char *tmp; - qemuMonitorCPUDefInfoPtr cpu; - - if (VIR_ALLOC(cpu) < 0) - return -1; - - defs->cpus[i] = cpu; + qemuMonitorCPUDefInfoPtr cpu = defs->cpus + i; if (!(tmp = virJSONValueObjectGetString(child, "name"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index c84ff0d6b4..81680d97f8 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -463,16 +463,16 @@ testQemuMonitorJSONGetCPUDefinitions(const void *opaque) #define CHECK_FULL(i, wantname, Usable) \ do { \ - if (STRNEQ(defs->cpus[i]->name, (wantname))) { \ + if (STRNEQ(defs->cpus[i].name, (wantname))) { \ virReportError(VIR_ERR_INTERNAL_ERROR, \ "name %s is not %s", \ - defs->cpus[i]->name, (wantname)); \ + defs->cpus[i].name, (wantname)); \ return -1; \ } \ - if (defs->cpus[i]->usable != (Usable)) { \ + if (defs->cpus[i].usable != (Usable)) { \ virReportError(VIR_ERR_INTERNAL_ERROR, \ "%s: expecting usable flag %d, got %d", \ - defs->cpus[i]->name, Usable, defs->cpus[i]->usable); \ + defs->cpus[i].name, Usable, defs->cpus[i].usable); \ return -1; \ } \ } while (0) -- 2.23.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change Version 3: - more glib functions - the function now returns the pointer to the copy rather than int as it can never fail src/qemu/qemu_monitor.c | 23 +++++++++++++++++++++++ src/qemu/qemu_monitor.h | 1 + 2 files changed, 24 insertions(+) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index f906472cd1..39c3122074 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3594,6 +3594,29 @@ qemuMonitorCPUDefsNew(size_t count) } +qemuMonitorCPUDefsPtr +qemuMonitorCPUDefsCopy(qemuMonitorCPUDefsPtr src) +{ + g_autoptr(qemuMonitorCPUDefs) defs = NULL; + size_t i; + + if (!src) + return NULL; + + defs = qemuMonitorCPUDefsNew(src->ncpus); + for (i = 0; i < src->ncpus; i++) { + qemuMonitorCPUDefInfoPtr cpuDst = defs->cpus + i; + qemuMonitorCPUDefInfoPtr cpuSrc = src->cpus + i; + + cpuDst->usable = cpuSrc->usable; + cpuDst->name = g_strdup(cpuSrc->name); + cpuDst->blockers = g_strdupv(cpuSrc->blockers); + } + + return g_steal_pointer(&defs); +} + + int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon, qemuMonitorCPUModelExpansionType type, diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index f275e910cf..629379802c 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1122,6 +1122,7 @@ struct _qemuMonitorCPUDefs { int qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon, qemuMonitorCPUDefsPtr *cpuDefs); qemuMonitorCPUDefsPtr qemuMonitorCPUDefsNew(size_t count); +qemuMonitorCPUDefsPtr qemuMonitorCPUDefsCopy(qemuMonitorCPUDefsPtr src); void qemuMonitorCPUDefsFree(qemuMonitorCPUDefsPtr defs); G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuMonitorCPUDefs, qemuMonitorCPUDefsFree); -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:10PM +0100, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
Version 3: - more glib functions - the function now returns the pointer to the copy rather than int as it can never fail
src/qemu/qemu_monitor.c | 23 +++++++++++++++++++++++ src/qemu/qemu_monitor.h | 1 + 2 files changed, 24 insertions(+)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - no change Version 3: - g_autofree src/qemu/qemu_capabilities.c | 58 +++++++++++++++--------------------- 1 file changed, 24 insertions(+), 34 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index af51a701b1..5136fe9202 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3461,15 +3461,10 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, virDomainVirtType type) { virDomainCapsCPUModelsPtr cpus = NULL; - xmlNodePtr *nodes = NULL; - char *str = NULL; + g_autofree xmlNodePtr * nodes = NULL; size_t i; int n; - int ret = -1; xmlNodePtr node; - xmlNodePtr *blockerNodes = NULL; - char **blockers = NULL; - int nblockers; if (type == VIR_DOMAIN_VIRT_KVM) n = virXPathNodeSet("./cpu[@type='kvm']", ctxt, &nodes); @@ -3479,16 +3474,14 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, if (n < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to parse qemu capabilities cpus")); - goto cleanup; + return -1; } - if (n == 0) { - ret = 0; - goto cleanup; - } + if (n == 0) + return 0; if (!(cpus = virDomainCapsCPUModelsNew(n))) - goto cleanup; + return -1; if (type == VIR_DOMAIN_VIRT_KVM) qemuCaps->kvmCPUModels = cpus; @@ -3497,19 +3490,24 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, for (i = 0; i < n; i++) { int usable = VIR_DOMCAPS_CPU_USABLE_UNKNOWN; - - if ((str = virXMLPropString(nodes[i], "usable")) && - (usable = virDomainCapsCPUUsableTypeFromString(str)) < 0) { + g_autofree char * strUsable = NULL; + g_autofree char * name = NULL; + g_autofree xmlNodePtr * blockerNodes = NULL; + VIR_AUTOSTRINGLIST blockers = NULL; + int nblockers; + + if ((strUsable = virXMLPropString(nodes[i], "usable")) && + (usable = virDomainCapsCPUUsableTypeFromString(strUsable)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("unknown value '%s' in attribute 'usable'"), str); - goto cleanup; + _("unknown value '%s' in attribute 'usable'"), + strUsable); + return -1; } - VIR_FREE(str); - if (!(str = virXMLPropString(nodes[i], "name"))) { + if (!(name = virXMLPropString(nodes[i], "name"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing cpu name in QEMU capabilities cache")); - goto cleanup; + return -1; } node = ctxt->node; @@ -3520,38 +3518,30 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, if (nblockers < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to parse CPU blockers in QEMU capabilities")); - goto cleanup; + return -1; } if (nblockers > 0) { size_t j; if (VIR_ALLOC_N(blockers, nblockers + 1) < 0) - goto cleanup; + return -1; for (j = 0; j < nblockers; j++) { if (!(blockers[j] = virXMLPropString(blockerNodes[j], "name"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing blocker name in QEMU " "capabilities cache")); - goto cleanup; + return -1; } } - VIR_FREE(blockerNodes); } - if (virDomainCapsCPUModelsAddSteal(cpus, &str, usable, &blockers) < 0) - goto cleanup; + if (virDomainCapsCPUModelsAddSteal(cpus, &name, usable, &blockers) < 0) + return -1; } - ret = 0; - - cleanup: - VIR_FREE(nodes); - VIR_FREE(str); - VIR_FREE(blockerNodes); - virStringListFree(blockers); - return ret; + return 0; } -- 2.23.0

While virDomainCapsCPUModel structure contains 'usable' field with virDomainCapsCPUUsable type, the lower level structure specific to QEMU driver used virTriStateBool for the same thing and we had to translate between them. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 11 +++-------- src/qemu/qemu_monitor.h | 2 +- src/qemu/qemu_monitor_json.c | 4 ++-- tests/qemumonitorjsontest.c | 4 ++-- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 5136fe9202..2a93488520 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2486,14 +2486,9 @@ virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, goto cleanup; for (i = 0; i < defs->ncpus; i++) { - virDomainCapsCPUUsable usable = VIR_DOMCAPS_CPU_USABLE_UNKNOWN; - - if (defs->cpus[i].usable == VIR_TRISTATE_BOOL_YES) - usable = VIR_DOMCAPS_CPU_USABLE_YES; - else if (defs->cpus[i].usable == VIR_TRISTATE_BOOL_NO) - usable = VIR_DOMCAPS_CPU_USABLE_NO; - - if (virDomainCapsCPUModelsAddSteal(models, &defs->cpus[i].name, usable, + if (virDomainCapsCPUModelsAddSteal(models, + &defs->cpus[i].name, + defs->cpus[i].usable, &defs->cpus[i].blockers) < 0) goto cleanup; } diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 629379802c..0eed8b3f9e 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1107,7 +1107,7 @@ typedef struct _qemuMonitorCPUDefInfo qemuMonitorCPUDefInfo; typedef qemuMonitorCPUDefInfo *qemuMonitorCPUDefInfoPtr; struct _qemuMonitorCPUDefInfo { - virTristateBool usable; + virDomainCapsCPUUsable usable; char *name; char **blockers; /* NULL-terminated string list */ }; diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index a6cf70c70a..54963233e6 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -5638,11 +5638,11 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon, len = virJSONValueArraySize(blockers); if (len == 0) { - cpu->usable = VIR_TRISTATE_BOOL_YES; + cpu->usable = VIR_DOMCAPS_CPU_USABLE_YES; continue; } - cpu->usable = VIR_TRISTATE_BOOL_NO; + cpu->usable = VIR_DOMCAPS_CPU_USABLE_NO; if (VIR_ALLOC_N(cpu->blockers, len + 1) < 0) return -1; diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 81680d97f8..16a1d40a56 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -478,11 +478,11 @@ testQemuMonitorJSONGetCPUDefinitions(const void *opaque) } while (0) #define CHECK(i, wantname) \ - CHECK_FULL(i, wantname, VIR_TRISTATE_BOOL_ABSENT) + CHECK_FULL(i, wantname, VIR_DOMCAPS_CPU_USABLE_UNKNOWN) #define CHECK_USABLE(i, wantname, usable) \ CHECK_FULL(i, wantname, \ - usable ? VIR_TRISTATE_BOOL_YES : VIR_TRISTATE_BOOL_NO) + usable ? VIR_DOMCAPS_CPU_USABLE_YES : VIR_DOMCAPS_CPU_USABLE_NO) CHECK(0, "qemu64"); CHECK_USABLE(1, "Opteron_G4", false); -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:12PM +0100, Jiri Denemark wrote:
While virDomainCapsCPUModel structure contains 'usable' field with virDomainCapsCPUUsable type, the lower level structure specific to QEMU driver used virTriStateBool for the same thing and we had to translate between them.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 11 +++-------- src/qemu/qemu_monitor.h | 2 +- src/qemu/qemu_monitor_json.c | 4 ++-- tests/qemumonitorjsontest.c | 4 ++-- 4 files changed, 8 insertions(+), 13 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

The function translates qemuMonitorCPUDefsPtr (used by QEMU caps probing code) into virDomainCapsCPUModelsPtr used by domain capabilities. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - trivial rebase Version 3: - g_autoptr, g_steal_pointer src/qemu/qemu_capabilities.c | 58 ++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 2a93488520..1497c4f645 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1881,6 +1881,35 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, } +static virDomainCapsCPUModelsPtr +virQEMUCapsCPUDefsToModels(qemuMonitorCPUDefsPtr defs, + const char **modelWhitelist, + const char **modelBlacklist) +{ + g_autoptr(virDomainCapsCPUModels) cpuModels = NULL; + size_t i; + + if (!(cpuModels = virDomainCapsCPUModelsNew(defs->ncpus))) + return NULL; + + for (i = 0; i < defs->ncpus; i++) { + qemuMonitorCPUDefInfoPtr cpu = defs->cpus + i; + + if (modelWhitelist && !virStringListHasString(modelWhitelist, cpu->name)) + continue; + + if (modelBlacklist && virStringListHasString(modelBlacklist, cpu->name)) + continue; + + if (virDomainCapsCPUModelsAdd(cpuModels, cpu->name, cpu->usable, + cpu->blockers) < 0) + return NULL; + } + + return g_steal_pointer(&cpuModels); +} + + virDomainCapsCPUModelsPtr virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, virDomainVirtType type, @@ -2448,19 +2477,15 @@ virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, virDomainCapsCPUModelsPtr *cpuModels) { g_autoptr(qemuMonitorCPUDefs) defs = NULL; - virDomainCapsCPUModelsPtr models = NULL; size_t i; - int ret = -1; *cpuModels = NULL; if (qemuMonitorGetCPUDefinitions(mon, &defs) < 0) return -1; - if (!defs) { - ret = 0; - goto cleanup; - } + if (!defs) + return 0; /* QEMU 2.11 for Power renamed all CPU models to lower case, we need to * translate them back to libvirt's upper case model names. */ @@ -2469,7 +2494,7 @@ virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, char **name; if (virCPUGetModels(arch, &libvirtModels) < 0) - goto cleanup; + return -1; for (name = libvirtModels; name && *name; name++) { for (i = 0; i < defs->ncpus; i++) { @@ -2482,23 +2507,10 @@ virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, } } - if (!(models = virDomainCapsCPUModelsNew(defs->ncpus))) - goto cleanup; - - for (i = 0; i < defs->ncpus; i++) { - if (virDomainCapsCPUModelsAddSteal(models, - &defs->cpus[i].name, - defs->cpus[i].usable, - &defs->cpus[i].blockers) < 0) - goto cleanup; - } - - *cpuModels = g_steal_pointer(&models); - ret = 0; + if (!(*cpuModels = virQEMUCapsCPUDefsToModels(defs, NULL, NULL))) + return -1; - cleanup: - virObjectUnref(models); - return ret; + return 0; } -- 2.23.0

The functions return virDomainCapsCPUModelsPtr and thus they should be called *CPUModels for consistency. Functions called *CPUDefinitions will work on qemuMonitorCPUDefsPtr. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - new patch Version 3: - no change src/qemu/qemu_capabilities.c | 28 ++++++++++++++-------------- src/qemu/qemu_capabilities.h | 14 +++++++------- src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_process.c | 4 ++-- tests/cputest.c | 2 +- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 1497c4f645..dfffc45d1d 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1911,10 +1911,10 @@ virQEMUCapsCPUDefsToModels(qemuMonitorCPUDefsPtr defs, virDomainCapsCPUModelsPtr -virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, - virDomainVirtType type, - const char **modelWhitelist, - const char **modelBlacklist) +virQEMUCapsGetCPUModels(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + const char **modelWhitelist, + const char **modelBlacklist) { virDomainCapsCPUModelsPtr cpuModels; @@ -2472,9 +2472,9 @@ virQEMUCapsProbeQMPMachineProps(virQEMUCapsPtr qemuCaps, int -virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, - virArch arch, - virDomainCapsCPUModelsPtr *cpuModels) +virQEMUCapsFetchCPUModels(qemuMonitorPtr mon, + virArch arch, + virDomainCapsCPUModelsPtr *cpuModels) { g_autoptr(qemuMonitorCPUDefs) defs = NULL; size_t i; @@ -2524,7 +2524,7 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps, if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS)) return 0; - if (virQEMUCapsFetchCPUDefinitions(mon, qemuCaps->arch, &models) < 0) + if (virQEMUCapsFetchCPUModels(mon, qemuCaps->arch, &models) < 0) return -1; if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) @@ -3145,7 +3145,7 @@ virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps, if (!(data = virQEMUCapsGetCPUModelX86Data(qemuCaps, model, migratable))) goto cleanup; - cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type, NULL, NULL); + cpuModels = virQEMUCapsGetCPUModels(qemuCaps, type, NULL, NULL); if (cpuDecode(cpu, data, cpuModels) < 0) goto cleanup; @@ -3234,7 +3234,7 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, VIR_DEBUG("No host CPU model info from QEMU; probing host CPU directly"); - cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type, NULL, NULL); + cpuModels = virQEMUCapsGetCPUModels(qemuCaps, type, NULL, NULL); hostCPU = virQEMUCapsProbeHostCPU(hostArch, cpuModels); if (!hostCPU || @@ -5281,10 +5281,10 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps, VIR_AUTOSTRINGLIST models = NULL; if (virCPUGetModels(domCaps->arch, &models) >= 0) { - domCaps->cpu.custom = virQEMUCapsGetCPUDefinitions(qemuCaps, - domCaps->virttype, - (const char **)models, - blacklist); + domCaps->cpu.custom = virQEMUCapsGetCPUModels(qemuCaps, + domCaps->virttype, + (const char **)models, + blacklist); } else { domCaps->cpu.custom = NULL; } diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index ba3fe3d2b6..923706c3bf 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -569,13 +569,13 @@ int virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, const char **name, size_t count, virDomainCapsCPUUsable usable); -virDomainCapsCPUModelsPtr virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, - virDomainVirtType type, - const char **modelWhitelist, - const char **modelBlacklist); -int virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, - virArch arch, - virDomainCapsCPUModelsPtr *cpuModels); +virDomainCapsCPUModelsPtr virQEMUCapsGetCPUModels(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + const char **modelWhitelist, + const char **modelBlacklist); +int virQEMUCapsFetchCPUModels(qemuMonitorPtr mon, + virArch arch, + virDomainCapsCPUModelsPtr *cpuModels); typedef enum { /* Host CPU definition reported in domain capabilities. */ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 76787bf56a..8240a6e74e 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -13730,7 +13730,7 @@ qemuConnectBaselineHypervisorCPU(virConnectPtr conn, if (!qemuCaps) goto cleanup; - if (!(cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, virttype, NULL, NULL)) || + if (!(cpuModels = virQEMUCapsGetCPUModels(qemuCaps, virttype, NULL, NULL)) || cpuModels->nmodels == 0) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("QEMU '%s' does not support any CPU models for " diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index bdd01993a2..2ea524ab33 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4358,7 +4358,7 @@ qemuProcessFetchCPUDefinitions(virQEMUDriverPtr driver, if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) goto error; - rc = virQEMUCapsFetchCPUDefinitions(priv->mon, vm->def->os.arch, &models); + rc = virQEMUCapsFetchCPUModels(priv->mon, vm->def->os.arch, &models); if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) goto error; @@ -6127,7 +6127,7 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def, VIR_QEMU_CAPS_HOST_CPU_MIGRATABLE)) < 0) return -1; - cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType, NULL, NULL); + cpuModels = virQEMUCapsGetCPUModels(qemuCaps, def->virtType, NULL, NULL); if (virCPUTranslate(def->os.arch, def->cpu, cpuModels) < 0) return -1; diff --git a/tests/cputest.c b/tests/cputest.c index 11c061e37a..ef2d4e28df 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -548,7 +548,7 @@ cpuTestGetCPUModels(const struct data *data, if (!(qemuCaps = cpuTestMakeQEMUCaps(data))) return -1; - *models = virQEMUCapsGetCPUDefinitions(qemuCaps, VIR_DOMAIN_VIRT_KVM, NULL, NULL); + *models = virQEMUCapsGetCPUModels(qemuCaps, VIR_DOMAIN_VIRT_KVM, NULL, NULL); virObjectUnref(qemuCaps); -- 2.23.0

Most of the code moved to a new virQEMUCapsFetchCPUDefinitions function and the existing virQEMUCapsFetchCPUModels just becomes a small wrapper around virQEMUCapsFetchCPUDefinitions and virQEMUCapsCPUDefsToModels. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - new patch Version 3: - g_autoptr, g_steal_pointer src/qemu/qemu_capabilities.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index dfffc45d1d..431841e61e 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2471,15 +2471,15 @@ virQEMUCapsProbeQMPMachineProps(virQEMUCapsPtr qemuCaps, } -int -virQEMUCapsFetchCPUModels(qemuMonitorPtr mon, - virArch arch, - virDomainCapsCPUModelsPtr *cpuModels) +static int +virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon, + virArch arch, + qemuMonitorCPUDefsPtr *cpuDefs) { g_autoptr(qemuMonitorCPUDefs) defs = NULL; size_t i; - *cpuModels = NULL; + *cpuDefs = NULL; if (qemuMonitorGetCPUDefinitions(mon, &defs) < 0) return -1; @@ -2507,7 +2507,24 @@ virQEMUCapsFetchCPUModels(qemuMonitorPtr mon, } } - if (!(*cpuModels = virQEMUCapsCPUDefsToModels(defs, NULL, NULL))) + *cpuDefs = g_steal_pointer(&defs); + return 0; +} + + +int +virQEMUCapsFetchCPUModels(qemuMonitorPtr mon, + virArch arch, + virDomainCapsCPUModelsPtr *cpuModels) +{ + g_autoptr(qemuMonitorCPUDefs) defs = NULL; + + *cpuModels = NULL; + + if (virQEMUCapsFetchCPUDefinitions(mon, arch, &defs) < 0) + return -1; + + if (defs && !(*cpuModels = virQEMUCapsCPUDefsToModels(defs, NULL, NULL))) return -1; return 0; -- 2.23.0

We will need to keep some QEMU-specific data for each CPU model supported by a QEMU binary. Instead of complicating the generic virDomainCapsCPUModelsPtr, we can just directly store qemuMonitorCPUDefsPtr returned by the capabilities probing code. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - adapted to changes made by the new patches Version 3: - glib functions - implicit translation between virDomainCapsCPUUsable and virTristateBool is gone since "qemu: Use virDomainCapsCPUUsable in qemuMonitorCPUDefInfo" patch src/qemu/qemu_capabilities.c | 108 +++++++++++++++++------------------ 1 file changed, 52 insertions(+), 56 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 431841e61e..ccb337ee2f 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -607,8 +607,8 @@ struct _virQEMUCaps { virArch arch; virHashTablePtr domCapsCache; - virDomainCapsCPUModelsPtr kvmCPUModels; - virDomainCapsCPUModelsPtr tcgCPUModels; + qemuMonitorCPUDefsPtr kvmCPUModels; + qemuMonitorCPUDefsPtr tcgCPUModels; size_t nmachineTypes; struct virQEMUCapsMachineType *machineTypes; @@ -1620,17 +1620,8 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) ret->arch = qemuCaps->arch; - if (qemuCaps->kvmCPUModels) { - ret->kvmCPUModels = virDomainCapsCPUModelsCopy(qemuCaps->kvmCPUModels); - if (!ret->kvmCPUModels) - goto error; - } - - if (qemuCaps->tcgCPUModels) { - ret->tcgCPUModels = virDomainCapsCPUModelsCopy(qemuCaps->tcgCPUModels); - if (!ret->tcgCPUModels) - goto error; - } + ret->kvmCPUModels = qemuMonitorCPUDefsCopy(qemuCaps->kvmCPUModels); + ret->tcgCPUModels = qemuMonitorCPUDefsCopy(qemuCaps->tcgCPUModels); if (virQEMUCapsHostCPUDataCopy(&ret->kvmCPU, &qemuCaps->kvmCPU) < 0 || virQEMUCapsHostCPUDataCopy(&ret->tcgCPU, &qemuCaps->tcgCPU) < 0) @@ -1855,25 +1846,36 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, virDomainCapsCPUUsable usable) { size_t i; - virDomainCapsCPUModelsPtr cpus = NULL; + size_t start; + qemuMonitorCPUDefsPtr defs = NULL; if (type == VIR_DOMAIN_VIRT_KVM && qemuCaps->kvmCPUModels) - cpus = qemuCaps->kvmCPUModels; + defs = qemuCaps->kvmCPUModels; else if (type == VIR_DOMAIN_VIRT_QEMU && qemuCaps->tcgCPUModels) - cpus = qemuCaps->tcgCPUModels; + defs = qemuCaps->tcgCPUModels; + + if (defs) { + start = defs->ncpus; - if (!cpus) { - if (!(cpus = virDomainCapsCPUModelsNew(count))) + if (VIR_EXPAND_N(defs->cpus, defs->ncpus, count) < 0) + return -1; + } else { + start = 0; + + if (!(defs = qemuMonitorCPUDefsNew(count))) return -1; if (type == VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvmCPUModels = cpus; + qemuCaps->kvmCPUModels = defs; else - qemuCaps->tcgCPUModels = cpus; + qemuCaps->tcgCPUModels = defs; } for (i = 0; i < count; i++) { - if (virDomainCapsCPUModelsAdd(cpus, name[i], usable, NULL) < 0) + qemuMonitorCPUDefInfoPtr cpu = defs->cpus + start + i; + + cpu->usable = usable; + if (VIR_STRDUP(cpu->name, name[i]) < 0) return -1; } @@ -1916,20 +1918,17 @@ virQEMUCapsGetCPUModels(virQEMUCapsPtr qemuCaps, const char **modelWhitelist, const char **modelBlacklist) { - virDomainCapsCPUModelsPtr cpuModels; + qemuMonitorCPUDefsPtr defs; if (type == VIR_DOMAIN_VIRT_KVM) - cpuModels = qemuCaps->kvmCPUModels; + defs = qemuCaps->kvmCPUModels; else - cpuModels = qemuCaps->tcgCPUModels; + defs = qemuCaps->tcgCPUModels; - if (!cpuModels) + if (!defs) return NULL; - if (modelWhitelist || modelBlacklist) - return virDomainCapsCPUModelsFilter(cpuModels, modelWhitelist, modelBlacklist); - - return virDomainCapsCPUModelsCopy(cpuModels); + return virQEMUCapsCPUDefsToModels(defs, modelWhitelist, modelBlacklist); } @@ -1989,7 +1988,7 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, virDomainVirtType type, virCPUMode mode) { - virDomainCapsCPUModelsPtr cpus; + qemuMonitorCPUDefsPtr cpus; switch (mode) { case VIR_CPU_MODE_HOST_PASSTHROUGH: @@ -2005,7 +2004,7 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, cpus = qemuCaps->kvmCPUModels; else cpus = qemuCaps->tcgCPUModels; - return cpus && cpus->nmodels > 0; + return cpus && cpus->ncpus > 0; case VIR_CPU_MODE_LAST: break; @@ -2536,18 +2535,18 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps, qemuMonitorPtr mon, bool tcg) { - virDomainCapsCPUModelsPtr models = NULL; + qemuMonitorCPUDefsPtr defs = NULL; if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS)) return 0; - if (virQEMUCapsFetchCPUModels(mon, qemuCaps->arch, &models) < 0) + if (virQEMUCapsFetchCPUDefinitions(mon, qemuCaps->arch, &defs) < 0) return -1; if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) - qemuCaps->tcgCPUModels = models; + qemuCaps->tcgCPUModels = defs; else - qemuCaps->kvmCPUModels = models; + qemuCaps->kvmCPUModels = defs; return 0; } @@ -3484,7 +3483,7 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, xmlXPathContextPtr ctxt, virDomainVirtType type) { - virDomainCapsCPUModelsPtr cpus = NULL; + g_autoptr(qemuMonitorCPUDefs) defs = NULL; g_autofree xmlNodePtr * nodes = NULL; size_t i; int n; @@ -3504,20 +3503,14 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, if (n == 0) return 0; - if (!(cpus = virDomainCapsCPUModelsNew(n))) + if (!(defs = qemuMonitorCPUDefsNew(n))) return -1; - if (type == VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvmCPUModels = cpus; - else - qemuCaps->tcgCPUModels = cpus; - for (i = 0; i < n; i++) { + qemuMonitorCPUDefInfoPtr cpu = defs->cpus + i; int usable = VIR_DOMCAPS_CPU_USABLE_UNKNOWN; g_autofree char * strUsable = NULL; - g_autofree char * name = NULL; g_autofree xmlNodePtr * blockerNodes = NULL; - VIR_AUTOSTRINGLIST blockers = NULL; int nblockers; if ((strUsable = virXMLPropString(nodes[i], "usable")) && @@ -3527,8 +3520,9 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, strUsable); return -1; } + cpu->usable = usable; - if (!(name = virXMLPropString(nodes[i], "name"))) { + if (!(cpu->name = virXMLPropString(nodes[i], "name"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing cpu name in QEMU capabilities cache")); return -1; @@ -3548,11 +3542,11 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, if (nblockers > 0) { size_t j; - if (VIR_ALLOC_N(blockers, nblockers + 1) < 0) + if (VIR_ALLOC_N(cpu->blockers, nblockers + 1) < 0) return -1; for (j = 0; j < nblockers; j++) { - if (!(blockers[j] = virXMLPropString(blockerNodes[j], "name"))) { + if (!(cpu->blockers[j] = virXMLPropString(blockerNodes[j], "name"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing blocker name in QEMU " "capabilities cache")); @@ -3560,11 +3554,13 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, } } } - - if (virDomainCapsCPUModelsAddSteal(cpus, &name, usable, &blockers) < 0) - return -1; } + if (type == VIR_DOMAIN_VIRT_KVM) + qemuCaps->kvmCPUModels = g_steal_pointer(&defs); + else + qemuCaps->tcgCPUModels = g_steal_pointer(&defs); + return 0; } @@ -3973,23 +3969,23 @@ virQEMUCapsFormatCPUModels(virQEMUCapsPtr qemuCaps, virBufferPtr buf, virDomainVirtType type) { - virDomainCapsCPUModelsPtr cpus; + qemuMonitorCPUDefsPtr defs; const char *typeStr; size_t i; if (type == VIR_DOMAIN_VIRT_KVM) { typeStr = "kvm"; - cpus = qemuCaps->kvmCPUModels; + defs = qemuCaps->kvmCPUModels; } else { typeStr = "tcg"; - cpus = qemuCaps->tcgCPUModels; + defs = qemuCaps->tcgCPUModels; } - if (!cpus) + if (!defs) return; - for (i = 0; i < cpus->nmodels; i++) { - virDomainCapsCPUModelPtr cpu = cpus->models + i; + for (i = 0; i < defs->ncpus; i++) { + qemuMonitorCPUDefInfoPtr cpu = defs->cpus + i; virBufferAsprintf(buf, "<cpu type='%s' ", typeStr); virBufferEscapeString(buf, "name='%s'", cpu->name); -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:16PM +0100, Jiri Denemark wrote:
We will need to keep some QEMU-specific data for each CPU model supported by a QEMU binary. Instead of complicating the generic virDomainCapsCPUModelsPtr, we can just directly store qemuMonitorCPUDefsPtr returned by the capabilities probing code.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - adapted to changes made by the new patches
Version 3: - glib functions - implicit translation between virDomainCapsCPUUsable and virTristateBool is gone since "qemu: Use virDomainCapsCPUUsable in qemuMonitorCPUDefInfo" patch
src/qemu/qemu_capabilities.c | 108 +++++++++++++++++------------------ 1 file changed, 52 insertions(+), 56 deletions(-)
@@ -1855,25 +1846,36 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, virDomainCapsCPUUsable usable) { size_t i; - virDomainCapsCPUModelsPtr cpus = NULL; + size_t start; + qemuMonitorCPUDefsPtr defs = NULL;
if (type == VIR_DOMAIN_VIRT_KVM && qemuCaps->kvmCPUModels) - cpus = qemuCaps->kvmCPUModels; + defs = qemuCaps->kvmCPUModels; else if (type == VIR_DOMAIN_VIRT_QEMU && qemuCaps->tcgCPUModels) - cpus = qemuCaps->tcgCPUModels; + defs = qemuCaps->tcgCPUModels; + + if (defs) { + start = defs->ncpus;
- if (!cpus) { - if (!(cpus = virDomainCapsCPUModelsNew(count))) + if (VIR_EXPAND_N(defs->cpus, defs->ncpus, count) < 0) + return -1; + } else { + start = 0; + + if (!(defs = qemuMonitorCPUDefsNew(count))) return -1;
if (type == VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvmCPUModels = cpus; + qemuCaps->kvmCPUModels = defs; else - qemuCaps->tcgCPUModels = cpus; + qemuCaps->tcgCPUModels = defs; }
for (i = 0; i < count; i++) { - if (virDomainCapsCPUModelsAdd(cpus, name[i], usable, NULL) < 0) + qemuMonitorCPUDefInfoPtr cpu = defs->cpus + start + i; + + cpu->usable = usable; + if (VIR_STRDUP(cpu->name, name[i]) < 0)
g_strdup
return -1; }
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - no change Version 3: - no change src/conf/domain_capabilities.c | 33 --------------------------------- src/conf/domain_capabilities.h | 3 --- src/libvirt_private.syms | 1 - 3 files changed, 37 deletions(-) diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index 0a89ccd071..fdeb468570 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -181,39 +181,6 @@ virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr old) } -virDomainCapsCPUModelsPtr -virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old, - const char **models, - const char **blacklist) -{ - virDomainCapsCPUModelsPtr cpuModels; - size_t i; - - if (!(cpuModels = virDomainCapsCPUModelsNew(0))) - return NULL; - - for (i = 0; i < old->nmodels; i++) { - if (models && !virStringListHasString(models, old->models[i].name)) - continue; - - if (blacklist && virStringListHasString(blacklist, old->models[i].name)) - continue; - - if (virDomainCapsCPUModelsAdd(cpuModels, - old->models[i].name, - old->models[i].usable, - old->models[i].blockers) < 0) - goto error; - } - - return cpuModels; - - error: - virObjectUnref(cpuModels); - return NULL; -} - - int virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels, char **name, diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index 36500435fd..d989f76d41 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -196,9 +196,6 @@ virDomainCapsPtr virDomainCapsNew(const char *path, virDomainCapsCPUModelsPtr virDomainCapsCPUModelsNew(size_t nmodels); virDomainCapsCPUModelsPtr virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr old); -virDomainCapsCPUModelsPtr virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old, - const char **models, - const char **blacklist); int virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels, char **name, virDomainCapsCPUUsable usable, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 94509d6f43..fe42c6769f 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -193,7 +193,6 @@ virDomainAuditVcpu; virDomainCapsCPUModelsAdd; virDomainCapsCPUModelsAddSteal; virDomainCapsCPUModelsCopy; -virDomainCapsCPUModelsFilter; virDomainCapsCPUModelsGet; virDomainCapsCPUModelsNew; virDomainCapsCPUUsableTypeFromString; -- 2.23.0

Both virDomainCapsCPUModelsAdd and virDomainCapsCPUModelsAddSteal are so simple we can just squash the code in a single function. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - no change Version 3: - g_steal_pointer src/conf/domain_capabilities.c | 33 ++++++++++----------------------- src/conf/domain_capabilities.h | 4 ---- src/libvirt_private.syms | 1 - 3 files changed, 10 insertions(+), 28 deletions(-) diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index fdeb468570..da47643f34 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -181,27 +181,6 @@ virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr old) } -int -virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels, - char **name, - virDomainCapsCPUUsable usable, - char ***blockers) -{ - if (VIR_RESIZE_N(cpuModels->models, cpuModels->nmodels_max, - cpuModels->nmodels, 1) < 0) - return -1; - - cpuModels->models[cpuModels->nmodels].usable = usable; - cpuModels->models[cpuModels->nmodels].name = g_steal_pointer(&*name); - - if (blockers) - cpuModels->models[cpuModels->nmodels].blockers = g_steal_pointer(&*blockers); - - cpuModels->nmodels++; - return 0; -} - - int virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels, const char *name, @@ -210,6 +189,7 @@ virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels, { g_autofree char * nameCopy = NULL; VIR_AUTOSTRINGLIST blockersCopy = NULL; + virDomainCapsCPUModelPtr cpu; if (VIR_STRDUP(nameCopy, name) < 0) return -1; @@ -217,10 +197,17 @@ virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels, if (virStringListCopy(&blockersCopy, (const char **)blockers) < 0) return -1; - if (virDomainCapsCPUModelsAddSteal(cpuModels, &nameCopy, - usable, &blockersCopy) < 0) + if (VIR_RESIZE_N(cpuModels->models, cpuModels->nmodels_max, + cpuModels->nmodels, 1) < 0) return -1; + cpu = cpuModels->models + cpuModels->nmodels; + cpuModels->nmodels++; + + cpu->usable = usable; + cpu->name = g_steal_pointer(&nameCopy); + cpu->blockers = g_steal_pointer(&blockersCopy); + return 0; } diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index d989f76d41..d93c06c2e1 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -196,10 +196,6 @@ virDomainCapsPtr virDomainCapsNew(const char *path, virDomainCapsCPUModelsPtr virDomainCapsCPUModelsNew(size_t nmodels); virDomainCapsCPUModelsPtr virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr old); -int virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels, - char **name, - virDomainCapsCPUUsable usable, - char ***blockers); int virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels, const char *name, virDomainCapsCPUUsable usable, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index fe42c6769f..df9d07d297 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -191,7 +191,6 @@ virDomainAuditVcpu; # conf/domain_capabilities.h virDomainCapsCPUModelsAdd; -virDomainCapsCPUModelsAddSteal; virDomainCapsCPUModelsCopy; virDomainCapsCPUModelsGet; virDomainCapsCPUModelsNew; -- 2.23.0

We need to create a mapping between CPU model names and their corresponding QOM types. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - ignore empty typename strings Version 3: - g_strdup src/qemu/qemu_capabilities.c | 3 + src/qemu/qemu_monitor.c | 2 + src/qemu/qemu_monitor.h | 1 + src/qemu/qemu_monitor_json.c | 5 + .../caps_2.10.0.aarch64.xml | 126 ++--- .../caps_2.10.0.ppc64.xml | 512 ++++++++--------- .../caps_2.10.0.s390x.xml | 264 ++++----- .../caps_2.10.0.x86_64.xml | 132 ++--- .../caps_2.11.0.s390x.xml | 264 ++++----- .../caps_2.11.0.x86_64.xml | 136 ++--- .../caps_2.12.0.aarch64.xml | 136 ++--- .../caps_2.12.0.ppc64.xml | 516 +++++++++--------- .../caps_2.12.0.s390x.xml | 264 ++++----- .../caps_2.12.0.x86_64.xml | 180 +++--- .../qemucapabilitiesdata/caps_2.9.0.ppc64.xml | 512 ++++++++--------- .../qemucapabilitiesdata/caps_2.9.0.s390x.xml | 256 ++++----- .../caps_2.9.0.x86_64.xml | 128 ++--- .../qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 516 +++++++++--------- .../qemucapabilitiesdata/caps_3.0.0.s390x.xml | 272 ++++----- .../caps_3.0.0.x86_64.xml | 184 +++---- .../qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 516 +++++++++--------- .../caps_3.1.0.x86_64.xml | 196 +++---- .../caps_4.0.0.aarch64.xml | 148 ++--- .../qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 516 +++++++++--------- .../qemucapabilitiesdata/caps_4.0.0.s390x.xml | 284 +++++----- .../caps_4.0.0.x86_64.xml | 196 +++---- .../caps_4.1.0.x86_64.xml | 400 +++++++------- .../caps_4.2.0.aarch64.xml | 148 ++--- .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 516 +++++++++--------- .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 300 +++++----- .../caps_4.2.0.x86_64.xml | 400 +++++++------- 31 files changed, 4020 insertions(+), 4009 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index ccb337ee2f..665fee28eb 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3528,6 +3528,8 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, return -1; } + cpu->type = virXMLPropString(nodes[i], "typename"); + node = ctxt->node; ctxt->node = nodes[i]; nblockers = virXPathNodeSet("./blocker", ctxt, &blockerNodes); @@ -3989,6 +3991,7 @@ virQEMUCapsFormatCPUModels(virQEMUCapsPtr qemuCaps, virBufferAsprintf(buf, "<cpu type='%s' ", typeStr); virBufferEscapeString(buf, "name='%s'", cpu->name); + virBufferEscapeString(buf, " typename='%s'", cpu->type); if (cpu->usable) { virBufferAsprintf(buf, " usable='%s'", virDomainCapsCPUUsableTypeToString(cpu->usable)); diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 39c3122074..a1cdb19318 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3574,6 +3574,7 @@ qemuMonitorCPUDefsFree(qemuMonitorCPUDefsPtr defs) for (i = 0; i < defs->ncpus; i++) { g_strfreev(defs->cpus[i].blockers); g_free(defs->cpus[i].name); + g_free(defs->cpus[i].type); } g_free(defs->cpus); @@ -3610,6 +3611,7 @@ qemuMonitorCPUDefsCopy(qemuMonitorCPUDefsPtr src) cpuDst->usable = cpuSrc->usable; cpuDst->name = g_strdup(cpuSrc->name); + cpuDst->type = g_strdup(cpuSrc->type); cpuDst->blockers = g_strdupv(cpuSrc->blockers); } diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 0eed8b3f9e..824b580344 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1109,6 +1109,7 @@ typedef qemuMonitorCPUDefInfo *qemuMonitorCPUDefInfoPtr; struct _qemuMonitorCPUDefInfo { virDomainCapsCPUUsable usable; char *name; + char *type; char **blockers; /* NULL-terminated string list */ }; diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 54963233e6..3f3bfc1720 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -5621,6 +5621,11 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon, cpu->name = g_strdup(tmp); + if ((tmp = virJSONValueObjectGetString(child, "typename")) && + *tmp && + VIR_STRDUP(cpu->type, tmp) < 0) + return -1; + if (virJSONValueObjectHasKey(child, "unavailable-features")) { virJSONValuePtr blockers; size_t j; diff --git a/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.xml index f0bf003528..ad4f5447ed 100644 --- a/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.xml @@ -144,69 +144,69 @@ <microcodeVersion>61700287</microcodeVersion> <package> (v2.10.0)</package> <arch>aarch64</arch> - <cpu type='kvm' name='pxa262'/> - <cpu type='kvm' name='pxa270-a0'/> - <cpu type='kvm' name='arm1136'/> - <cpu type='kvm' name='cortex-a15'/> - <cpu type='kvm' name='pxa260'/> - <cpu type='kvm' name='arm1136-r2'/> - <cpu type='kvm' name='pxa261'/> - <cpu type='kvm' name='pxa255'/> - <cpu type='kvm' name='arm926'/> - <cpu type='kvm' name='arm11mpcore'/> - <cpu type='kvm' name='pxa250'/> - <cpu type='kvm' name='ti925t'/> - <cpu type='kvm' name='cortex-a57'/> - <cpu type='kvm' name='sa1110'/> - <cpu type='kvm' name='arm1176'/> - <cpu type='kvm' name='cortex-a53'/> - <cpu type='kvm' name='host'/> - <cpu type='kvm' name='sa1100'/> - <cpu type='kvm' name='pxa270-c5'/> - <cpu type='kvm' name='cortex-a9'/> - <cpu type='kvm' name='cortex-a8'/> - <cpu type='kvm' name='pxa270-c0'/> - <cpu type='kvm' name='cortex-a7'/> - <cpu type='kvm' name='arm1026'/> - <cpu type='kvm' name='pxa270-b1'/> - <cpu type='kvm' name='cortex-m3'/> - <cpu type='kvm' name='cortex-m4'/> - <cpu type='kvm' name='pxa270-b0'/> - <cpu type='kvm' name='arm946'/> - <cpu type='kvm' name='cortex-r5'/> - <cpu type='kvm' name='pxa270-a1'/> - <cpu type='kvm' name='pxa270'/> - <cpu type='tcg' name='pxa262'/> - <cpu type='tcg' name='pxa270-a0'/> - <cpu type='tcg' name='arm1136'/> - <cpu type='tcg' name='cortex-a15'/> - <cpu type='tcg' name='pxa260'/> - <cpu type='tcg' name='arm1136-r2'/> - <cpu type='tcg' name='pxa261'/> - <cpu type='tcg' name='pxa255'/> - <cpu type='tcg' name='arm926'/> - <cpu type='tcg' name='arm11mpcore'/> - <cpu type='tcg' name='pxa250'/> - <cpu type='tcg' name='ti925t'/> - <cpu type='tcg' name='cortex-a57'/> - <cpu type='tcg' name='sa1110'/> - <cpu type='tcg' name='arm1176'/> - <cpu type='tcg' name='cortex-a53'/> - <cpu type='tcg' name='sa1100'/> - <cpu type='tcg' name='pxa270-c5'/> - <cpu type='tcg' name='cortex-a9'/> - <cpu type='tcg' name='cortex-a8'/> - <cpu type='tcg' name='pxa270-c0'/> - <cpu type='tcg' name='cortex-a7'/> - <cpu type='tcg' name='arm1026'/> - <cpu type='tcg' name='pxa270-b1'/> - <cpu type='tcg' name='cortex-m3'/> - <cpu type='tcg' name='cortex-m4'/> - <cpu type='tcg' name='pxa270-b0'/> - <cpu type='tcg' name='arm946'/> - <cpu type='tcg' name='cortex-r5'/> - <cpu type='tcg' name='pxa270-a1'/> - <cpu type='tcg' name='pxa270'/> + <cpu type='kvm' name='pxa262' typename='pxa262-arm-cpu'/> + <cpu type='kvm' name='pxa270-a0' typename='pxa270-a0-arm-cpu'/> + <cpu type='kvm' name='arm1136' typename='arm1136-arm-cpu'/> + <cpu type='kvm' name='cortex-a15' typename='cortex-a15-arm-cpu'/> + <cpu type='kvm' name='pxa260' typename='pxa260-arm-cpu'/> + <cpu type='kvm' name='arm1136-r2' typename='arm1136-r2-arm-cpu'/> + <cpu type='kvm' name='pxa261' typename='pxa261-arm-cpu'/> + <cpu type='kvm' name='pxa255' typename='pxa255-arm-cpu'/> + <cpu type='kvm' name='arm926' typename='arm926-arm-cpu'/> + <cpu type='kvm' name='arm11mpcore' typename='arm11mpcore-arm-cpu'/> + <cpu type='kvm' name='pxa250' typename='pxa250-arm-cpu'/> + <cpu type='kvm' name='ti925t' typename='ti925t-arm-cpu'/> + <cpu type='kvm' name='cortex-a57' typename='cortex-a57-arm-cpu'/> + <cpu type='kvm' name='sa1110' typename='sa1110-arm-cpu'/> + <cpu type='kvm' name='arm1176' typename='arm1176-arm-cpu'/> + <cpu type='kvm' name='cortex-a53' typename='cortex-a53-arm-cpu'/> + <cpu type='kvm' name='host' typename='host-arm-cpu'/> + <cpu type='kvm' name='sa1100' typename='sa1100-arm-cpu'/> + <cpu type='kvm' name='pxa270-c5' typename='pxa270-c5-arm-cpu'/> + <cpu type='kvm' name='cortex-a9' typename='cortex-a9-arm-cpu'/> + <cpu type='kvm' name='cortex-a8' typename='cortex-a8-arm-cpu'/> + <cpu type='kvm' name='pxa270-c0' typename='pxa270-c0-arm-cpu'/> + <cpu type='kvm' name='cortex-a7' typename='cortex-a7-arm-cpu'/> + <cpu type='kvm' name='arm1026' typename='arm1026-arm-cpu'/> + <cpu type='kvm' name='pxa270-b1' typename='pxa270-b1-arm-cpu'/> + <cpu type='kvm' name='cortex-m3' typename='cortex-m3-arm-cpu'/> + <cpu type='kvm' name='cortex-m4' typename='cortex-m4-arm-cpu'/> + <cpu type='kvm' name='pxa270-b0' typename='pxa270-b0-arm-cpu'/> + <cpu type='kvm' name='arm946' typename='arm946-arm-cpu'/> + <cpu type='kvm' name='cortex-r5' typename='cortex-r5-arm-cpu'/> + <cpu type='kvm' name='pxa270-a1' typename='pxa270-a1-arm-cpu'/> + <cpu type='kvm' name='pxa270' typename='pxa270-arm-cpu'/> + <cpu type='tcg' name='pxa262' typename='pxa262-arm-cpu'/> + <cpu type='tcg' name='pxa270-a0' typename='pxa270-a0-arm-cpu'/> + <cpu type='tcg' name='arm1136' typename='arm1136-arm-cpu'/> + <cpu type='tcg' name='cortex-a15' typename='cortex-a15-arm-cpu'/> + <cpu type='tcg' name='pxa260' typename='pxa260-arm-cpu'/> + <cpu type='tcg' name='arm1136-r2' typename='arm1136-r2-arm-cpu'/> + <cpu type='tcg' name='pxa261' typename='pxa261-arm-cpu'/> + <cpu type='tcg' name='pxa255' typename='pxa255-arm-cpu'/> + <cpu type='tcg' name='arm926' typename='arm926-arm-cpu'/> + <cpu type='tcg' name='arm11mpcore' typename='arm11mpcore-arm-cpu'/> + <cpu type='tcg' name='pxa250' typename='pxa250-arm-cpu'/> + <cpu type='tcg' name='ti925t' typename='ti925t-arm-cpu'/> + <cpu type='tcg' name='cortex-a57' typename='cortex-a57-arm-cpu'/> + <cpu type='tcg' name='sa1110' typename='sa1110-arm-cpu'/> + <cpu type='tcg' name='arm1176' typename='arm1176-arm-cpu'/> + <cpu type='tcg' name='cortex-a53' typename='cortex-a53-arm-cpu'/> + <cpu type='tcg' name='sa1100' typename='sa1100-arm-cpu'/> + <cpu type='tcg' name='pxa270-c5' typename='pxa270-c5-arm-cpu'/> + <cpu type='tcg' name='cortex-a9' typename='cortex-a9-arm-cpu'/> + <cpu type='tcg' name='cortex-a8' typename='cortex-a8-arm-cpu'/> + <cpu type='tcg' name='pxa270-c0' typename='pxa270-c0-arm-cpu'/> + <cpu type='tcg' name='cortex-a7' typename='cortex-a7-arm-cpu'/> + <cpu type='tcg' name='arm1026' typename='arm1026-arm-cpu'/> + <cpu type='tcg' name='pxa270-b1' typename='pxa270-b1-arm-cpu'/> + <cpu type='tcg' name='cortex-m3' typename='cortex-m3-arm-cpu'/> + <cpu type='tcg' name='cortex-m4' typename='cortex-m4-arm-cpu'/> + <cpu type='tcg' name='pxa270-b0' typename='pxa270-b0-arm-cpu'/> + <cpu type='tcg' name='arm946' typename='arm946-arm-cpu'/> + <cpu type='tcg' name='cortex-r5' typename='cortex-r5-arm-cpu'/> + <cpu type='tcg' name='pxa270-a1' typename='pxa270-a1-arm-cpu'/> + <cpu type='tcg' name='pxa270' typename='pxa270-arm-cpu'/> <machine name='integratorcp' maxCpus='1'/> <machine name='nuri' maxCpus='2'/> <machine name='mps2-an511' maxCpus='1'/> ...

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - no change Version 3: - no change src/qemu/qemu_capabilities.c | 12 ------------ src/qemu/qemu_capabilities.h | 1 - 2 files changed, 13 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 665fee28eb..435e65daed 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2114,18 +2114,6 @@ const char *virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps, return name; } -const char * -virQEMUCapsGetDefaultMachine(virQEMUCapsPtr qemuCaps) -{ - size_t i; - - for (i = 0; i < qemuCaps->nmachineTypes; i++) { - if (qemuCaps->machineTypes[i].qemuDefault) - return qemuCaps->machineTypes[i].name; - } - - return NULL; -} int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, const char *name) diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 923706c3bf..f43e56a9ca 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -602,7 +602,6 @@ bool virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, virCPUMode mode); const char *virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps, const char *name); -const char *virQEMUCapsGetDefaultMachine(virQEMUCapsPtr qemuCaps); int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, const char *name); bool virQEMUCapsGetMachineHotplugCpus(virQEMUCapsPtr qemuCaps, -- 2.23.0

The new functions are designed to load and format capabilities which depend on the accelerator (host CPU expansion and CPU models). Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 40 +- .../caps_2.10.0.x86_64.xml | 216 ++++----- .../caps_2.11.0.x86_64.xml | 154 +++---- .../caps_2.12.0.x86_64.xml | 430 +++++++++--------- .../caps_2.9.0.x86_64.xml | 114 ++--- .../caps_3.0.0.x86_64.xml | 238 +++++----- .../caps_3.1.0.x86_64.xml | 366 +++++++-------- .../qemucapabilitiesdata/caps_4.0.0.s390x.xml | 68 +-- .../caps_4.0.0.x86_64.xml | 362 +++++++-------- .../caps_4.1.0.x86_64.xml | 398 ++++++++-------- .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 80 ++-- .../caps_4.2.0.x86_64.xml | 404 ++++++++-------- 12 files changed, 1444 insertions(+), 1426 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 435e65daed..54f2ecb7f4 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3555,6 +3555,21 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, } +static int +virQEMUCapsLoadAccel(virQEMUCapsPtr qemuCaps, + xmlXPathContextPtr ctxt, + virDomainVirtType type) +{ + if (virQEMUCapsLoadHostCPUModelInfo(qemuCaps, ctxt, type) < 0) + return -1; + + if (virQEMUCapsLoadCPUModels(qemuCaps, ctxt, type) < 0) + return -1; + + return 0; +} + + struct _virQEMUCapsCachePriv { char *libDir; uid_t runUid; @@ -3766,12 +3781,8 @@ virQEMUCapsLoadCache(virArch hostArch, } VIR_FREE(str); - if (virQEMUCapsLoadHostCPUModelInfo(qemuCaps, ctxt, VIR_DOMAIN_VIRT_KVM) < 0 || - virQEMUCapsLoadHostCPUModelInfo(qemuCaps, ctxt, VIR_DOMAIN_VIRT_QEMU) < 0) - goto cleanup; - - if (virQEMUCapsLoadCPUModels(qemuCaps, ctxt, VIR_DOMAIN_VIRT_KVM) < 0 || - virQEMUCapsLoadCPUModels(qemuCaps, ctxt, VIR_DOMAIN_VIRT_QEMU) < 0) + if (virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_KVM) < 0 || + virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_QEMU) < 0) goto cleanup; if ((n = virXPathNodeSet("./machine", ctxt, &nodes)) < 0) { @@ -4003,6 +4014,16 @@ virQEMUCapsFormatCPUModels(virQEMUCapsPtr qemuCaps, } +static void +virQEMUCapsFormatAccel(virQEMUCapsPtr qemuCaps, + virBufferPtr buf, + virDomainVirtType type) +{ + virQEMUCapsFormatHostCPUModelInfo(qemuCaps, buf, type); + virQEMUCapsFormatCPUModels(qemuCaps, buf, type); +} + + static void virQEMUCapsFormatSEVInfo(virQEMUCapsPtr qemuCaps, virBufferPtr buf) { @@ -4065,11 +4086,8 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps) virBufferAsprintf(&buf, "<arch>%s</arch>\n", virArchToString(qemuCaps->arch)); - virQEMUCapsFormatHostCPUModelInfo(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM); - virQEMUCapsFormatHostCPUModelInfo(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU); - - virQEMUCapsFormatCPUModels(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM); - virQEMUCapsFormatCPUModels(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU); + virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM); + virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU); for (i = 0; i < qemuCaps->nmachineTypes; i++) { virBufferEscapeString(&buf, "<machine name='%s'", diff --git a/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml index 10a94a7f1c..951e1c85a4 100644 --- a/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml @@ -420,6 +420,114 @@ <property name='avx512pf' type='boolean' value='false'/> <property name='xstore-en' type='boolean' value='false'/> </hostCPU> + <cpu type='kvm' name='max' typename='max-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='host' typename='host-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='base' typename='base-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='qemu64' typename='qemu64-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='qemu32' typename='qemu32-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='phenom' typename='phenom-x86_64-cpu' usable='no'> + <blocker name='mmxext'/> + <blocker name='fxsr-opt'/> + <blocker name='3dnowext'/> + <blocker name='3dnow'/> + <blocker name='sse4a'/> + <blocker name='npt'/> + </cpu> + <cpu type='kvm' name='pentium3' typename='pentium3-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='pentium2' typename='pentium2-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='pentium' typename='pentium-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='n270' typename='n270-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='kvm64' typename='kvm64-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='kvm32' typename='kvm32-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='coreduo' typename='coreduo-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='core2duo' typename='core2duo-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='athlon' typename='athlon-x86_64-cpu' usable='no'> + <blocker name='mmxext'/> + <blocker name='3dnowext'/> + <blocker name='3dnow'/> + </cpu> + <cpu type='kvm' name='Westmere' typename='Westmere-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='Skylake-Server' typename='Skylake-Server-x86_64-cpu' usable='no'> + <blocker name='hle'/> + <blocker name='rtm'/> + <blocker name='mpx'/> + <blocker name='avx512f'/> + <blocker name='avx512dq'/> + <blocker name='rdseed'/> + <blocker name='adx'/> + <blocker name='smap'/> + <blocker name='clwb'/> + <blocker name='avx512cd'/> + <blocker name='avx512bw'/> + <blocker name='avx512vl'/> + <blocker name='3dnowprefetch'/> + <blocker name='xsavec'/> + <blocker name='xgetbv1'/> + <blocker name='mpx'/> + <blocker name='mpx'/> + <blocker name='avx512f'/> + <blocker name='avx512f'/> + <blocker name='avx512f'/> + </cpu> + <cpu type='kvm' name='Skylake-Client' typename='Skylake-Client-x86_64-cpu' usable='no'> + <blocker name='hle'/> + <blocker name='rtm'/> + <blocker name='mpx'/> + <blocker name='rdseed'/> + <blocker name='adx'/> + <blocker name='smap'/> + <blocker name='3dnowprefetch'/> + <blocker name='xsavec'/> + <blocker name='xgetbv1'/> + <blocker name='mpx'/> + <blocker name='mpx'/> + </cpu> + <cpu type='kvm' name='SandyBridge' typename='SandyBridge-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='Penryn' typename='Penryn-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='Opteron_G5' typename='Opteron_G5-x86_64-cpu' usable='no'> + <blocker name='sse4a'/> + <blocker name='misalignsse'/> + <blocker name='3dnowprefetch'/> + <blocker name='xop'/> + <blocker name='fma4'/> + <blocker name='tbm'/> + </cpu> + <cpu type='kvm' name='Opteron_G4' typename='Opteron_G4-x86_64-cpu' usable='no'> + <blocker name='sse4a'/> + <blocker name='misalignsse'/> + <blocker name='3dnowprefetch'/> + <blocker name='xop'/> + <blocker name='fma4'/> + </cpu> + <cpu type='kvm' name='Opteron_G3' typename='Opteron_G3-x86_64-cpu' usable='no'> + <blocker name='sse4a'/> + <blocker name='misalignsse'/> + </cpu> + <cpu type='kvm' name='Opteron_G2' typename='Opteron_G2-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='Opteron_G1' typename='Opteron_G1-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='Nehalem' typename='Nehalem-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='IvyBridge' typename='IvyBridge-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='Haswell' typename='Haswell-x86_64-cpu' usable='no'> + <blocker name='hle'/> + <blocker name='rtm'/> + </cpu> + <cpu type='kvm' name='Haswell-noTSX' typename='Haswell-noTSX-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='Conroe' typename='Conroe-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='Broadwell' typename='Broadwell-x86_64-cpu' usable='no'> + <blocker name='hle'/> + <blocker name='rtm'/> + <blocker name='rdseed'/> + <blocker name='adx'/> + <blocker name='smap'/> + <blocker name='3dnowprefetch'/> + </cpu> + <cpu type='kvm' name='Broadwell-noTSX' typename='Broadwell-noTSX-x86_64-cpu' usable='no'> + <blocker name='rdseed'/> + <blocker name='adx'/> + <blocker name='smap'/> + <blocker name='3dnowprefetch'/> + </cpu> + <cpu type='kvm' name='486' typename='486-x86_64-cpu' usable='yes'/> <hostCPU type='tcg' model='base' migratability='yes'> <property name='phys-bits' type='number' value='0'/> <property name='core-id' type='number' value='-1'/> @@ -654,114 +762,6 @@ <property name='avx512pf' type='boolean' value='false'/> <property name='xstore-en' type='boolean' value='false'/> </hostCPU> - <cpu type='kvm' name='max' typename='max-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='host' typename='host-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='base' typename='base-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='qemu64' typename='qemu64-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='qemu32' typename='qemu32-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='phenom' typename='phenom-x86_64-cpu' usable='no'> - <blocker name='mmxext'/> - <blocker name='fxsr-opt'/> - <blocker name='3dnowext'/> - <blocker name='3dnow'/> - <blocker name='sse4a'/> - <blocker name='npt'/> - </cpu> - <cpu type='kvm' name='pentium3' typename='pentium3-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='pentium2' typename='pentium2-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='pentium' typename='pentium-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='n270' typename='n270-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='kvm64' typename='kvm64-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='kvm32' typename='kvm32-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='coreduo' typename='coreduo-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='core2duo' typename='core2duo-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='athlon' typename='athlon-x86_64-cpu' usable='no'> - <blocker name='mmxext'/> - <blocker name='3dnowext'/> - <blocker name='3dnow'/> - </cpu> - <cpu type='kvm' name='Westmere' typename='Westmere-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='Skylake-Server' typename='Skylake-Server-x86_64-cpu' usable='no'> - <blocker name='hle'/> - <blocker name='rtm'/> - <blocker name='mpx'/> - <blocker name='avx512f'/> - <blocker name='avx512dq'/> - <blocker name='rdseed'/> - <blocker name='adx'/> - <blocker name='smap'/> - <blocker name='clwb'/> - <blocker name='avx512cd'/> - <blocker name='avx512bw'/> - <blocker name='avx512vl'/> - <blocker name='3dnowprefetch'/> - <blocker name='xsavec'/> - <blocker name='xgetbv1'/> - <blocker name='mpx'/> - <blocker name='mpx'/> - <blocker name='avx512f'/> - <blocker name='avx512f'/> - <blocker name='avx512f'/> - </cpu> - <cpu type='kvm' name='Skylake-Client' typename='Skylake-Client-x86_64-cpu' usable='no'> - <blocker name='hle'/> - <blocker name='rtm'/> - <blocker name='mpx'/> - <blocker name='rdseed'/> - <blocker name='adx'/> - <blocker name='smap'/> - <blocker name='3dnowprefetch'/> - <blocker name='xsavec'/> - <blocker name='xgetbv1'/> - <blocker name='mpx'/> - <blocker name='mpx'/> - </cpu> - <cpu type='kvm' name='SandyBridge' typename='SandyBridge-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='Penryn' typename='Penryn-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='Opteron_G5' typename='Opteron_G5-x86_64-cpu' usable='no'> - <blocker name='sse4a'/> - <blocker name='misalignsse'/> - <blocker name='3dnowprefetch'/> - <blocker name='xop'/> - <blocker name='fma4'/> - <blocker name='tbm'/> - </cpu> - <cpu type='kvm' name='Opteron_G4' typename='Opteron_G4-x86_64-cpu' usable='no'> - <blocker name='sse4a'/> - <blocker name='misalignsse'/> - <blocker name='3dnowprefetch'/> - <blocker name='xop'/> - <blocker name='fma4'/> - </cpu> - <cpu type='kvm' name='Opteron_G3' typename='Opteron_G3-x86_64-cpu' usable='no'> - <blocker name='sse4a'/> - <blocker name='misalignsse'/> - </cpu> - <cpu type='kvm' name='Opteron_G2' typename='Opteron_G2-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='Opteron_G1' typename='Opteron_G1-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='Nehalem' typename='Nehalem-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='IvyBridge' typename='IvyBridge-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='Haswell' typename='Haswell-x86_64-cpu' usable='no'> - <blocker name='hle'/> - <blocker name='rtm'/> - </cpu> - <cpu type='kvm' name='Haswell-noTSX' typename='Haswell-noTSX-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='Conroe' typename='Conroe-x86_64-cpu' usable='yes'/> - <cpu type='kvm' name='Broadwell' typename='Broadwell-x86_64-cpu' usable='no'> - <blocker name='hle'/> - <blocker name='rtm'/> - <blocker name='rdseed'/> - <blocker name='adx'/> - <blocker name='smap'/> - <blocker name='3dnowprefetch'/> - </cpu> - <cpu type='kvm' name='Broadwell-noTSX' typename='Broadwell-noTSX-x86_64-cpu' usable='no'> - <blocker name='rdseed'/> - <blocker name='adx'/> - <blocker name='smap'/> - <blocker name='3dnowprefetch'/> - </cpu> - <cpu type='kvm' name='486' typename='486-x86_64-cpu' usable='yes'/> <cpu type='tcg' name='max' typename='max-x86_64-cpu' usable='yes'/> <cpu type='tcg' name='host' typename='host-x86_64-cpu' usable='no'> <blocker name='kvm'/> ...

On Tue, Nov 05, 2019 at 02:27:21PM +0100, Jiri Denemark wrote:
The new functions are designed to load and format capabilities which depend on the accelerator (host CPU expansion and CPU models).
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 40 +- .../caps_2.10.0.x86_64.xml | 216 ++++----- .../caps_2.11.0.x86_64.xml | 154 +++---- .../caps_2.12.0.x86_64.xml | 430 +++++++++--------- .../caps_2.9.0.x86_64.xml | 114 ++--- .../caps_3.0.0.x86_64.xml | 238 +++++----- .../caps_3.1.0.x86_64.xml | 366 +++++++-------- .../qemucapabilitiesdata/caps_4.0.0.s390x.xml | 68 +-- .../caps_4.0.0.x86_64.xml | 362 +++++++-------- .../caps_4.1.0.x86_64.xml | 398 ++++++++-------- .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 80 ++-- .../caps_4.2.0.x86_64.xml | 404 ++++++++-------- 12 files changed, 1444 insertions(+), 1426 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

This is container for capabilities data that depend on the accelerator. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 66 ++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 54f2ecb7f4..c6a2f65239 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -576,6 +576,13 @@ struct _virQEMUCapsHostCPUData { virCPUDefPtr full; }; +typedef struct _virQEMUCapsAccel virQEMUCapsAccel; +typedef virQEMUCapsAccel *virQEMUCapsAccelPtr; +struct _virQEMUCapsAccel { + virQEMUCapsHostCPUData hostCPU; + qemuMonitorCPUDefsPtr cpuModels; +}; + /* * Update the XML parser/formatter when adding more * information to this struct so that it gets cached @@ -607,8 +614,6 @@ struct _virQEMUCaps { virArch arch; virHashTablePtr domCapsCache; - qemuMonitorCPUDefsPtr kvmCPUModels; - qemuMonitorCPUDefsPtr tcgCPUModels; size_t nmachineTypes; struct virQEMUCapsMachineType *machineTypes; @@ -618,8 +623,9 @@ struct _virQEMUCaps { virSEVCapability *sevCapabilities; - virQEMUCapsHostCPUData kvmCPU; - virQEMUCapsHostCPUData tcgCPU; + /* Capabilities which may differ depending on the accelerator. */ + virQEMUCapsAccel kvm; + virQEMUCapsAccel tcg; }; struct virQEMUCapsSearchData { @@ -1620,11 +1626,11 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) ret->arch = qemuCaps->arch; - ret->kvmCPUModels = qemuMonitorCPUDefsCopy(qemuCaps->kvmCPUModels); - ret->tcgCPUModels = qemuMonitorCPUDefsCopy(qemuCaps->tcgCPUModels); + ret->kvm.cpuModels = qemuMonitorCPUDefsCopy(qemuCaps->kvm.cpuModels); + ret->tcg.cpuModels = qemuMonitorCPUDefsCopy(qemuCaps->tcg.cpuModels); - if (virQEMUCapsHostCPUDataCopy(&ret->kvmCPU, &qemuCaps->kvmCPU) < 0 || - virQEMUCapsHostCPUDataCopy(&ret->tcgCPU, &qemuCaps->tcgCPU) < 0) + if (virQEMUCapsHostCPUDataCopy(&ret->kvm.hostCPU, &qemuCaps->kvm.hostCPU) < 0 || + virQEMUCapsHostCPUDataCopy(&ret->tcg.hostCPU, &qemuCaps->tcg.hostCPU) < 0) goto error; if (VIR_ALLOC_N(ret->machineTypes, qemuCaps->nmachineTypes) < 0) @@ -1670,8 +1676,8 @@ void virQEMUCapsDispose(void *obj) VIR_FREE(qemuCaps->machineTypes); virHashFree(qemuCaps->domCapsCache); - virObjectUnref(qemuCaps->kvmCPUModels); - virObjectUnref(qemuCaps->tcgCPUModels); + virObjectUnref(qemuCaps->kvm.cpuModels); + virObjectUnref(qemuCaps->tcg.cpuModels); virBitmapFree(qemuCaps->flags); @@ -1683,8 +1689,8 @@ void virQEMUCapsDispose(void *obj) virSEVCapabilitiesFree(qemuCaps->sevCapabilities); - virQEMUCapsHostCPUDataClear(&qemuCaps->kvmCPU); - virQEMUCapsHostCPUDataClear(&qemuCaps->tcgCPU); + virQEMUCapsHostCPUDataClear(&qemuCaps->kvm.hostCPU); + virQEMUCapsHostCPUDataClear(&qemuCaps->tcg.hostCPU); } void @@ -1849,10 +1855,10 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, size_t start; qemuMonitorCPUDefsPtr defs = NULL; - if (type == VIR_DOMAIN_VIRT_KVM && qemuCaps->kvmCPUModels) - defs = qemuCaps->kvmCPUModels; - else if (type == VIR_DOMAIN_VIRT_QEMU && qemuCaps->tcgCPUModels) - defs = qemuCaps->tcgCPUModels; + if (type == VIR_DOMAIN_VIRT_KVM && qemuCaps->kvm.cpuModels) + defs = qemuCaps->kvm.cpuModels; + else if (type == VIR_DOMAIN_VIRT_QEMU && qemuCaps->tcg.cpuModels) + defs = qemuCaps->tcg.cpuModels; if (defs) { start = defs->ncpus; @@ -1866,9 +1872,9 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, return -1; if (type == VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvmCPUModels = defs; + qemuCaps->kvm.cpuModels = defs; else - qemuCaps->tcgCPUModels = defs; + qemuCaps->tcg.cpuModels = defs; } for (i = 0; i < count; i++) { @@ -1921,9 +1927,9 @@ virQEMUCapsGetCPUModels(virQEMUCapsPtr qemuCaps, qemuMonitorCPUDefsPtr defs; if (type == VIR_DOMAIN_VIRT_KVM) - defs = qemuCaps->kvmCPUModels; + defs = qemuCaps->kvm.cpuModels; else - defs = qemuCaps->tcgCPUModels; + defs = qemuCaps->tcg.cpuModels; if (!defs) return NULL; @@ -1937,9 +1943,9 @@ virQEMUCapsGetHostCPUData(virQEMUCapsPtr qemuCaps, virDomainVirtType type) { if (type == VIR_DOMAIN_VIRT_KVM) - return &qemuCaps->kvmCPU; + return &qemuCaps->kvm.hostCPU; else - return &qemuCaps->tcgCPU; + return &qemuCaps->tcg.hostCPU; } @@ -2001,9 +2007,9 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, case VIR_CPU_MODE_CUSTOM: if (type == VIR_DOMAIN_VIRT_KVM) - cpus = qemuCaps->kvmCPUModels; + cpus = qemuCaps->kvm.cpuModels; else - cpus = qemuCaps->tcgCPUModels; + cpus = qemuCaps->tcg.cpuModels; return cpus && cpus->ncpus > 0; case VIR_CPU_MODE_LAST: @@ -2532,9 +2538,9 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps, return -1; if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) - qemuCaps->tcgCPUModels = defs; + qemuCaps->tcg.cpuModels = defs; else - qemuCaps->kvmCPUModels = defs; + qemuCaps->kvm.cpuModels = defs; return 0; } @@ -3547,9 +3553,9 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, } if (type == VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvmCPUModels = g_steal_pointer(&defs); + qemuCaps->kvm.cpuModels = g_steal_pointer(&defs); else - qemuCaps->tcgCPUModels = g_steal_pointer(&defs); + qemuCaps->tcg.cpuModels = g_steal_pointer(&defs); return 0; } @@ -3976,10 +3982,10 @@ virQEMUCapsFormatCPUModels(virQEMUCapsPtr qemuCaps, if (type == VIR_DOMAIN_VIRT_KVM) { typeStr = "kvm"; - defs = qemuCaps->kvmCPUModels; + defs = qemuCaps->kvm.cpuModels; } else { typeStr = "tcg"; - defs = qemuCaps->tcgCPUModels; + defs = qemuCaps->tcg.cpuModels; } if (!defs) -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:22PM +0100, Jiri Denemark wrote:
This is container for capabilities data that depend on the accelerator.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 66 ++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 30 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index c6a2f65239..92041190eb 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1600,6 +1600,19 @@ virQEMUCapsSEVInfoCopy(virSEVCapabilityPtr *dst, } +static int +virQEMUCapsAccelCopy(virQEMUCapsAccelPtr dst, + virQEMUCapsAccelPtr src) +{ + if (virQEMUCapsHostCPUDataCopy(&dst->hostCPU, &src->hostCPU) < 0) + return -1; + + dst->cpuModels = qemuMonitorCPUDefsCopy(src->cpuModels); + + return 0; +} + + virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) { virQEMUCapsPtr ret = virQEMUCapsNew(); @@ -1626,11 +1639,8 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) ret->arch = qemuCaps->arch; - ret->kvm.cpuModels = qemuMonitorCPUDefsCopy(qemuCaps->kvm.cpuModels); - ret->tcg.cpuModels = qemuMonitorCPUDefsCopy(qemuCaps->tcg.cpuModels); - - if (virQEMUCapsHostCPUDataCopy(&ret->kvm.hostCPU, &qemuCaps->kvm.hostCPU) < 0 || - virQEMUCapsHostCPUDataCopy(&ret->tcg.hostCPU, &qemuCaps->tcg.hostCPU) < 0) + if (virQEMUCapsAccelCopy(&ret->kvm, &qemuCaps->kvm) < 0 || + virQEMUCapsAccelCopy(&ret->tcg, &qemuCaps->tcg) < 0) goto error; if (VIR_ALLOC_N(ret->machineTypes, qemuCaps->nmachineTypes) < 0) -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:23PM +0100, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 92041190eb..a0b5047276 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1674,6 +1674,14 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) } +static void +virQEMUCapsAccelClear(virQEMUCapsAccelPtr caps) +{ + virQEMUCapsHostCPUDataClear(&caps->hostCPU); + virObjectUnref(caps->cpuModels); +} + + void virQEMUCapsDispose(void *obj) { virQEMUCapsPtr qemuCaps = obj; @@ -1686,9 +1694,6 @@ void virQEMUCapsDispose(void *obj) VIR_FREE(qemuCaps->machineTypes); virHashFree(qemuCaps->domCapsCache); - virObjectUnref(qemuCaps->kvm.cpuModels); - virObjectUnref(qemuCaps->tcg.cpuModels); - virBitmapFree(qemuCaps->flags); VIR_FREE(qemuCaps->package); @@ -1699,8 +1704,8 @@ void virQEMUCapsDispose(void *obj) virSEVCapabilitiesFree(qemuCaps->sevCapabilities); - virQEMUCapsHostCPUDataClear(&qemuCaps->kvm.hostCPU); - virQEMUCapsHostCPUDataClear(&qemuCaps->tcg.hostCPU); + virQEMUCapsAccelClear(&qemuCaps->kvm); + virQEMUCapsAccelClear(&qemuCaps->tcg); } void -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:24PM +0100, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

The function can be used to get the pointer to all data which depend on the accelerator. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index a0b5047276..e4188f7833 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -719,6 +719,17 @@ virQEMUCapsFindTarget(virArch hostarch, } +static virQEMUCapsAccelPtr +virQEMUCapsGetAccel(virQEMUCapsPtr qemuCaps, + virDomainVirtType type) +{ + if (type == VIR_DOMAIN_VIRT_KVM) + return &qemuCaps->kvm; + + return &qemuCaps->tcg; +} + + static void virQEMUCapsSetDefaultMachine(virQEMUCapsPtr qemuCaps, size_t defIdx) @@ -1868,12 +1879,8 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, { size_t i; size_t start; - qemuMonitorCPUDefsPtr defs = NULL; - - if (type == VIR_DOMAIN_VIRT_KVM && qemuCaps->kvm.cpuModels) - defs = qemuCaps->kvm.cpuModels; - else if (type == VIR_DOMAIN_VIRT_QEMU && qemuCaps->tcg.cpuModels) - defs = qemuCaps->tcg.cpuModels; + virQEMUCapsAccelPtr accel = virQEMUCapsGetAccel(qemuCaps, type); + qemuMonitorCPUDefsPtr defs = accel->cpuModels; if (defs) { start = defs->ncpus; @@ -1886,10 +1893,7 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, if (!(defs = qemuMonitorCPUDefsNew(count))) return -1; - if (type == VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvm.cpuModels = defs; - else - qemuCaps->tcg.cpuModels = defs; + accel->cpuModels = defs; } for (i = 0; i < count; i++) { @@ -1941,12 +1945,7 @@ virQEMUCapsGetCPUModels(virQEMUCapsPtr qemuCaps, { qemuMonitorCPUDefsPtr defs; - if (type == VIR_DOMAIN_VIRT_KVM) - defs = qemuCaps->kvm.cpuModels; - else - defs = qemuCaps->tcg.cpuModels; - - if (!defs) + if (!(defs = virQEMUCapsGetAccel(qemuCaps, type)->cpuModels)) return NULL; return virQEMUCapsCPUDefsToModels(defs, modelWhitelist, modelBlacklist); @@ -2021,10 +2020,7 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, VIR_QEMU_CAPS_HOST_CPU_REPORTED); case VIR_CPU_MODE_CUSTOM: - if (type == VIR_DOMAIN_VIRT_KVM) - cpus = qemuCaps->kvm.cpuModels; - else - cpus = qemuCaps->tcg.cpuModels; + cpus = virQEMUCapsGetAccel(qemuCaps, type)->cpuModels; return cpus && cpus->ncpus > 0; case VIR_CPU_MODE_LAST: -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:25PM +0100, Jiri Denemark wrote:
The function can be used to get the pointer to all data which depend on the accelerator.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

It was very similar to virQEMUCapsGetAccel. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index e4188f7833..62667cb882 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1952,24 +1952,14 @@ virQEMUCapsGetCPUModels(virQEMUCapsPtr qemuCaps, } -static virQEMUCapsHostCPUDataPtr -virQEMUCapsGetHostCPUData(virQEMUCapsPtr qemuCaps, - virDomainVirtType type) -{ - if (type == VIR_DOMAIN_VIRT_KVM) - return &qemuCaps->kvm.hostCPU; - else - return &qemuCaps->tcg.hostCPU; -} - - virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, virDomainVirtType type, virQEMUCapsHostCPUType cpuType) { - virQEMUCapsHostCPUDataPtr cpuData = virQEMUCapsGetHostCPUData(qemuCaps, type); + virQEMUCapsHostCPUDataPtr cpuData; + cpuData = &virQEMUCapsGetAccel(qemuCaps, type)->hostCPU; switch (cpuType) { case VIR_QEMU_CAPS_HOST_CPU_REPORTED: return cpuData->reported; @@ -1994,8 +1984,9 @@ virQEMUCapsSetHostModel(virQEMUCapsPtr qemuCaps, virCPUDefPtr migratable, virCPUDefPtr full) { - virQEMUCapsHostCPUDataPtr cpuData = virQEMUCapsGetHostCPUData(qemuCaps, type); + virQEMUCapsHostCPUDataPtr cpuData; + cpuData = &virQEMUCapsGetAccel(qemuCaps, type)->hostCPU; cpuData->reported = reported; cpuData->migratable = migratable; cpuData->full = full; @@ -3333,9 +3324,7 @@ qemuMonitorCPUModelInfoPtr virQEMUCapsGetCPUModelInfo(virQEMUCapsPtr qemuCaps, virDomainVirtType type) { - virQEMUCapsHostCPUDataPtr cpuData = virQEMUCapsGetHostCPUData(qemuCaps, type); - - return cpuData->info; + return virQEMUCapsGetAccel(qemuCaps, type)->hostCPU.info; } @@ -3344,9 +3333,7 @@ virQEMUCapsSetCPUModelInfo(virQEMUCapsPtr qemuCaps, virDomainVirtType type, qemuMonitorCPUModelInfoPtr modelInfo) { - virQEMUCapsHostCPUDataPtr cpuData = virQEMUCapsGetHostCPUData(qemuCaps, type); - - cpuData->info = modelInfo; + virQEMUCapsGetAccel(qemuCaps, type)->hostCPU.info = modelInfo; } -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:26PM +0100, Jiri Denemark wrote:
It was very similar to virQEMUCapsGetAccel.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

And make it use virQEMUCapsGetAccel once rather than repeating the same code in all functions called from virQEMUCapsLoadAccel. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 40 ++++++++++++++---------------------- 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 62667cb882..d19bcebdeb 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3338,26 +3338,22 @@ virQEMUCapsSetCPUModelInfo(virQEMUCapsPtr qemuCaps, static int -virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, +virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsAccelPtr caps, xmlXPathContextPtr ctxt, - virDomainVirtType virtType) + const char *typeStr) { char *str = NULL; xmlNodePtr hostCPUNode; xmlNodePtr *nodes = NULL; VIR_XPATH_NODE_AUTORESTORE(ctxt); qemuMonitorCPUModelInfoPtr hostCPU = NULL; + g_autofree char *xpath = g_strdup_printf("./hostCPU[@type='%s']", typeStr); int ret = -1; size_t i; int n; int val; - if (virtType == VIR_DOMAIN_VIRT_KVM) - hostCPUNode = virXPathNode("./hostCPU[@type='kvm']", ctxt); - else - hostCPUNode = virXPathNode("./hostCPU[@type='tcg']", ctxt); - - if (!hostCPUNode) { + if (!(hostCPUNode = virXPathNode(xpath, ctxt))) { ret = 0; goto cleanup; } @@ -3458,8 +3454,7 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, } } - virQEMUCapsSetCPUModelInfo(qemuCaps, virtType, hostCPU); - hostCPU = NULL; + caps->hostCPU.info = g_steal_pointer(&hostCPU); ret = 0; cleanup: @@ -3471,22 +3466,18 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, static int -virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, +virQEMUCapsLoadCPUModels(virQEMUCapsAccelPtr caps, xmlXPathContextPtr ctxt, - virDomainVirtType type) + const char *typeStr) { g_autoptr(qemuMonitorCPUDefs) defs = NULL; g_autofree xmlNodePtr * nodes = NULL; + g_autofree char *xpath = g_strdup_printf("./cpu[@type='%s']", typeStr); size_t i; int n; xmlNodePtr node; - if (type == VIR_DOMAIN_VIRT_KVM) - n = virXPathNodeSet("./cpu[@type='kvm']", ctxt, &nodes); - else - n = virXPathNodeSet("./cpu[@type='tcg']", ctxt, &nodes); - - if (n < 0) { + if ((n = virXPathNodeSet(xpath, ctxt, &nodes)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to parse qemu capabilities cpus")); return -1; @@ -3550,11 +3541,7 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, } } - if (type == VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvm.cpuModels = g_steal_pointer(&defs); - else - qemuCaps->tcg.cpuModels = g_steal_pointer(&defs); - + caps->cpuModels = g_steal_pointer(&defs); return 0; } @@ -3564,10 +3551,13 @@ virQEMUCapsLoadAccel(virQEMUCapsPtr qemuCaps, xmlXPathContextPtr ctxt, virDomainVirtType type) { - if (virQEMUCapsLoadHostCPUModelInfo(qemuCaps, ctxt, type) < 0) + virQEMUCapsAccelPtr caps = virQEMUCapsGetAccel(qemuCaps, type); + const char *typeStr = type == VIR_DOMAIN_VIRT_KVM ? "kvm" : "tcg"; + + if (virQEMUCapsLoadHostCPUModelInfo(caps, ctxt, typeStr) < 0) return -1; - if (virQEMUCapsLoadCPUModels(qemuCaps, ctxt, type) < 0) + if (virQEMUCapsLoadCPUModels(caps, ctxt, typeStr) < 0) return -1; return 0; -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:27PM +0100, Jiri Denemark wrote:
And make it use virQEMUCapsGetAccel once rather than repeating the same code in all functions called from virQEMUCapsLoadAccel.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 40 ++++++++++++++---------------------- 1 file changed, 15 insertions(+), 25 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

And make it use virQEMUCapsGetAccel once rather than repeating the same code in all functions called from virQEMUCapsFormatAccel. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index d19bcebdeb..2bd0297364 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3905,12 +3905,11 @@ virQEMUCapsLoadCache(virArch hostArch, static void -virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps, +virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsAccelPtr caps, virBufferPtr buf, - virDomainVirtType type) + const char *typeStr) { - qemuMonitorCPUModelInfoPtr model = virQEMUCapsGetCPUModelInfo(qemuCaps, type); - const char *typeStr = type == VIR_DOMAIN_VIRT_KVM ? "kvm" : "tcg"; + qemuMonitorCPUModelInfoPtr model = caps->hostCPU.info; size_t i; if (!model) @@ -3960,22 +3959,13 @@ virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps, static void -virQEMUCapsFormatCPUModels(virQEMUCapsPtr qemuCaps, +virQEMUCapsFormatCPUModels(virQEMUCapsAccelPtr caps, virBufferPtr buf, - virDomainVirtType type) + const char *typeStr) { - qemuMonitorCPUDefsPtr defs; - const char *typeStr; + qemuMonitorCPUDefsPtr defs = caps->cpuModels; size_t i; - if (type == VIR_DOMAIN_VIRT_KVM) { - typeStr = "kvm"; - defs = qemuCaps->kvm.cpuModels; - } else { - typeStr = "tcg"; - defs = qemuCaps->tcg.cpuModels; - } - if (!defs) return; @@ -4013,8 +4003,11 @@ virQEMUCapsFormatAccel(virQEMUCapsPtr qemuCaps, virBufferPtr buf, virDomainVirtType type) { - virQEMUCapsFormatHostCPUModelInfo(qemuCaps, buf, type); - virQEMUCapsFormatCPUModels(qemuCaps, buf, type); + virQEMUCapsAccelPtr caps = virQEMUCapsGetAccel(qemuCaps, type); + const char *typeStr = type == VIR_DOMAIN_VIRT_KVM ? "kvm" : "tcg"; + + virQEMUCapsFormatHostCPUModelInfo(caps, buf, typeStr); + virQEMUCapsFormatCPUModels(caps, buf, typeStr); } -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:28PM +0100, Jiri Denemark wrote:
And make it use virQEMUCapsGetAccel once rather than repeating the same code in all functions called from virQEMUCapsFormatAccel.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

It is a tiny wrapper around virQEMUCapsProbeQMPCPUDefinitions which will soon get private parameters and thus it cannot be exposed outside qemu_capabilities. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new ptach src/qemu/qemu_capabilities.c | 10 +++++++++- src/qemu/qemu_capspriv.h | 5 ++--- tests/cputest.c | 5 ++--- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 2bd0297364..2dca1b353b 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2526,7 +2526,7 @@ virQEMUCapsFetchCPUModels(qemuMonitorPtr mon, } -int +static int virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps, qemuMonitorPtr mon, bool tcg) @@ -2548,6 +2548,14 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps, } +int +virQEMUCapsProbeCPUDefinitionsTest(virQEMUCapsPtr qemuCaps, + qemuMonitorPtr mon) +{ + return virQEMUCapsProbeQMPCPUDefinitions(qemuCaps, mon, false); +} + + static int virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, qemuMonitorPtr mon, diff --git a/src/qemu/qemu_capspriv.h b/src/qemu/qemu_capspriv.h index e8fe48d8f0..9fc3f43f32 100644 --- a/src/qemu/qemu_capspriv.h +++ b/src/qemu/qemu_capspriv.h @@ -95,9 +95,8 @@ virQEMUCapsSetSEVCapabilities(virQEMUCapsPtr qemuCaps, virSEVCapability *capabilities); int -virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps, - qemuMonitorPtr mon, - bool tcg); +virQEMUCapsProbeCPUDefinitionsTest(virQEMUCapsPtr qemuCaps, + qemuMonitorPtr mon); void virQEMUCapsSetMicrocodeVersion(virQEMUCapsPtr qemuCaps, diff --git a/tests/cputest.c b/tests/cputest.c index ef2d4e28df..f3d23ebd36 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -513,9 +513,8 @@ cpuTestMakeQEMUCaps(const struct data *data) virQEMUCapsSetCPUModelInfo(qemuCaps, VIR_DOMAIN_VIRT_KVM, model); model = NULL; - if (virQEMUCapsProbeQMPCPUDefinitions(qemuCaps, - qemuMonitorTestGetMonitor(testMon), - false) < 0) + if (virQEMUCapsProbeCPUDefinitionsTest(qemuCaps, + qemuMonitorTestGetMonitor(testMon)) < 0) goto error; cleanup: -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:29PM +0100, Jiri Denemark wrote:
It is a tiny wrapper around virQEMUCapsProbeQMPCPUDefinitions which will soon get private parameters and thus it cannot be exposed outside qemu_capabilities.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new ptach
src/qemu/qemu_capabilities.c | 10 +++++++++- src/qemu/qemu_capspriv.h | 5 ++--- tests/cputest.c | 5 ++--- 3 files changed, 13 insertions(+), 7 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

To avoid duplicating code which selects the right virQEMUCapsAccel data to be filled during probing. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 51 ++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 2dca1b353b..c66eef3e94 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2528,22 +2528,15 @@ virQEMUCapsFetchCPUModels(qemuMonitorPtr mon, static int virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps, - qemuMonitorPtr mon, - bool tcg) + virQEMUCapsAccelPtr accel, + qemuMonitorPtr mon) { - qemuMonitorCPUDefsPtr defs = NULL; - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS)) return 0; - if (virQEMUCapsFetchCPUDefinitions(mon, qemuCaps->arch, &defs) < 0) + if (virQEMUCapsFetchCPUDefinitions(mon, qemuCaps->arch, &accel->cpuModels) < 0) return -1; - if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) - qemuCaps->tcg.cpuModels = defs; - else - qemuCaps->kvm.cpuModels = defs; - return 0; } @@ -2552,36 +2545,28 @@ int virQEMUCapsProbeCPUDefinitionsTest(virQEMUCapsPtr qemuCaps, qemuMonitorPtr mon) { - return virQEMUCapsProbeQMPCPUDefinitions(qemuCaps, mon, false); + return virQEMUCapsProbeQMPCPUDefinitions(qemuCaps, &qemuCaps->kvm, mon); } static int virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, + virQEMUCapsAccelPtr accel, qemuMonitorPtr mon, - bool tcg) + virDomainVirtType virtType) { + const char *model = virtType == VIR_DOMAIN_VIRT_KVM ? "host" : "max"; qemuMonitorCPUModelInfoPtr modelInfo = NULL; qemuMonitorCPUModelInfoPtr nonMigratable = NULL; virHashTablePtr hash = NULL; - const char *model; virCPUDefPtr cpu; qemuMonitorCPUModelExpansionType type; - virDomainVirtType virtType; bool fail_no_props = true; int ret = -1; if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION)) return 0; - if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) { - virtType = VIR_DOMAIN_VIRT_QEMU; - model = "max"; - } else { - virtType = VIR_DOMAIN_VIRT_KVM; - model = "host"; - } - if (VIR_ALLOC(cpu) < 0) goto cleanup; @@ -2646,8 +2631,7 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, modelInfo->migratability = true; } - virQEMUCapsSetCPUModelInfo(qemuCaps, virtType, modelInfo); - modelInfo = NULL; + accel->hostCPU.info = g_steal_pointer(&modelInfo); ret = 0; cleanup: @@ -4563,6 +4547,8 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, { int major, minor, micro; g_autofree char *package = NULL; + virQEMUCapsAccelPtr accel; + virDomainVirtType type; /* @mon is supposed to be locked by callee */ @@ -4600,6 +4586,13 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, if (virQEMUCapsProbeQMPKVMState(qemuCaps, mon) < 0) return -1; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) + type = VIR_DOMAIN_VIRT_KVM; + else + type = VIR_DOMAIN_VIRT_QEMU; + + accel = virQEMUCapsGetAccel(qemuCaps, type); + if (virQEMUCapsProbeQMPEvents(qemuCaps, mon) < 0) return -1; if (virQEMUCapsProbeQMPDevices(qemuCaps, mon) < 0) @@ -4608,7 +4601,7 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, return -1; if (virQEMUCapsProbeQMPMachineProps(qemuCaps, mon) < 0) return -1; - if (virQEMUCapsProbeQMPCPUDefinitions(qemuCaps, mon, false) < 0) + if (virQEMUCapsProbeQMPCPUDefinitions(qemuCaps, accel, mon) < 0) return -1; if (virQEMUCapsProbeQMPTPM(qemuCaps, mon) < 0) return -1; @@ -4628,7 +4621,7 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, /* The following probes rely on other previously probed capabilities. * No capabilities bits should be set below this point. */ - if (virQEMUCapsProbeQMPHostCPU(qemuCaps, mon, false) < 0) + if (virQEMUCapsProbeQMPHostCPU(qemuCaps, accel, mon, type) < 0) return -1; return 0; @@ -4639,10 +4632,12 @@ int virQEMUCapsInitQMPMonitorTCG(virQEMUCapsPtr qemuCaps, qemuMonitorPtr mon) { - if (virQEMUCapsProbeQMPCPUDefinitions(qemuCaps, mon, true) < 0) + virQEMUCapsAccelPtr accel = virQEMUCapsGetAccel(qemuCaps, VIR_DOMAIN_VIRT_QEMU); + + if (virQEMUCapsProbeQMPCPUDefinitions(qemuCaps, accel, mon) < 0) return -1; - if (virQEMUCapsProbeQMPHostCPU(qemuCaps, mon, true) < 0) + if (virQEMUCapsProbeQMPHostCPU(qemuCaps, accel, mon, VIR_DOMAIN_VIRT_QEMU) < 0) return -1; return 0; -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:30PM +0100, Jiri Denemark wrote:
To avoid duplicating code which selects the right virQEMUCapsAccel data to be filled during probing.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 51 ++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 28 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 150 ++++++++++++++++++----------------- src/qemu/qemu_capabilities.h | 3 - 2 files changed, 76 insertions(+), 77 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index c66eef3e94..b9307730f1 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -831,6 +831,82 @@ virQEMUCapsInitGuest(virCapsPtr caps, return ret; } + +static int +virQEMUCapsGetMachineTypesCaps(virQEMUCapsPtr qemuCaps, + size_t *nmachines, + virCapsGuestMachinePtr **machines) +{ + size_t i; + + *machines = NULL; + *nmachines = qemuCaps->nmachineTypes; + + if (*nmachines && + VIR_ALLOC_N(*machines, qemuCaps->nmachineTypes) < 0) + goto error; + + for (i = 0; i < qemuCaps->nmachineTypes; i++) { + virCapsGuestMachinePtr mach; + if (VIR_ALLOC(mach) < 0) + goto error; + (*machines)[i] = mach; + if (qemuCaps->machineTypes[i].alias) { + mach->name = g_strdup(qemuCaps->machineTypes[i].alias); + mach->canonical = g_strdup(qemuCaps->machineTypes[i].name); + } else { + mach->name = g_strdup(qemuCaps->machineTypes[i].name); + } + mach->maxCpus = qemuCaps->machineTypes[i].maxCpus; + } + + /* Make sure all canonical machine types also have their own entry so that + * /capabilities/guest/arch[@name='...']/machine/text() XPath selects all + * supported machine types. + */ + i = 0; + while (i < *nmachines) { + size_t j; + bool found = false; + virCapsGuestMachinePtr machine = (*machines)[i]; + + if (!machine->canonical) { + i++; + continue; + } + + for (j = 0; j < *nmachines; j++) { + if (STREQ(machine->canonical, (*machines)[j]->name)) { + found = true; + break; + } + } + + if (!found) { + virCapsGuestMachinePtr mach; + if (VIR_ALLOC(mach) < 0) + goto error; + if (VIR_INSERT_ELEMENT_COPY(*machines, i, *nmachines, mach) < 0) { + VIR_FREE(mach); + goto error; + } + mach->name = g_strdup(machine->canonical); + mach->maxCpus = machine->maxCpus; + i++; + } + i++; + } + + return 0; + + error: + virCapabilitiesFreeMachines(*machines, *nmachines); + *nmachines = 0; + *machines = NULL; + return -1; +} + + int virQEMUCapsInitGuestFromBinary(virCapsPtr caps, const char *binary, @@ -2022,80 +2098,6 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, } -int virQEMUCapsGetMachineTypesCaps(virQEMUCapsPtr qemuCaps, - size_t *nmachines, - virCapsGuestMachinePtr **machines) -{ - size_t i; - - *machines = NULL; - *nmachines = qemuCaps->nmachineTypes; - - if (*nmachines && - VIR_ALLOC_N(*machines, qemuCaps->nmachineTypes) < 0) - goto error; - - for (i = 0; i < qemuCaps->nmachineTypes; i++) { - virCapsGuestMachinePtr mach; - if (VIR_ALLOC(mach) < 0) - goto error; - (*machines)[i] = mach; - if (qemuCaps->machineTypes[i].alias) { - mach->name = g_strdup(qemuCaps->machineTypes[i].alias); - mach->canonical = g_strdup(qemuCaps->machineTypes[i].name); - } else { - mach->name = g_strdup(qemuCaps->machineTypes[i].name); - } - mach->maxCpus = qemuCaps->machineTypes[i].maxCpus; - } - - /* Make sure all canonical machine types also have their own entry so that - * /capabilities/guest/arch[@name='...']/machine/text() XPath selects all - * supported machine types. - */ - i = 0; - while (i < *nmachines) { - size_t j; - bool found = false; - virCapsGuestMachinePtr machine = (*machines)[i]; - - if (!machine->canonical) { - i++; - continue; - } - - for (j = 0; j < *nmachines; j++) { - if (STREQ(machine->canonical, (*machines)[j]->name)) { - found = true; - break; - } - } - - if (!found) { - virCapsGuestMachinePtr mach; - if (VIR_ALLOC(mach) < 0) - goto error; - if (VIR_INSERT_ELEMENT_COPY(*machines, i, *nmachines, mach) < 0) { - VIR_FREE(mach); - goto error; - } - mach->name = g_strdup(machine->canonical); - mach->maxCpus = machine->maxCpus; - i++; - } - i++; - } - - return 0; - - error: - virCapabilitiesFreeMachines(*machines, *nmachines); - *nmachines = 0; - *machines = NULL; - return -1; -} - - /** * virQEMUCapsGetCanonicalMachine: * @qemuCaps: qemu capabilities object diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index f43e56a9ca..ee779d90ed 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -606,9 +606,6 @@ int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, const char *name); bool virQEMUCapsGetMachineHotplugCpus(virQEMUCapsPtr qemuCaps, const char *name); -int virQEMUCapsGetMachineTypesCaps(virQEMUCapsPtr qemuCaps, - size_t *nmachines, - virCapsGuestMachinePtr **machines); void virQEMUCapsFilterByMachineType(virQEMUCapsPtr qemuCaps, const char *machineType); -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:31PM +0100, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 150 ++++++++++++++++++----------------- src/qemu/qemu_capabilities.h | 3 - 2 files changed, 76 insertions(+), 77 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 28 ++++++++++++++-------------- src/qemu/qemu_capabilities.h | 3 --- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index b9307730f1..0f3c061003 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2429,6 +2429,20 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, } +static bool +virQEMUCapsIsMachineSupported(virQEMUCapsPtr qemuCaps, + const char *canonical_machine) +{ + size_t i; + + for (i = 0; i < qemuCaps->nmachineTypes; i++) { + if (STREQ(canonical_machine, qemuCaps->machineTypes[i].name)) + return true; + } + return false; +} + + static int virQEMUCapsProbeQMPMachineProps(virQEMUCapsPtr qemuCaps, qemuMonitorPtr mon) @@ -5146,20 +5160,6 @@ virQEMUCapsSupportsVmport(virQEMUCapsPtr qemuCaps, } -bool -virQEMUCapsIsMachineSupported(virQEMUCapsPtr qemuCaps, - const char *canonical_machine) -{ - size_t i; - - for (i = 0; i < qemuCaps->nmachineTypes; i++) { - if (STREQ(canonical_machine, qemuCaps->machineTypes[i].name)) - return true; - } - return false; -} - - /* * The preferred machine to use if none is listed explicitly * Note that this may differ from QEMU's own default machine diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index ee779d90ed..c0e1ce41e3 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -642,9 +642,6 @@ bool virQEMUCapsSupportsGICVersion(virQEMUCapsPtr qemuCaps, virDomainVirtType virtType, virGICVersion version); -bool virQEMUCapsIsMachineSupported(virQEMUCapsPtr qemuCaps, - const char *canonical_machine); - const char *virQEMUCapsGetPreferredMachine(virQEMUCapsPtr qemuCaps); int virQEMUCapsInitGuestFromBinary(virCapsPtr caps, -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:32PM +0100, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 28 ++++++++++++++-------------- src/qemu/qemu_capabilities.h | 3 --- 2 files changed, 14 insertions(+), 17 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

All the code for loading machine type data was moved to a standalone virQEMUCapsLoadMachines function. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 93 +++++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 38 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 0f3c061003..4c0cba6a62 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3554,6 +3554,60 @@ virQEMUCapsLoadCPUModels(virQEMUCapsAccelPtr caps, } +static int +virQEMUCapsLoadMachines(virQEMUCapsPtr qemuCaps, + xmlXPathContextPtr ctxt) +{ + g_autofree xmlNodePtr *nodes = NULL; + char *str = NULL; + size_t i; + int n; + + if ((n = virXPathNodeSet("./machine", ctxt, &nodes)) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("failed to parse qemu capabilities machines")); + return -1; + } + + if (n == 0) + return 0; + + qemuCaps->nmachineTypes = n; + if (VIR_ALLOC_N(qemuCaps->machineTypes, qemuCaps->nmachineTypes) < 0) + return -1; + + for (i = 0; i < n; i++) { + if (!(qemuCaps->machineTypes[i].name = virXMLPropString(nodes[i], "name"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("missing machine name in QEMU capabilities cache")); + return -1; + } + qemuCaps->machineTypes[i].alias = virXMLPropString(nodes[i], "alias"); + + str = virXMLPropString(nodes[i], "maxCpus"); + if (str && + virStrToLong_ui(str, NULL, 10, &(qemuCaps->machineTypes[i].maxCpus)) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("malformed machine cpu count in QEMU capabilities cache")); + return -1; + } + VIR_FREE(str); + + str = virXMLPropString(nodes[i], "hotplugCpus"); + if (STREQ_NULLABLE(str, "yes")) + qemuCaps->machineTypes[i].hotplugCpus = true; + VIR_FREE(str); + + str = virXMLPropString(nodes[i], "default"); + if (STREQ_NULLABLE(str, "yes")) + qemuCaps->machineTypes[i].qemuDefault = true; + VIR_FREE(str); + } + + return 0; +} + + static int virQEMUCapsLoadAccel(virQEMUCapsPtr qemuCaps, xmlXPathContextPtr ctxt, @@ -3787,45 +3841,8 @@ virQEMUCapsLoadCache(virArch hostArch, virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_QEMU) < 0) goto cleanup; - if ((n = virXPathNodeSet("./machine", ctxt, &nodes)) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("failed to parse qemu capabilities machines")); + if (virQEMUCapsLoadMachines(qemuCaps, ctxt) < 0) goto cleanup; - } - if (n > 0) { - qemuCaps->nmachineTypes = n; - if (VIR_ALLOC_N(qemuCaps->machineTypes, qemuCaps->nmachineTypes) < 0) - goto cleanup; - - for (i = 0; i < n; i++) { - if (!(qemuCaps->machineTypes[i].name = virXMLPropString(nodes[i], "name"))) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("missing machine name in QEMU capabilities cache")); - goto cleanup; - } - qemuCaps->machineTypes[i].alias = virXMLPropString(nodes[i], "alias"); - - str = virXMLPropString(nodes[i], "maxCpus"); - if (str && - virStrToLong_ui(str, NULL, 10, &(qemuCaps->machineTypes[i].maxCpus)) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("malformed machine cpu count in QEMU capabilities cache")); - goto cleanup; - } - VIR_FREE(str); - - str = virXMLPropString(nodes[i], "hotplugCpus"); - if (STREQ_NULLABLE(str, "yes")) - qemuCaps->machineTypes[i].hotplugCpus = true; - VIR_FREE(str); - - str = virXMLPropString(nodes[i], "default"); - if (STREQ_NULLABLE(str, "yes")) - qemuCaps->machineTypes[i].qemuDefault = true; - VIR_FREE(str); - } - } - VIR_FREE(nodes); if ((n = virXPathNodeSet("./gic", ctxt, &nodes)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", -- 2.23.0

s/Refactor virQEMUCapsLoadCache/Split out virQEMUCapsLoadMachines/ maybe On Tue, Nov 05, 2019 at 02:27:33PM +0100, Jiri Denemark wrote:
All the code for loading machine type data was moved to a standalone virQEMUCapsLoadMachines function.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 93 +++++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 38 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

All the code for formatting machine type data was moved to a standalone virQEMUCapsFormatMachines function. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 37 ++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 4c0cba6a62..52a7248574 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -4023,6 +4023,28 @@ virQEMUCapsFormatCPUModels(virQEMUCapsAccelPtr caps, } +static void +virQEMUCapsFormatMachines(virQEMUCapsPtr qemuCaps, + virBufferPtr buf) +{ + size_t i; + + for (i = 0; i < qemuCaps->nmachineTypes; i++) { + virBufferEscapeString(buf, "<machine name='%s'", + qemuCaps->machineTypes[i].name); + virBufferEscapeString(buf, " alias='%s'", + qemuCaps->machineTypes[i].alias); + if (qemuCaps->machineTypes[i].hotplugCpus) + virBufferAddLit(buf, " hotplugCpus='yes'"); + virBufferAsprintf(buf, " maxCpus='%u'", + qemuCaps->machineTypes[i].maxCpus); + if (qemuCaps->machineTypes[i].qemuDefault) + virBufferAddLit(buf, " default='yes'"); + virBufferAddLit(buf, "/>\n"); + } +} + + static void virQEMUCapsFormatAccel(virQEMUCapsPtr qemuCaps, virBufferPtr buf, @@ -4101,20 +4123,7 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps) virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM); virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU); - for (i = 0; i < qemuCaps->nmachineTypes; i++) { - virBufferEscapeString(&buf, "<machine name='%s'", - qemuCaps->machineTypes[i].name); - if (qemuCaps->machineTypes[i].alias) - virBufferEscapeString(&buf, " alias='%s'", - qemuCaps->machineTypes[i].alias); - if (qemuCaps->machineTypes[i].hotplugCpus) - virBufferAddLit(&buf, " hotplugCpus='yes'"); - virBufferAsprintf(&buf, " maxCpus='%u'", - qemuCaps->machineTypes[i].maxCpus); - if (qemuCaps->machineTypes[i].qemuDefault) - virBufferAddLit(&buf, " default='yes'"); - virBufferAddLit(&buf, "/>\n"); - } + virQEMUCapsFormatMachines(qemuCaps, &buf); for (i = 0; i < qemuCaps->ngicCapabilities; i++) { virGICCapabilityPtr cap; -- 2.23.0

dtto On Tue, Nov 05, 2019 at 02:27:34PM +0100, Jiri Denemark wrote:
All the code for formatting machine type data was moved to a standalone virQEMUCapsFormatMachines function.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 37 ++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 64 +++++++++++++++++++++--------------- src/qemu/qemu_capabilities.h | 8 ++++- src/qemu/qemu_domain.c | 8 +++-- tests/domaincapstest.c | 10 ++++-- 4 files changed, 59 insertions(+), 31 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 52a7248574..68ae8be5c3 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2106,8 +2106,10 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, * Resolves aliased machine names to the actual machine name. If qemuCaps isn't * present @name is returned. */ -const char *virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps, - const char *name) +const char * +virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps, + virDomainVirtType virtType G_GNUC_UNUSED, + const char *name) { size_t i; @@ -2125,8 +2127,10 @@ const char *virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps, } -int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, - const char *name) +int +virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, + virDomainVirtType virtType G_GNUC_UNUSED, + const char *name) { size_t i; @@ -2144,8 +2148,10 @@ int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, } -bool virQEMUCapsGetMachineHotplugCpus(virQEMUCapsPtr qemuCaps, - const char *name) +bool +virQEMUCapsGetMachineHotplugCpus(virQEMUCapsPtr qemuCaps, + virDomainVirtType virtType G_GNUC_UNUSED, + const char *name) { size_t i; @@ -2431,6 +2437,7 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, static bool virQEMUCapsIsMachineSupported(virQEMUCapsPtr qemuCaps, + virDomainVirtType virtType G_GNUC_UNUSED, const char *canonical_machine) { size_t i; @@ -2445,6 +2452,7 @@ virQEMUCapsIsMachineSupported(virQEMUCapsPtr qemuCaps, static int virQEMUCapsProbeQMPMachineProps(virQEMUCapsPtr qemuCaps, + virDomainVirtType virtType, qemuMonitorPtr mon) { char **values; @@ -2456,10 +2464,10 @@ virQEMUCapsProbeQMPMachineProps(virQEMUCapsPtr qemuCaps, for (i = 0; i < G_N_ELEMENTS(virQEMUCapsMachineProps); i++) { virQEMUCapsObjectTypeProps props = virQEMUCapsMachineProps[i]; - const char *canon = virQEMUCapsGetCanonicalMachine(qemuCaps, props.type); + const char *canon = virQEMUCapsGetCanonicalMachine(qemuCaps, virtType, props.type); g_autofree char *type = NULL; - if (!virQEMUCapsIsMachineSupported(qemuCaps, canon)) + if (!virQEMUCapsIsMachineSupported(qemuCaps, virtType, canon)) continue; /* The QOM type for machine types is the machine type name @@ -4641,7 +4649,7 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, return -1; if (virQEMUCapsProbeQMPMachineTypes(qemuCaps, mon) < 0) return -1; - if (virQEMUCapsProbeQMPMachineProps(qemuCaps, mon) < 0) + if (virQEMUCapsProbeQMPMachineProps(qemuCaps, type, mon) < 0) return -1; if (virQEMUCapsProbeQMPCPUDefinitions(qemuCaps, accel, mon) < 0) return -1; @@ -4878,6 +4886,7 @@ static const struct virQEMUCapsMachineTypeFilter virQEMUCapsMachineFilter[] = { void virQEMUCapsFilterByMachineType(virQEMUCapsPtr qemuCaps, + virDomainVirtType virtType, const char *machineType) { size_t i; @@ -4896,7 +4905,7 @@ virQEMUCapsFilterByMachineType(virQEMUCapsPtr qemuCaps, virQEMUCapsClear(qemuCaps, filter->flags[j]); } - if (!virQEMUCapsGetMachineHotplugCpus(qemuCaps, machineType)) + if (!virQEMUCapsGetMachineHotplugCpus(qemuCaps, virtType, machineType)) virQEMUCapsClear(qemuCaps, QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS); } @@ -4972,6 +4981,7 @@ virQEMUCapsCacheLookup(virFileCachePtr cache, virQEMUCapsPtr virQEMUCapsCacheLookupCopy(virFileCachePtr cache, + virDomainVirtType virtType, const char *binary, const char *machineType) { @@ -4987,7 +4997,7 @@ virQEMUCapsCacheLookupCopy(virFileCachePtr cache, if (!ret) return NULL; - virQEMUCapsFilterByMachineType(ret, machineType); + virQEMUCapsFilterByMachineType(ret, virtType, machineType); return ret; } @@ -5130,20 +5140,6 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache, binary = virQEMUCapsGetBinary(qemuCaps); } - if (machine) { - /* Turn @machine into canonical name */ - machine = virQEMUCapsGetCanonicalMachine(qemuCaps, machine); - - if (!virQEMUCapsIsMachineSupported(qemuCaps, machine)) { - virReportError(VIR_ERR_INVALID_ARG, - _("the machine '%s' is not supported by emulator '%s'"), - machine, binary); - goto cleanup; - } - } else { - machine = virQEMUCapsGetPreferredMachine(qemuCaps); - } - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) capsType = VIR_DOMAIN_VIRT_KVM; else @@ -5159,6 +5155,20 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache, goto cleanup; } + if (machine) { + /* Turn @machine into canonical name */ + machine = virQEMUCapsGetCanonicalMachine(qemuCaps, virttype, machine); + + if (!virQEMUCapsIsMachineSupported(qemuCaps, virttype, machine)) { + virReportError(VIR_ERR_INVALID_ARG, + _("the machine '%s' is not supported by emulator '%s'"), + machine, binary); + goto cleanup; + } + } else { + machine = virQEMUCapsGetPreferredMachine(qemuCaps, virttype); + } + if (retArch) *retArch = arch; if (retVirttype) @@ -5191,7 +5201,8 @@ virQEMUCapsSupportsVmport(virQEMUCapsPtr qemuCaps, * Note that this may differ from QEMU's own default machine */ const char * -virQEMUCapsGetPreferredMachine(virQEMUCapsPtr qemuCaps) +virQEMUCapsGetPreferredMachine(virQEMUCapsPtr qemuCaps, + virDomainVirtType virtType G_GNUC_UNUSED) { if (!qemuCaps->nmachineTypes) return NULL; @@ -5650,6 +5661,7 @@ virQEMUCapsFillDomainCaps(virCapsPtr caps, virDomainCapsDeviceRNGPtr rng = &domCaps->rng; domCaps->maxvcpus = virQEMUCapsGetMachineMaxCpus(qemuCaps, + domCaps->virttype, domCaps->machine); if (domCaps->virttype == VIR_DOMAIN_VIRT_KVM) { int hostmaxvcpus; diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index c0e1ce41e3..bc43b99579 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -601,13 +601,17 @@ bool virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, virDomainVirtType type, virCPUMode mode); const char *virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps, + virDomainVirtType virtType, const char *name); int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, + virDomainVirtType virtType, const char *name); bool virQEMUCapsGetMachineHotplugCpus(virQEMUCapsPtr qemuCaps, + virDomainVirtType virtType, const char *name); void virQEMUCapsFilterByMachineType(virQEMUCapsPtr qemuCaps, + virDomainVirtType virtType, const char *machineType); virFileCachePtr virQEMUCapsCacheNew(const char *libDir, @@ -617,6 +621,7 @@ virFileCachePtr virQEMUCapsCacheNew(const char *libDir, virQEMUCapsPtr virQEMUCapsCacheLookup(virFileCachePtr cache, const char *binary); virQEMUCapsPtr virQEMUCapsCacheLookupCopy(virFileCachePtr cache, + virDomainVirtType virtType, const char *binary, const char *machineType); virQEMUCapsPtr virQEMUCapsCacheLookupByArch(virFileCachePtr cache, @@ -642,7 +647,8 @@ bool virQEMUCapsSupportsGICVersion(virQEMUCapsPtr qemuCaps, virDomainVirtType virtType, virGICVersion version); -const char *virQEMUCapsGetPreferredMachine(virQEMUCapsPtr qemuCaps); +const char *virQEMUCapsGetPreferredMachine(virQEMUCapsPtr qemuCaps, + virDomainVirtType virtType); int virQEMUCapsInitGuestFromBinary(virCapsPtr caps, const char *binary, diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 667cc89072..8627238c6a 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4340,7 +4340,8 @@ qemuCanonicalizeMachine(virDomainDefPtr def, virQEMUCapsPtr qemuCaps) { const char *canon; - if (!(canon = virQEMUCapsGetCanonicalMachine(qemuCaps, def->os.machine))) + if (!(canon = virQEMUCapsGetCanonicalMachine(qemuCaps, def->virtType, + def->os.machine))) return 0; if (STRNEQ(canon, def->os.machine)) { @@ -4839,7 +4840,8 @@ static int qemuDomainValidateCpuCount(const virDomainDef *def, virQEMUCapsPtr qemuCaps) { - unsigned int maxCpus = virQEMUCapsGetMachineMaxCpus(qemuCaps, def->os.machine); + unsigned int maxCpus = virQEMUCapsGetMachineMaxCpus(qemuCaps, def->virtType, + def->os.machine); if (virDomainDefGetVcpus(def) == 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -8916,6 +8918,7 @@ qemuDomainDefFormatBufInternal(virQEMUDriverPtr driver, qCaps = virObjectRef(qemuCaps); } else { if (!(qCaps = virQEMUCapsCacheLookupCopy(driver->qemuCapsCache, + def->virtType, def->emulator, def->os.machine))) goto cleanup; @@ -14992,6 +14995,7 @@ qemuDomainUpdateQEMUCaps(virDomainObjPtr vm, virObjectUnref(priv->qemuCaps); if (!(priv->qemuCaps = virQEMUCapsCacheLookupCopy(qemuCapsCache, + vm->def->virtType, vm->def->emulator, vm->def->os.machine))) return -1; diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c index f77accdb76..a3295cdd80 100644 --- a/tests/domaincapstest.c +++ b/tests/domaincapstest.c @@ -83,6 +83,7 @@ fillQemuCaps(virDomainCapsPtr domCaps, virCapsPtr caps = NULL; virQEMUCapsPtr qemuCaps = NULL; virDomainCapsLoaderPtr loader = &domCaps->os.loader; + virDomainVirtType virtType; if (!(caps = virCapabilitiesNew(domCaps->arch, false, false)) || fakeHostCPU(caps, domCaps->arch) < 0) @@ -93,13 +94,18 @@ fillQemuCaps(virDomainCapsPtr domCaps, !(qemuCaps = qemuTestParseCapabilities(caps, path))) goto cleanup; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) + virtType = VIR_DOMAIN_VIRT_KVM; + else + virtType = VIR_DOMAIN_VIRT_QEMU; + if (machine) { VIR_FREE(domCaps->machine); - domCaps->machine = g_strdup(virQEMUCapsGetCanonicalMachine(qemuCaps, machine)); + domCaps->machine = g_strdup(virQEMUCapsGetCanonicalMachine(qemuCaps, virtType, machine)); } if (!domCaps->machine) - domCaps->machine = g_strdup(virQEMUCapsGetPreferredMachine(qemuCaps)); + domCaps->machine = g_strdup(virQEMUCapsGetPreferredMachine(qemuCaps, virtType)); if (virQEMUCapsFillDomainCaps(caps, domCaps, qemuCaps, false, -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:35PM +0100, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 64 +++++++++++++++++++++--------------- src/qemu/qemu_capabilities.h | 8 ++++- src/qemu/qemu_domain.c | 8 +++-- tests/domaincapstest.c | 10 ++++-- 4 files changed, 59 insertions(+), 31 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

In preparation for making machine types dependent on the accelerator, the <machine> elements are formatted between <cpu type='kvm'> and <cpu type='tcg'>. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 4 +- .../caps_1.5.3.x86_64.xml | 30 +++--- .../caps_1.6.0.x86_64.xml | 34 +++---- .../caps_1.7.0.x86_64.xml | 38 ++++---- .../caps_2.1.1.x86_64.xml | 46 +++++----- .../caps_2.10.0.aarch64.xml | 62 ++++++------- .../caps_2.10.0.ppc64.xml | 42 ++++----- .../caps_2.10.0.s390x.xml | 14 +-- .../caps_2.10.0.x86_64.xml | 70 +++++++------- .../caps_2.11.0.s390x.xml | 16 ++-- .../caps_2.11.0.x86_64.xml | 70 +++++++------- .../caps_2.12.0.aarch64.xml | 68 +++++++------- .../caps_2.12.0.ppc64.xml | 50 +++++----- .../caps_2.12.0.s390x.xml | 18 ++-- .../caps_2.12.0.x86_64.xml | 74 +++++++-------- .../caps_2.4.0.x86_64.xml | 56 +++++------ .../caps_2.5.0.x86_64.xml | 56 +++++------ .../caps_2.6.0.aarch64.xml | 60 ++++++------ .../qemucapabilitiesdata/caps_2.6.0.ppc64.xml | 30 +++--- .../caps_2.6.0.x86_64.xml | 50 +++++----- .../qemucapabilitiesdata/caps_2.7.0.s390x.xml | 2 +- .../caps_2.7.0.x86_64.xml | 54 +++++------ .../qemucapabilitiesdata/caps_2.8.0.s390x.xml | 10 +- .../caps_2.8.0.x86_64.xml | 62 ++++++------- .../qemucapabilitiesdata/caps_2.9.0.ppc64.xml | 40 ++++---- .../qemucapabilitiesdata/caps_2.9.0.s390x.xml | 12 +-- .../caps_2.9.0.x86_64.xml | 66 ++++++------- .../qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 52 +++++------ .../qemucapabilitiesdata/caps_3.0.0.s390x.xml | 20 ++-- .../caps_3.0.0.x86_64.xml | 78 ++++++++-------- .../qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 54 +++++------ .../caps_3.1.0.x86_64.xml | 82 ++++++++--------- .../caps_4.0.0.aarch64.xml | 74 +++++++-------- .../qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 56 +++++------ .../qemucapabilitiesdata/caps_4.0.0.s390x.xml | 24 ++--- .../caps_4.0.0.x86_64.xml | 82 ++++++++--------- .../caps_4.1.0.x86_64.xml | 88 +++++++++--------- .../caps_4.2.0.aarch64.xml | 74 +++++++-------- .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 62 ++++++------- .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 28 +++--- .../caps_4.2.0.x86_64.xml | 92 +++++++++---------- 41 files changed, 1000 insertions(+), 1000 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 68ae8be5c3..b21aadf864 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -4129,10 +4129,10 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps) virArchToString(qemuCaps->arch)); virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM); - virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU); - virQEMUCapsFormatMachines(qemuCaps, &buf); + virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU); + for (i = 0; i < qemuCaps->ngicCapabilities; i++) { virGICCapabilityPtr cap; bool kernel; diff --git a/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml index 8b573070d5..a62a5534b8 100644 --- a/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml @@ -112,6 +112,21 @@ <cpu type='kvm' name='core2duo'/> <cpu type='kvm' name='phenom'/> <cpu type='kvm' name='qemu64'/> + <machine name='pc-i440fx-1.5' alias='pc' maxCpus='255' default='yes'/> + <machine name='pc-q35-1.4' maxCpus='255'/> + <machine name='pc-q35-1.5' alias='q35' maxCpus='255'/> + <machine name='isapc' maxCpus='1'/> + <machine name='pc-0.10' maxCpus='255'/> + <machine name='pc-0.11' maxCpus='255'/> + <machine name='pc-0.12' maxCpus='255'/> + <machine name='pc-0.13' maxCpus='255'/> + <machine name='pc-0.14' maxCpus='255'/> + <machine name='pc-0.15' maxCpus='255'/> + <machine name='pc-1.0' maxCpus='255'/> + <machine name='pc-1.1' maxCpus='255'/> + <machine name='pc-1.2' maxCpus='255'/> + <machine name='pc-1.3' maxCpus='255'/> + <machine name='pc-i440fx-1.4' maxCpus='255'/> <cpu type='tcg' name='Opteron_G5'/> <cpu type='tcg' name='Opteron_G4'/> <cpu type='tcg' name='Opteron_G3'/> @@ -136,19 +151,4 @@ <cpu type='tcg' name='core2duo'/> <cpu type='tcg' name='phenom'/> <cpu type='tcg' name='qemu64'/> - <machine name='pc-i440fx-1.5' alias='pc' maxCpus='255' default='yes'/> - <machine name='pc-q35-1.4' maxCpus='255'/> - <machine name='pc-q35-1.5' alias='q35' maxCpus='255'/> - <machine name='isapc' maxCpus='1'/> - <machine name='pc-0.10' maxCpus='255'/> - <machine name='pc-0.11' maxCpus='255'/> - <machine name='pc-0.12' maxCpus='255'/> - <machine name='pc-0.13' maxCpus='255'/> - <machine name='pc-0.14' maxCpus='255'/> - <machine name='pc-0.15' maxCpus='255'/> - <machine name='pc-1.0' maxCpus='255'/> - <machine name='pc-1.1' maxCpus='255'/> - <machine name='pc-1.2' maxCpus='255'/> - <machine name='pc-1.3' maxCpus='255'/> - <machine name='pc-i440fx-1.4' maxCpus='255'/> </qemuCaps> ...

On Tue, Nov 05, 2019 at 02:27:36PM +0100, Jiri Denemark wrote:
In preparation for making machine types dependent on the accelerator, the <machine> elements are formatted between <cpu type='kvm'> and <cpu type='tcg'>.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 4 +- .../caps_1.5.3.x86_64.xml | 30 +++--- .../caps_1.6.0.x86_64.xml | 34 +++---- .../caps_1.7.0.x86_64.xml | 38 ++++---- .../caps_2.1.1.x86_64.xml | 46 +++++----- .../caps_2.10.0.aarch64.xml | 62 ++++++------- .../caps_2.10.0.ppc64.xml | 42 ++++----- .../caps_2.10.0.s390x.xml | 14 +-- .../caps_2.10.0.x86_64.xml | 70 +++++++------- .../caps_2.11.0.s390x.xml | 16 ++-- .../caps_2.11.0.x86_64.xml | 70 +++++++------- .../caps_2.12.0.aarch64.xml | 68 +++++++------- .../caps_2.12.0.ppc64.xml | 50 +++++----- .../caps_2.12.0.s390x.xml | 18 ++-- .../caps_2.12.0.x86_64.xml | 74 +++++++-------- .../caps_2.4.0.x86_64.xml | 56 +++++------ .../caps_2.5.0.x86_64.xml | 56 +++++------ .../caps_2.6.0.aarch64.xml | 60 ++++++------ .../qemucapabilitiesdata/caps_2.6.0.ppc64.xml | 30 +++--- .../caps_2.6.0.x86_64.xml | 50 +++++----- .../qemucapabilitiesdata/caps_2.7.0.s390x.xml | 2 +- .../caps_2.7.0.x86_64.xml | 54 +++++------ .../qemucapabilitiesdata/caps_2.8.0.s390x.xml | 10 +- .../caps_2.8.0.x86_64.xml | 62 ++++++------- .../qemucapabilitiesdata/caps_2.9.0.ppc64.xml | 40 ++++---- .../qemucapabilitiesdata/caps_2.9.0.s390x.xml | 12 +-- .../caps_2.9.0.x86_64.xml | 66 ++++++------- .../qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 52 +++++------ .../qemucapabilitiesdata/caps_3.0.0.s390x.xml | 20 ++-- .../caps_3.0.0.x86_64.xml | 78 ++++++++-------- .../qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 54 +++++------ .../caps_3.1.0.x86_64.xml | 82 ++++++++--------- .../caps_4.0.0.aarch64.xml | 74 +++++++-------- .../qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 56 +++++------ .../qemucapabilitiesdata/caps_4.0.0.s390x.xml | 24 ++--- .../caps_4.0.0.x86_64.xml | 82 ++++++++--------- .../caps_4.1.0.x86_64.xml | 88 +++++++++--------- .../caps_4.2.0.aarch64.xml | 74 +++++++-------- .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 62 ++++++------- .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 28 +++--- .../caps_4.2.0.x86_64.xml | 92 +++++++++---------- 41 files changed, 1000 insertions(+), 1000 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index b21aadf864..0a00f2c361 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -550,7 +550,9 @@ VIR_ENUM_IMPL(virQEMUCaps, ); -struct virQEMUCapsMachineType { +typedef struct _virQEMUCapsMachineType virQEMUCapsMachineType; +typedef virQEMUCapsMachineType *virQEMUCapsMachineTypePtr; +struct _virQEMUCapsMachineType { char *name; char *alias; unsigned int maxCpus; @@ -616,7 +618,7 @@ struct _virQEMUCaps { virHashTablePtr domCapsCache; size_t nmachineTypes; - struct virQEMUCapsMachineType *machineTypes; + virQEMUCapsMachineTypePtr machineTypes; size_t ngicCapabilities; virGICCapability *gicCapabilities; @@ -734,7 +736,7 @@ static void virQEMUCapsSetDefaultMachine(virQEMUCapsPtr qemuCaps, size_t defIdx) { - struct virQEMUCapsMachineType tmp = qemuCaps->machineTypes[defIdx]; + virQEMUCapsMachineType tmp = qemuCaps->machineTypes[defIdx]; memmove(qemuCaps->machineTypes + 1, qemuCaps->machineTypes, @@ -2387,7 +2389,7 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, goto cleanup; for (i = 0; i < nmachines; i++) { - struct virQEMUCapsMachineType *mach; + virQEMUCapsMachineTypePtr mach; if (STREQ(machines[i]->name, "none")) continue; -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:37PM +0100, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

The function copies machine type data from one QEMU caps structure to another. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 0a00f2c361..9376cad6d0 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1689,6 +1689,25 @@ virQEMUCapsSEVInfoCopy(virSEVCapabilityPtr *dst, } +static void +virQEMUCapsCopyMachineTypes(virQEMUCapsPtr dst, + virQEMUCapsPtr src) +{ + size_t i; + + dst->machineTypes = g_new0(virQEMUCapsMachineType, src->nmachineTypes); + + dst->nmachineTypes = src->nmachineTypes; + for (i = 0; i < src->nmachineTypes; i++) { + dst->machineTypes[i].name = g_strdup(src->machineTypes[i].name); + dst->machineTypes[i].alias = g_strdup(src->machineTypes[i].alias); + dst->machineTypes[i].maxCpus = src->machineTypes[i].maxCpus; + dst->machineTypes[i].hotplugCpus = src->machineTypes[i].hotplugCpus; + dst->machineTypes[i].qemuDefault = src->machineTypes[i].qemuDefault; + } +} + + static int virQEMUCapsAccelCopy(virQEMUCapsAccelPtr dst, virQEMUCapsAccelPtr src) @@ -1732,17 +1751,7 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) virQEMUCapsAccelCopy(&ret->tcg, &qemuCaps->tcg) < 0) goto error; - if (VIR_ALLOC_N(ret->machineTypes, qemuCaps->nmachineTypes) < 0) - goto error; - ret->nmachineTypes = qemuCaps->nmachineTypes; - for (i = 0; i < qemuCaps->nmachineTypes; i++) { - ret->machineTypes[i].name = g_strdup(qemuCaps->machineTypes[i].name); - ret->machineTypes[i].alias = g_strdup(qemuCaps->machineTypes[i].alias); - ret->machineTypes[i].maxCpus = qemuCaps->machineTypes[i].maxCpus; - ret->machineTypes[i].hotplugCpus = qemuCaps->machineTypes[i].hotplugCpus; - ret->machineTypes[i].qemuDefault = qemuCaps->machineTypes[i].qemuDefault; - - } + virQEMUCapsCopyMachineTypes(ret, qemuCaps); if (VIR_ALLOC_N(ret->gicCapabilities, qemuCaps->ngicCapabilities) < 0) goto error; -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:38PM +0100, Jiri Denemark wrote:
The function copies machine type data from one QEMU caps structure to another.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
src/qemu/qemu_capabilities.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Some specifics of machine types may depend on the accelerator and thus the data should be moved to virQEMUCapsAccel. The TCG machine types are just copied from the ones probed for KVM to simplify the changes to qemucapabilitiestest data files. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 190 +++++++++------- .../caps_1.5.3.x86_64.xml | 45 ++-- .../caps_1.6.0.x86_64.xml | 51 +++-- .../caps_1.7.0.x86_64.xml | 57 +++-- .../caps_2.1.1.x86_64.xml | 69 ++++-- .../caps_2.10.0.aarch64.xml | 153 ++++++++----- .../caps_2.10.0.ppc64.xml | 63 ++++-- .../caps_2.10.0.s390x.xml | 21 +- .../caps_2.10.0.x86_64.xml | 105 ++++++--- .../caps_2.11.0.s390x.xml | 24 +- .../caps_2.11.0.x86_64.xml | 105 ++++++--- .../caps_2.12.0.aarch64.xml | 171 +++++++++----- .../caps_2.12.0.ppc64.xml | 75 ++++--- .../caps_2.12.0.s390x.xml | 27 ++- .../caps_2.12.0.x86_64.xml | 111 ++++++--- .../caps_2.4.0.x86_64.xml | 87 +++++--- .../caps_2.5.0.x86_64.xml | 93 +++++--- .../caps_2.6.0.aarch64.xml | 123 ++++++---- .../qemucapabilitiesdata/caps_2.6.0.ppc64.xml | 45 ++-- .../caps_2.6.0.x86_64.xml | 75 ++++--- .../qemucapabilitiesdata/caps_2.7.0.s390x.xml | 12 +- .../caps_2.7.0.x86_64.xml | 81 ++++--- .../qemucapabilitiesdata/caps_2.8.0.s390x.xml | 15 +- .../caps_2.8.0.x86_64.xml | 93 +++++--- .../qemucapabilitiesdata/caps_2.9.0.ppc64.xml | 60 +++-- .../qemucapabilitiesdata/caps_2.9.0.s390x.xml | 18 +- .../caps_2.9.0.x86_64.xml | 99 ++++++--- .../qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 78 ++++--- .../caps_3.0.0.riscv32.xml | 10 +- .../caps_3.0.0.riscv64.xml | 10 +- .../qemucapabilitiesdata/caps_3.0.0.s390x.xml | 30 ++- .../caps_3.0.0.x86_64.xml | 117 ++++++---- .../qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 81 ++++--- .../caps_3.1.0.x86_64.xml | 123 ++++++---- .../caps_4.0.0.aarch64.xml | 198 +++++++++++------ .../qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 84 ++++--- .../caps_4.0.0.riscv32.xml | 10 +- .../caps_4.0.0.riscv64.xml | 10 +- .../qemucapabilitiesdata/caps_4.0.0.s390x.xml | 36 ++- .../caps_4.0.0.x86_64.xml | 123 ++++++---- .../caps_4.1.0.x86_64.xml | 132 +++++++---- .../caps_4.2.0.aarch64.xml | 210 ++++++++++++------ .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 93 +++++--- .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 42 ++-- .../caps_4.2.0.x86_64.xml | 138 ++++++++---- 45 files changed, 2372 insertions(+), 1221 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 9376cad6d0..d2f307f6a9 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -581,6 +581,8 @@ struct _virQEMUCapsHostCPUData { typedef struct _virQEMUCapsAccel virQEMUCapsAccel; typedef virQEMUCapsAccel *virQEMUCapsAccelPtr; struct _virQEMUCapsAccel { + size_t nmachineTypes; + virQEMUCapsMachineTypePtr machineTypes; virQEMUCapsHostCPUData hostCPU; qemuMonitorCPUDefsPtr cpuModels; }; @@ -617,9 +619,6 @@ struct _virQEMUCaps { virHashTablePtr domCapsCache; - size_t nmachineTypes; - virQEMUCapsMachineTypePtr machineTypes; - size_t ngicCapabilities; virGICCapability *gicCapabilities; @@ -733,16 +732,16 @@ virQEMUCapsGetAccel(virQEMUCapsPtr qemuCaps, static void -virQEMUCapsSetDefaultMachine(virQEMUCapsPtr qemuCaps, +virQEMUCapsSetDefaultMachine(virQEMUCapsAccelPtr caps, size_t defIdx) { - virQEMUCapsMachineType tmp = qemuCaps->machineTypes[defIdx]; + virQEMUCapsMachineType tmp = caps->machineTypes[defIdx]; - memmove(qemuCaps->machineTypes + 1, - qemuCaps->machineTypes, - sizeof(qemuCaps->machineTypes[0]) * defIdx); + memmove(caps->machineTypes + 1, + caps->machineTypes, + sizeof(caps->machineTypes[0]) * defIdx); - qemuCaps->machineTypes[0] = tmp; + caps->machineTypes[0] = tmp; } @@ -840,26 +839,34 @@ virQEMUCapsGetMachineTypesCaps(virQEMUCapsPtr qemuCaps, virCapsGuestMachinePtr **machines) { size_t i; + virQEMUCapsAccelPtr accel; + + /* Guest capabilities do not report TCG vs. KVM caps separately. We just + * take the set of machine types we probed first. */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) + accel = &qemuCaps->kvm; + else + accel = &qemuCaps->tcg; *machines = NULL; - *nmachines = qemuCaps->nmachineTypes; + *nmachines = accel->nmachineTypes; if (*nmachines && - VIR_ALLOC_N(*machines, qemuCaps->nmachineTypes) < 0) + VIR_ALLOC_N(*machines, accel->nmachineTypes) < 0) goto error; - for (i = 0; i < qemuCaps->nmachineTypes; i++) { + for (i = 0; i < accel->nmachineTypes; i++) { virCapsGuestMachinePtr mach; if (VIR_ALLOC(mach) < 0) goto error; (*machines)[i] = mach; - if (qemuCaps->machineTypes[i].alias) { - mach->name = g_strdup(qemuCaps->machineTypes[i].alias); - mach->canonical = g_strdup(qemuCaps->machineTypes[i].name); + if (accel->machineTypes[i].alias) { + mach->name = g_strdup(accel->machineTypes[i].alias); + mach->canonical = g_strdup(accel->machineTypes[i].name); } else { - mach->name = g_strdup(qemuCaps->machineTypes[i].name); + mach->name = g_strdup(accel->machineTypes[i].name); } - mach->maxCpus = qemuCaps->machineTypes[i].maxCpus; + mach->maxCpus = accel->machineTypes[i].maxCpus; } /* Make sure all canonical machine types also have their own entry so that @@ -1690,8 +1697,8 @@ virQEMUCapsSEVInfoCopy(virSEVCapabilityPtr *dst, static void -virQEMUCapsCopyMachineTypes(virQEMUCapsPtr dst, - virQEMUCapsPtr src) +virQEMUCapsAccelCopyMachineTypes(virQEMUCapsAccelPtr dst, + virQEMUCapsAccelPtr src) { size_t i; @@ -1712,6 +1719,8 @@ static int virQEMUCapsAccelCopy(virQEMUCapsAccelPtr dst, virQEMUCapsAccelPtr src) { + virQEMUCapsAccelCopyMachineTypes(dst, src); + if (virQEMUCapsHostCPUDataCopy(&dst->hostCPU, &src->hostCPU) < 0) return -1; @@ -1751,8 +1760,6 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) virQEMUCapsAccelCopy(&ret->tcg, &qemuCaps->tcg) < 0) goto error; - virQEMUCapsCopyMachineTypes(ret, qemuCaps); - if (VIR_ALLOC_N(ret->gicCapabilities, qemuCaps->ngicCapabilities) < 0) goto error; ret->ngicCapabilities = qemuCaps->ngicCapabilities; @@ -1775,6 +1782,14 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) static void virQEMUCapsAccelClear(virQEMUCapsAccelPtr caps) { + size_t i; + + for (i = 0; i < caps->nmachineTypes; i++) { + VIR_FREE(caps->machineTypes[i].name); + VIR_FREE(caps->machineTypes[i].alias); + } + VIR_FREE(caps->machineTypes); + virQEMUCapsHostCPUDataClear(&caps->hostCPU); virObjectUnref(caps->cpuModels); } @@ -1783,13 +1798,6 @@ virQEMUCapsAccelClear(virQEMUCapsAccelPtr caps) void virQEMUCapsDispose(void *obj) { virQEMUCapsPtr qemuCaps = obj; - size_t i; - - for (i = 0; i < qemuCaps->nmachineTypes; i++) { - VIR_FREE(qemuCaps->machineTypes[i].name); - VIR_FREE(qemuCaps->machineTypes[i].alias); - } - VIR_FREE(qemuCaps->machineTypes); virHashFree(qemuCaps->domCapsCache); virBitmapFree(qemuCaps->flags); @@ -2119,19 +2127,22 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, */ const char * virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps, - virDomainVirtType virtType G_GNUC_UNUSED, + virDomainVirtType virtType, const char *name) { + virQEMUCapsAccelPtr accel; size_t i; if (!name || !qemuCaps) return name; - for (i = 0; i < qemuCaps->nmachineTypes; i++) { - if (!qemuCaps->machineTypes[i].alias) + accel = virQEMUCapsGetAccel(qemuCaps, virtType); + + for (i = 0; i < accel->nmachineTypes; i++) { + if (!accel->machineTypes[i].alias) continue; - if (STREQ(qemuCaps->machineTypes[i].alias, name)) - return qemuCaps->machineTypes[i].name; + if (STREQ(accel->machineTypes[i].alias, name)) + return accel->machineTypes[i].name; } return name; @@ -2140,19 +2151,22 @@ virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps, int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, - virDomainVirtType virtType G_GNUC_UNUSED, + virDomainVirtType virtType, const char *name) { + virQEMUCapsAccelPtr accel; size_t i; if (!name) return 0; - for (i = 0; i < qemuCaps->nmachineTypes; i++) { - if (!qemuCaps->machineTypes[i].maxCpus) + accel = virQEMUCapsGetAccel(qemuCaps, virtType); + + for (i = 0; i < accel->nmachineTypes; i++) { + if (!accel->machineTypes[i].maxCpus) continue; - if (STREQ(qemuCaps->machineTypes[i].name, name)) - return qemuCaps->machineTypes[i].maxCpus; + if (STREQ(accel->machineTypes[i].name, name)) + return accel->machineTypes[i].maxCpus; } return 0; @@ -2161,14 +2175,17 @@ virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, bool virQEMUCapsGetMachineHotplugCpus(virQEMUCapsPtr qemuCaps, - virDomainVirtType virtType G_GNUC_UNUSED, + virDomainVirtType virtType, const char *name) { + virQEMUCapsAccelPtr accel; size_t i; - for (i = 0; i < qemuCaps->nmachineTypes; i++) { - if (STREQ_NULLABLE(qemuCaps->machineTypes[i].name, name)) - return qemuCaps->machineTypes[i].hotplugCpus; + accel = virQEMUCapsGetAccel(qemuCaps, virtType); + + for (i = 0; i < accel->nmachineTypes; i++) { + if (STREQ_NULLABLE(accel->machineTypes[i].name, name)) + return accel->machineTypes[i].hotplugCpus; } return false; @@ -2381,6 +2398,7 @@ verify(G_N_ELEMENTS(preferredMachines) == VIR_ARCH_LAST); static int virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, + virQEMUCapsAccelPtr accel, qemuMonitorPtr mon) { qemuMonitorMachineInfoPtr *machines = NULL; @@ -2394,7 +2412,7 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, if ((nmachines = qemuMonitorGetMachines(mon, &machines)) < 0) return -1; - if (VIR_ALLOC_N(qemuCaps->machineTypes, nmachines) < 0) + if (VIR_ALLOC_N(accel->machineTypes, nmachines) < 0) goto cleanup; for (i = 0; i < nmachines; i++) { @@ -2402,7 +2420,7 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, if (STREQ(machines[i]->name, "none")) continue; - mach = &(qemuCaps->machineTypes[qemuCaps->nmachineTypes++]); + mach = &(accel->machineTypes[accel->nmachineTypes++]); mach->alias = g_strdup(machines[i]->alias); mach->name = g_strdup(machines[i]->name); @@ -2413,12 +2431,12 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, if (preferredMachine && (STREQ_NULLABLE(mach->alias, preferredMachine) || STREQ(mach->name, preferredMachine))) { - preferredIdx = qemuCaps->nmachineTypes - 1; + preferredIdx = accel->nmachineTypes - 1; } if (machines[i]->isDefault) { mach->qemuDefault = true; - defIdx = qemuCaps->nmachineTypes - 1; + defIdx = accel->nmachineTypes - 1; } } @@ -2434,7 +2452,7 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, if (preferredIdx == -1) preferredIdx = defIdx; if (preferredIdx != -1) - virQEMUCapsSetDefaultMachine(qemuCaps, preferredIdx); + virQEMUCapsSetDefaultMachine(accel, preferredIdx); ret = 0; @@ -2448,13 +2466,14 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, static bool virQEMUCapsIsMachineSupported(virQEMUCapsPtr qemuCaps, - virDomainVirtType virtType G_GNUC_UNUSED, + virDomainVirtType virtType, const char *canonical_machine) { + virQEMUCapsAccelPtr accel = virQEMUCapsGetAccel(qemuCaps, virtType); size_t i; - for (i = 0; i < qemuCaps->nmachineTypes; i++) { - if (STREQ(canonical_machine, qemuCaps->machineTypes[i].name)) + for (i = 0; i < accel->nmachineTypes; i++) { + if (STREQ(canonical_machine, accel->machineTypes[i].name)) return true; } return false; @@ -3574,15 +3593,17 @@ virQEMUCapsLoadCPUModels(virQEMUCapsAccelPtr caps, static int -virQEMUCapsLoadMachines(virQEMUCapsPtr qemuCaps, - xmlXPathContextPtr ctxt) +virQEMUCapsLoadMachines(virQEMUCapsAccelPtr caps, + xmlXPathContextPtr ctxt, + const char *typeStr) { + g_autofree char *xpath = g_strdup_printf("./machine[@type='%s']", typeStr); g_autofree xmlNodePtr *nodes = NULL; char *str = NULL; size_t i; int n; - if ((n = virXPathNodeSet("./machine", ctxt, &nodes)) < 0) { + if ((n = virXPathNodeSet(xpath, ctxt, &nodes)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to parse qemu capabilities machines")); return -1; @@ -3591,21 +3612,21 @@ virQEMUCapsLoadMachines(virQEMUCapsPtr qemuCaps, if (n == 0) return 0; - qemuCaps->nmachineTypes = n; - if (VIR_ALLOC_N(qemuCaps->machineTypes, qemuCaps->nmachineTypes) < 0) + caps->nmachineTypes = n; + if (VIR_ALLOC_N(caps->machineTypes, caps->nmachineTypes) < 0) return -1; for (i = 0; i < n; i++) { - if (!(qemuCaps->machineTypes[i].name = virXMLPropString(nodes[i], "name"))) { + if (!(caps->machineTypes[i].name = virXMLPropString(nodes[i], "name"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing machine name in QEMU capabilities cache")); return -1; } - qemuCaps->machineTypes[i].alias = virXMLPropString(nodes[i], "alias"); + caps->machineTypes[i].alias = virXMLPropString(nodes[i], "alias"); str = virXMLPropString(nodes[i], "maxCpus"); if (str && - virStrToLong_ui(str, NULL, 10, &(qemuCaps->machineTypes[i].maxCpus)) < 0) { + virStrToLong_ui(str, NULL, 10, &(caps->machineTypes[i].maxCpus)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("malformed machine cpu count in QEMU capabilities cache")); return -1; @@ -3614,12 +3635,12 @@ virQEMUCapsLoadMachines(virQEMUCapsPtr qemuCaps, str = virXMLPropString(nodes[i], "hotplugCpus"); if (STREQ_NULLABLE(str, "yes")) - qemuCaps->machineTypes[i].hotplugCpus = true; + caps->machineTypes[i].hotplugCpus = true; VIR_FREE(str); str = virXMLPropString(nodes[i], "default"); if (STREQ_NULLABLE(str, "yes")) - qemuCaps->machineTypes[i].qemuDefault = true; + caps->machineTypes[i].qemuDefault = true; VIR_FREE(str); } @@ -3641,6 +3662,9 @@ virQEMUCapsLoadAccel(virQEMUCapsPtr qemuCaps, if (virQEMUCapsLoadCPUModels(caps, ctxt, typeStr) < 0) return -1; + if (virQEMUCapsLoadMachines(caps, ctxt, typeStr) < 0) + return -1; + return 0; } @@ -3860,9 +3884,6 @@ virQEMUCapsLoadCache(virArch hostArch, virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_QEMU) < 0) goto cleanup; - if (virQEMUCapsLoadMachines(qemuCaps, ctxt) < 0) - goto cleanup; - if ((n = virXPathNodeSet("./gic", ctxt, &nodes)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to parse qemu capabilities gic")); @@ -4043,21 +4064,23 @@ virQEMUCapsFormatCPUModels(virQEMUCapsAccelPtr caps, static void -virQEMUCapsFormatMachines(virQEMUCapsPtr qemuCaps, - virBufferPtr buf) +virQEMUCapsFormatMachines(virQEMUCapsAccelPtr caps, + virBufferPtr buf, + const char *typeStr) { size_t i; - for (i = 0; i < qemuCaps->nmachineTypes; i++) { - virBufferEscapeString(buf, "<machine name='%s'", - qemuCaps->machineTypes[i].name); + for (i = 0; i < caps->nmachineTypes; i++) { + virBufferAsprintf(buf, "<machine type='%s'", typeStr); + virBufferEscapeString(buf, " name='%s'", + caps->machineTypes[i].name); virBufferEscapeString(buf, " alias='%s'", - qemuCaps->machineTypes[i].alias); - if (qemuCaps->machineTypes[i].hotplugCpus) + caps->machineTypes[i].alias); + if (caps->machineTypes[i].hotplugCpus) virBufferAddLit(buf, " hotplugCpus='yes'"); virBufferAsprintf(buf, " maxCpus='%u'", - qemuCaps->machineTypes[i].maxCpus); - if (qemuCaps->machineTypes[i].qemuDefault) + caps->machineTypes[i].maxCpus); + if (caps->machineTypes[i].qemuDefault) virBufferAddLit(buf, " default='yes'"); virBufferAddLit(buf, "/>\n"); } @@ -4074,6 +4097,8 @@ virQEMUCapsFormatAccel(virQEMUCapsPtr qemuCaps, virQEMUCapsFormatHostCPUModelInfo(caps, buf, typeStr); virQEMUCapsFormatCPUModels(caps, buf, typeStr); + virQEMUCapsFormatMachines(caps, buf, typeStr); + } @@ -4140,8 +4165,6 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps) virArchToString(qemuCaps->arch)); virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM); - virQEMUCapsFormatMachines(qemuCaps, &buf); - virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU); for (i = 0; i < qemuCaps->ngicCapabilities; i++) { @@ -4658,7 +4681,7 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, return -1; if (virQEMUCapsProbeQMPDevices(qemuCaps, mon) < 0) return -1; - if (virQEMUCapsProbeQMPMachineTypes(qemuCaps, mon) < 0) + if (virQEMUCapsProbeQMPMachineTypes(qemuCaps, accel, mon) < 0) return -1; if (virQEMUCapsProbeQMPMachineProps(qemuCaps, type, mon) < 0) return -1; @@ -4701,6 +4724,8 @@ virQEMUCapsInitQMPMonitorTCG(virQEMUCapsPtr qemuCaps, if (virQEMUCapsProbeQMPHostCPU(qemuCaps, accel, mon, VIR_DOMAIN_VIRT_QEMU) < 0) return -1; + virQEMUCapsAccelCopyMachineTypes(&qemuCaps->tcg, &qemuCaps->kvm); + return 0; } @@ -5213,11 +5238,13 @@ virQEMUCapsSupportsVmport(virQEMUCapsPtr qemuCaps, */ const char * virQEMUCapsGetPreferredMachine(virQEMUCapsPtr qemuCaps, - virDomainVirtType virtType G_GNUC_UNUSED) + virDomainVirtType virtType) { - if (!qemuCaps->nmachineTypes) + virQEMUCapsAccelPtr accel = virQEMUCapsGetAccel(qemuCaps, virtType); + + if (!accel->nmachineTypes) return NULL; - return qemuCaps->machineTypes[0].name; + return accel->machineTypes[0].name; } @@ -5730,6 +5757,9 @@ virQEMUCapsStripMachineAliases(virQEMUCapsPtr qemuCaps) { size_t i; - for (i = 0; i < qemuCaps->nmachineTypes; i++) - VIR_FREE(qemuCaps->machineTypes[i].alias); + for (i = 0; i < qemuCaps->kvm.nmachineTypes; i++) + VIR_FREE(qemuCaps->kvm.machineTypes[i].alias); + + for (i = 0; i < qemuCaps->tcg.nmachineTypes; i++) + VIR_FREE(qemuCaps->tcg.machineTypes[i].alias); } diff --git a/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml index a62a5534b8..3ee25a7ea7 100644 --- a/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml @@ -112,21 +112,21 @@ <cpu type='kvm' name='core2duo'/> <cpu type='kvm' name='phenom'/> <cpu type='kvm' name='qemu64'/> - <machine name='pc-i440fx-1.5' alias='pc' maxCpus='255' default='yes'/> - <machine name='pc-q35-1.4' maxCpus='255'/> - <machine name='pc-q35-1.5' alias='q35' maxCpus='255'/> - <machine name='isapc' maxCpus='1'/> - <machine name='pc-0.10' maxCpus='255'/> - <machine name='pc-0.11' maxCpus='255'/> - <machine name='pc-0.12' maxCpus='255'/> - <machine name='pc-0.13' maxCpus='255'/> - <machine name='pc-0.14' maxCpus='255'/> - <machine name='pc-0.15' maxCpus='255'/> - <machine name='pc-1.0' maxCpus='255'/> - <machine name='pc-1.1' maxCpus='255'/> - <machine name='pc-1.2' maxCpus='255'/> - <machine name='pc-1.3' maxCpus='255'/> - <machine name='pc-i440fx-1.4' maxCpus='255'/> + <machine type='kvm' name='pc-i440fx-1.5' alias='pc' maxCpus='255' default='yes'/> + <machine type='kvm' name='pc-q35-1.4' maxCpus='255'/> + <machine type='kvm' name='pc-q35-1.5' alias='q35' maxCpus='255'/> + <machine type='kvm' name='isapc' maxCpus='1'/> + <machine type='kvm' name='pc-0.10' maxCpus='255'/> + <machine type='kvm' name='pc-0.11' maxCpus='255'/> + <machine type='kvm' name='pc-0.12' maxCpus='255'/> + <machine type='kvm' name='pc-0.13' maxCpus='255'/> + <machine type='kvm' name='pc-0.14' maxCpus='255'/> + <machine type='kvm' name='pc-0.15' maxCpus='255'/> + <machine type='kvm' name='pc-1.0' maxCpus='255'/> + <machine type='kvm' name='pc-1.1' maxCpus='255'/> + <machine type='kvm' name='pc-1.2' maxCpus='255'/> + <machine type='kvm' name='pc-1.3' maxCpus='255'/> + <machine type='kvm' name='pc-i440fx-1.4' maxCpus='255'/> <cpu type='tcg' name='Opteron_G5'/> <cpu type='tcg' name='Opteron_G4'/> <cpu type='tcg' name='Opteron_G3'/> @@ -151,4 +151,19 @@ <cpu type='tcg' name='core2duo'/> <cpu type='tcg' name='phenom'/> <cpu type='tcg' name='qemu64'/> + <machine type='tcg' name='pc-i440fx-1.5' alias='pc' maxCpus='255' default='yes'/> + <machine type='tcg' name='pc-q35-1.4' maxCpus='255'/> + <machine type='tcg' name='pc-q35-1.5' alias='q35' maxCpus='255'/> + <machine type='tcg' name='isapc' maxCpus='1'/> + <machine type='tcg' name='pc-0.10' maxCpus='255'/> + <machine type='tcg' name='pc-0.11' maxCpus='255'/> + <machine type='tcg' name='pc-0.12' maxCpus='255'/> + <machine type='tcg' name='pc-0.13' maxCpus='255'/> + <machine type='tcg' name='pc-0.14' maxCpus='255'/> + <machine type='tcg' name='pc-0.15' maxCpus='255'/> + <machine type='tcg' name='pc-1.0' maxCpus='255'/> + <machine type='tcg' name='pc-1.1' maxCpus='255'/> + <machine type='tcg' name='pc-1.2' maxCpus='255'/> + <machine type='tcg' name='pc-1.3' maxCpus='255'/> + <machine type='tcg' name='pc-i440fx-1.4' maxCpus='255'/> </qemuCaps> ...

On Tue, Nov 05, 2019 at 02:27:39PM +0100, Jiri Denemark wrote:
Some specifics of machine types may depend on the accelerator and thus the data should be moved to virQEMUCapsAccel. The TCG machine types are just copied from the ones probed for KVM to simplify the changes to qemucapabilitiestest data files.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Almost all TCG query-machines replies match KVM. The only exceptions are 4.2.0 replies on s390x which differ in the reported default CPU type. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch src/qemu/qemu_capabilities.c | 3 +- .../caps_1.5.3.x86_64.replies | 78 +++ .../caps_1.6.0.x86_64.replies | 86 +++ .../caps_1.7.0.x86_64.replies | 94 +++ .../caps_2.1.1.x86_64.replies | 110 ++++ .../caps_2.10.0.aarch64.replies | 272 +++++++++ .../caps_2.10.0.ppc64.replies | 123 ++++ .../caps_2.10.0.s390x.replies | 53 ++ .../caps_2.10.0.x86_64.replies | 194 ++++++ .../caps_2.11.0.s390x.replies | 58 ++ .../caps_2.11.0.x86_64.replies | 194 ++++++ .../caps_2.12.0.aarch64.replies | 302 ++++++++++ .../caps_2.12.0.ppc64.replies | 143 +++++ .../caps_2.12.0.s390x.replies | 63 ++ .../caps_2.12.0.x86_64.replies | 204 +++++++ .../caps_2.4.0.x86_64.replies | 134 +++++ .../caps_2.5.0.x86_64.replies | 142 +++++ .../caps_2.6.0.aarch64.replies | 180 ++++++ .../caps_2.6.0.ppc64.replies | 77 +++ .../caps_2.6.0.x86_64.replies | 118 ++++ .../caps_2.7.0.s390x.replies | 38 ++ .../caps_2.7.0.x86_64.replies | 154 +++++ .../caps_2.8.0.s390x.replies | 43 ++ .../caps_2.8.0.x86_64.replies | 174 ++++++ .../caps_2.9.0.ppc64.replies | 118 ++++ .../caps_2.9.0.s390x.replies | 48 ++ .../caps_2.9.0.x86_64.replies | 184 ++++++ .../caps_3.0.0.ppc64.replies | 148 +++++ .../caps_3.0.0.riscv32.replies | 42 ++ .../caps_3.0.0.riscv64.replies | 42 ++ .../caps_3.0.0.s390x.replies | 68 +++ .../caps_3.0.0.x86_64.replies | 214 +++++++ .../caps_3.1.0.ppc64.replies | 153 +++++ .../caps_3.1.0.x86_64.replies | 224 +++++++ .../caps_4.0.0.aarch64.replies | 347 +++++++++++ .../caps_4.0.0.ppc64.replies | 158 +++++ .../caps_4.0.0.riscv32.replies | 42 ++ .../caps_4.0.0.riscv64.replies | 42 ++ .../caps_4.0.0.s390x.replies | 78 +++ .../caps_4.0.0.x86_64.replies | 224 +++++++ .../caps_4.1.0.x86_64.replies | 329 +++++++++++ .../caps_4.2.0.aarch64.replies | 556 ++++++++++++++++++ .../caps_4.2.0.ppc64.replies | 267 +++++++++ .../caps_4.2.0.s390x.replies | 132 +++++ .../caps_4.2.0.x86_64.replies | 389 ++++++++++++ 45 files changed, 6841 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index d2f307f6a9..1dedcbe5ad 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -4724,7 +4724,8 @@ virQEMUCapsInitQMPMonitorTCG(virQEMUCapsPtr qemuCaps, if (virQEMUCapsProbeQMPHostCPU(qemuCaps, accel, mon, VIR_DOMAIN_VIRT_QEMU) < 0) return -1; - virQEMUCapsAccelCopyMachineTypes(&qemuCaps->tcg, &qemuCaps->kvm); + if (virQEMUCapsProbeQMPMachineTypes(qemuCaps, accel, mon) < 0) + return -1; return 0; } diff --git a/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.replies b/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.replies index a62b4e98f4..e74273e0d3 100644 --- a/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.replies @@ -3145,3 +3145,81 @@ ], "id": "libvirt-2" } + +{ + "execute": "query-machines", + "id": "libvirt-3" +} + +{ + "return": [ + { + "name": "pc-q35-1.4", + "cpu-max": 255 + }, + { + "name": "pc-q35-1.5", + "cpu-max": 255, + "alias": "q35" + }, + { + "name": "isapc", + "cpu-max": 1 + }, + { + "name": "pc-0.10", + "cpu-max": 255 + }, + { + "name": "pc-0.11", + "cpu-max": 255 + }, + { + "name": "pc-0.12", + "cpu-max": 255 + }, + { + "name": "pc-0.13", + "cpu-max": 255 + }, + { + "name": "pc-0.14", + "cpu-max": 255 + }, + { + "name": "pc-0.15", + "cpu-max": 255 + }, + { + "name": "pc-1.0", + "cpu-max": 255 + }, + { + "name": "pc-1.1", + "cpu-max": 255 + }, + { + "name": "pc-1.2", + "cpu-max": 255 + }, + { + "name": "pc-1.3", + "cpu-max": 255 + }, + { + "name": "pc-i440fx-1.4", + "cpu-max": 255 + }, + { + "name": "pc-i440fx-1.5", + "is-default": true, + "cpu-max": 255, + "alias": "pc" + }, + { + "name": "none", + "cpu-max": 1 + } + ], + "id": "libvirt-3" +} ...

On Tue, Nov 05, 2019 at 02:27:40PM +0100, Jiri Denemark wrote:
Almost all TCG query-machines replies match KVM. The only exceptions are 4.2.0 replies on s390x which differ in the reported default CPU type.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

QEMU 4.2.0 will report default CPU types used by each machine type and we will want to start using it. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - no change except for updated test results Version 3: - TCG and KVM are probed separately now src/qemu/qemu_capabilities.c | 8 + src/qemu/qemu_monitor.c | 1 + src/qemu/qemu_monitor.h | 1 + src/qemu/qemu_monitor_json.c | 12 ++ .../caps_4.2.0.aarch64.xml | 188 +++++++++--------- .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 116 +++++------ .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 56 +++--- .../caps_4.2.0.x86_64.xml | 184 ++++++++--------- 8 files changed, 294 insertions(+), 272 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 1dedcbe5ad..dc2723d025 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -558,6 +558,7 @@ struct _virQEMUCapsMachineType { unsigned int maxCpus; bool hotplugCpus; bool qemuDefault; + char *defaultCPU; }; typedef struct _virQEMUCapsHostCPUData virQEMUCapsHostCPUData; @@ -1708,6 +1709,7 @@ virQEMUCapsAccelCopyMachineTypes(virQEMUCapsAccelPtr dst, for (i = 0; i < src->nmachineTypes; i++) { dst->machineTypes[i].name = g_strdup(src->machineTypes[i].name); dst->machineTypes[i].alias = g_strdup(src->machineTypes[i].alias); + dst->machineTypes[i].defaultCPU = g_strdup(src->machineTypes[i].defaultCPU); dst->machineTypes[i].maxCpus = src->machineTypes[i].maxCpus; dst->machineTypes[i].hotplugCpus = src->machineTypes[i].hotplugCpus; dst->machineTypes[i].qemuDefault = src->machineTypes[i].qemuDefault; @@ -1787,6 +1789,7 @@ virQEMUCapsAccelClear(virQEMUCapsAccelPtr caps) for (i = 0; i < caps->nmachineTypes; i++) { VIR_FREE(caps->machineTypes[i].name); VIR_FREE(caps->machineTypes[i].alias); + VIR_FREE(caps->machineTypes[i].defaultCPU); } VIR_FREE(caps->machineTypes); @@ -2424,6 +2427,7 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, mach->alias = g_strdup(machines[i]->alias); mach->name = g_strdup(machines[i]->name); + mach->defaultCPU = g_strdup(machines[i]->defaultCPU); mach->maxCpus = machines[i]->maxCpus; mach->hotplugCpus = machines[i]->hotplugCpus; @@ -3642,6 +3646,8 @@ virQEMUCapsLoadMachines(virQEMUCapsAccelPtr caps, if (STREQ_NULLABLE(str, "yes")) caps->machineTypes[i].qemuDefault = true; VIR_FREE(str); + + caps->machineTypes[i].defaultCPU = virXMLPropString(nodes[i], "defaultCPU"); } return 0; @@ -4082,6 +4088,8 @@ virQEMUCapsFormatMachines(virQEMUCapsAccelPtr caps, caps->machineTypes[i].maxCpus); if (caps->machineTypes[i].qemuDefault) virBufferAddLit(buf, " default='yes'"); + virBufferEscapeString(buf, " defaultCPU='%s'", + caps->machineTypes[i].defaultCPU); virBufferAddLit(buf, "/>\n"); } } diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index a1cdb19318..1f07b2aeae 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3547,6 +3547,7 @@ qemuMonitorMachineInfoFree(qemuMonitorMachineInfoPtr machine) return; VIR_FREE(machine->name); VIR_FREE(machine->alias); + VIR_FREE(machine->defaultCPU); VIR_FREE(machine); } diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 824b580344..912ff15738 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1096,6 +1096,7 @@ struct _qemuMonitorMachineInfo { char *alias; unsigned int maxCpus; bool hotplugCpus; + char *defaultCPU; }; int qemuMonitorGetMachines(qemuMonitorPtr mon, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 3f3bfc1720..1680e3a5fe 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -5555,6 +5555,18 @@ int qemuMonitorJSONGetMachines(qemuMonitorPtr mon, ignore_value(virJSONValueObjectGetBoolean(child, "hotpluggable-cpus", &info->hotplugCpus)); + + if (virJSONValueObjectHasKey(child, "default-cpu-type")) { + if (!(tmp = virJSONValueObjectGetString(child, "default-cpu-type"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("query-machines reply has malformed " + "'default-cpu-type' data")); + goto cleanup; + } + + if (VIR_STRDUP(info->defaultCPU, tmp) < 0) + goto cleanup; + } } ret = n; diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml index 9a5bea3819..0acb9f9d66 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml @@ -209,76 +209,76 @@ <cpu type='kvm' name='arm946' typename='arm946-arm-cpu'/> <cpu type='kvm' name='pxa270-a1' typename='pxa270-a1-arm-cpu'/> <cpu type='kvm' name='pxa270' typename='pxa270-arm-cpu'/> - <machine type='kvm' name='integratorcp' maxCpus='1'/> + <machine type='kvm' name='integratorcp' maxCpus='1' defaultCPU='arm926-arm-cpu'/> <machine type='kvm' name='nuri' maxCpus='2'/> - <machine type='kvm' name='mps2-an511' maxCpus='1'/> - <machine type='kvm' name='mps2-an505' maxCpus='1'/> - <machine type='kvm' name='verdex' maxCpus='1'/> - <machine type='kvm' name='virt-3.0' maxCpus='512'/> + <machine type='kvm' name='mps2-an511' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/> + <machine type='kvm' name='mps2-an505' maxCpus='1' defaultCPU='cortex-m33-arm-cpu'/> + <machine type='kvm' name='verdex' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/> + <machine type='kvm' name='virt-3.0' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/> <machine type='kvm' name='ast2500-evb' maxCpus='2'/> <machine type='kvm' name='smdkc210' maxCpus='2'/> - <machine type='kvm' name='collie' maxCpus='1'/> + <machine type='kvm' name='collie' maxCpus='1' defaultCPU='sa1110-arm-cpu'/> <machine type='kvm' name='xlnx-versal-virt' maxCpus='2'/> <machine type='kvm' name='imx25-pdk' maxCpus='1'/> - <machine type='kvm' name='spitz' maxCpus='1'/> - <machine type='kvm' name='musca-b1' maxCpus='2'/> - <machine type='kvm' name='realview-pbx-a9' maxCpus='4'/> - <machine type='kvm' name='realview-eb' maxCpus='1'/> - <machine type='kvm' name='versatilepb' maxCpus='1'/> - <machine type='kvm' name='realview-pb-a8' maxCpus='1'/> - <machine type='kvm' name='emcraft-sf2' maxCpus='1'/> - <machine type='kvm' name='virt-2.9' maxCpus='255'/> - <machine type='kvm' name='musicpal' maxCpus='1'/> - <machine type='kvm' name='sbsa-ref' maxCpus='512'/> - <machine type='kvm' name='z2' maxCpus='1'/> - <machine type='kvm' name='akita' maxCpus='1'/> - <machine type='kvm' name='virt-2.7' maxCpus='255'/> + <machine type='kvm' name='spitz' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/> + <machine type='kvm' name='musca-b1' maxCpus='2' defaultCPU='cortex-m33-arm-cpu'/> + <machine type='kvm' name='realview-pbx-a9' maxCpus='4' defaultCPU='cortex-a9-arm-cpu'/> + <machine type='kvm' name='realview-eb' maxCpus='1' defaultCPU='arm926-arm-cpu'/> + <machine type='kvm' name='versatilepb' maxCpus='1' defaultCPU='arm926-arm-cpu'/> + <machine type='kvm' name='realview-pb-a8' maxCpus='1' defaultCPU='cortex-a8-arm-cpu'/> + <machine type='kvm' name='emcraft-sf2' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/> + <machine type='kvm' name='virt-2.9' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/> + <machine type='kvm' name='musicpal' maxCpus='1' defaultCPU='arm926-arm-cpu'/> + <machine type='kvm' name='sbsa-ref' maxCpus='512' defaultCPU='cortex-a57-arm-cpu'/> + <machine type='kvm' name='z2' maxCpus='1' defaultCPU='pxa270-c5-arm-cpu'/> + <machine type='kvm' name='akita' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/> + <machine type='kvm' name='virt-2.7' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/> <machine type='kvm' name='kzm' maxCpus='1'/> <machine type='kvm' name='swift-bmc' maxCpus='2'/> - <machine type='kvm' name='virt-2.8' maxCpus='255'/> - <machine type='kvm' name='realview-eb-mpcore' maxCpus='4'/> - <machine type='kvm' name='musca-a' maxCpus='2'/> + <machine type='kvm' name='virt-2.8' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/> + <machine type='kvm' name='realview-eb-mpcore' maxCpus='4' defaultCPU='arm11mpcore-arm-cpu'/> + <machine type='kvm' name='musca-a' maxCpus='2' defaultCPU='cortex-m33-arm-cpu'/> <machine type='kvm' name='mcimx7d-sabre' maxCpus='2'/> - <machine type='kvm' name='sx1' maxCpus='1'/> - <machine type='kvm' name='virt-4.2' alias='virt' maxCpus='512'/> - <machine type='kvm' name='sx1-v1' maxCpus='1'/> - <machine type='kvm' name='virt-2.6' maxCpus='255'/> - <machine type='kvm' name='cubieboard' maxCpus='1'/> - <machine type='kvm' name='virt-4.0' maxCpus='512'/> + <machine type='kvm' name='sx1' maxCpus='1' defaultCPU='ti925t-arm-cpu'/> + <machine type='kvm' name='virt-4.2' alias='virt' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/> + <machine type='kvm' name='sx1-v1' maxCpus='1' defaultCPU='ti925t-arm-cpu'/> + <machine type='kvm' name='virt-2.6' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/> + <machine type='kvm' name='cubieboard' maxCpus='1' defaultCPU='cortex-a9-arm-cpu'/> + <machine type='kvm' name='virt-4.0' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/> <machine type='kvm' name='highbank' maxCpus='4'/> - <machine type='kvm' name='virt-4.1' maxCpus='512'/> + <machine type='kvm' name='virt-4.1' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/> <machine type='kvm' name='raspi2' maxCpus='4'/> <machine type='kvm' name='raspi3' maxCpus='4'/> <machine type='kvm' name='netduino2' maxCpus='1'/> - <machine type='kvm' name='terrier' maxCpus='1'/> - <machine type='kvm' name='n810' maxCpus='1'/> - <machine type='kvm' name='mainstone' maxCpus='1'/> + <machine type='kvm' name='terrier' maxCpus='1' defaultCPU='pxa270-c5-arm-cpu'/> + <machine type='kvm' name='n810' maxCpus='1' defaultCPU='arm1136-r2-arm-cpu'/> + <machine type='kvm' name='mainstone' maxCpus='1' defaultCPU='pxa270-c5-arm-cpu'/> <machine type='kvm' name='palmetto-bmc' maxCpus='2'/> <machine type='kvm' name='sabrelite' maxCpus='4'/> <machine type='kvm' name='midway' maxCpus='4'/> <machine type='kvm' name='romulus-bmc' maxCpus='2'/> - <machine type='kvm' name='cheetah' maxCpus='1'/> + <machine type='kvm' name='cheetah' maxCpus='1' defaultCPU='ti925t-arm-cpu'/> <machine type='kvm' name='tosa' maxCpus='1'/> - <machine type='kvm' name='borzoi' maxCpus='1'/> - <machine type='kvm' name='versatileab' maxCpus='1'/> - <machine type='kvm' name='lm3s6965evb' maxCpus='1'/> - <machine type='kvm' name='n800' maxCpus='1'/> - <machine type='kvm' name='virt-2.10' maxCpus='255'/> - <machine type='kvm' name='virt-2.11' maxCpus='255'/> + <machine type='kvm' name='borzoi' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/> + <machine type='kvm' name='versatileab' maxCpus='1' defaultCPU='arm926-arm-cpu'/> + <machine type='kvm' name='lm3s6965evb' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/> + <machine type='kvm' name='n800' maxCpus='1' defaultCPU='arm1136-r2-arm-cpu'/> + <machine type='kvm' name='virt-2.10' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/> + <machine type='kvm' name='virt-2.11' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/> <machine type='kvm' name='connex' maxCpus='1'/> - <machine type='kvm' name='virt-2.12' maxCpus='255'/> + <machine type='kvm' name='virt-2.12' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/> <machine type='kvm' name='microbit' maxCpus='1'/> <machine type='kvm' name='witherspoon-bmc' maxCpus='2'/> - <machine type='kvm' name='xilinx-zynq-a9' maxCpus='1'/> - <machine type='kvm' name='mps2-an385' maxCpus='1'/> - <machine type='kvm' name='vexpress-a9' maxCpus='4'/> - <machine type='kvm' name='mps2-an521' maxCpus='2'/> + <machine type='kvm' name='xilinx-zynq-a9' maxCpus='1' defaultCPU='cortex-a9-arm-cpu'/> + <machine type='kvm' name='mps2-an385' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/> + <machine type='kvm' name='vexpress-a9' maxCpus='4' defaultCPU='cortex-a9-arm-cpu'/> + <machine type='kvm' name='mps2-an521' maxCpus='2' defaultCPU='cortex-m33-arm-cpu'/> <machine type='kvm' name='mcimx6ul-evk' maxCpus='1'/> - <machine type='kvm' name='vexpress-a15' maxCpus='4'/> + <machine type='kvm' name='vexpress-a15' maxCpus='4' defaultCPU='cortex-a15-arm-cpu'/> <machine type='kvm' name='xlnx-zcu102' maxCpus='6'/> - <machine type='kvm' name='virt-3.1' maxCpus='512'/> + <machine type='kvm' name='virt-3.1' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/> <machine type='kvm' name='canon-a1100' maxCpus='1'/> - <machine type='kvm' name='lm3s811evb' maxCpus='1'/> + <machine type='kvm' name='lm3s811evb' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/> <cpu type='tcg' name='pxa262' typename='pxa262-arm-cpu'/> <cpu type='tcg' name='pxa270-a0' typename='pxa270-a0-arm-cpu'/> <cpu type='tcg' name='arm1136' typename='arm1136-arm-cpu'/> @@ -316,76 +316,76 @@ <cpu type='tcg' name='arm946' typename='arm946-arm-cpu'/> <cpu type='tcg' name='pxa270-a1' typename='pxa270-a1-arm-cpu'/> <cpu type='tcg' name='pxa270' typename='pxa270-arm-cpu'/> - <machine type='tcg' name='integratorcp' maxCpus='1'/> + <machine type='tcg' name='integratorcp' maxCpus='1' defaultCPU='arm926-arm-cpu'/> <machine type='tcg' name='nuri' maxCpus='2'/> - <machine type='tcg' name='mps2-an511' maxCpus='1'/> - <machine type='tcg' name='mps2-an505' maxCpus='1'/> - <machine type='tcg' name='verdex' maxCpus='1'/> - <machine type='tcg' name='virt-3.0' maxCpus='512'/> + <machine type='tcg' name='mps2-an511' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/> + <machine type='tcg' name='mps2-an505' maxCpus='1' defaultCPU='cortex-m33-arm-cpu'/> + <machine type='tcg' name='verdex' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/> + <machine type='tcg' name='virt-3.0' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/> <machine type='tcg' name='ast2500-evb' maxCpus='2'/> <machine type='tcg' name='smdkc210' maxCpus='2'/> - <machine type='tcg' name='collie' maxCpus='1'/> + <machine type='tcg' name='collie' maxCpus='1' defaultCPU='sa1110-arm-cpu'/> <machine type='tcg' name='xlnx-versal-virt' maxCpus='2'/> <machine type='tcg' name='imx25-pdk' maxCpus='1'/> - <machine type='tcg' name='spitz' maxCpus='1'/> - <machine type='tcg' name='musca-b1' maxCpus='2'/> - <machine type='tcg' name='realview-pbx-a9' maxCpus='4'/> - <machine type='tcg' name='realview-eb' maxCpus='1'/> - <machine type='tcg' name='versatilepb' maxCpus='1'/> - <machine type='tcg' name='realview-pb-a8' maxCpus='1'/> - <machine type='tcg' name='emcraft-sf2' maxCpus='1'/> - <machine type='tcg' name='virt-2.9' maxCpus='255'/> - <machine type='tcg' name='musicpal' maxCpus='1'/> - <machine type='tcg' name='sbsa-ref' maxCpus='512'/> - <machine type='tcg' name='z2' maxCpus='1'/> - <machine type='tcg' name='akita' maxCpus='1'/> - <machine type='tcg' name='virt-2.7' maxCpus='255'/> + <machine type='tcg' name='spitz' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/> + <machine type='tcg' name='musca-b1' maxCpus='2' defaultCPU='cortex-m33-arm-cpu'/> + <machine type='tcg' name='realview-pbx-a9' maxCpus='4' defaultCPU='cortex-a9-arm-cpu'/> + <machine type='tcg' name='realview-eb' maxCpus='1' defaultCPU='arm926-arm-cpu'/> + <machine type='tcg' name='versatilepb' maxCpus='1' defaultCPU='arm926-arm-cpu'/> + <machine type='tcg' name='realview-pb-a8' maxCpus='1' defaultCPU='cortex-a8-arm-cpu'/> + <machine type='tcg' name='emcraft-sf2' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/> + <machine type='tcg' name='virt-2.9' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/> + <machine type='tcg' name='musicpal' maxCpus='1' defaultCPU='arm926-arm-cpu'/> + <machine type='tcg' name='sbsa-ref' maxCpus='512' defaultCPU='cortex-a57-arm-cpu'/> + <machine type='tcg' name='z2' maxCpus='1' defaultCPU='pxa270-c5-arm-cpu'/> + <machine type='tcg' name='akita' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/> + <machine type='tcg' name='virt-2.7' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/> <machine type='tcg' name='kzm' maxCpus='1'/> <machine type='tcg' name='swift-bmc' maxCpus='2'/> - <machine type='tcg' name='virt-2.8' maxCpus='255'/> - <machine type='tcg' name='realview-eb-mpcore' maxCpus='4'/> - <machine type='tcg' name='musca-a' maxCpus='2'/> + <machine type='tcg' name='virt-2.8' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/> + <machine type='tcg' name='realview-eb-mpcore' maxCpus='4' defaultCPU='arm11mpcore-arm-cpu'/> + <machine type='tcg' name='musca-a' maxCpus='2' defaultCPU='cortex-m33-arm-cpu'/> <machine type='tcg' name='mcimx7d-sabre' maxCpus='2'/> - <machine type='tcg' name='sx1' maxCpus='1'/> - <machine type='tcg' name='virt-4.2' alias='virt' maxCpus='512'/> - <machine type='tcg' name='sx1-v1' maxCpus='1'/> - <machine type='tcg' name='virt-2.6' maxCpus='255'/> - <machine type='tcg' name='cubieboard' maxCpus='1'/> - <machine type='tcg' name='virt-4.0' maxCpus='512'/> + <machine type='tcg' name='sx1' maxCpus='1' defaultCPU='ti925t-arm-cpu'/> + <machine type='tcg' name='virt-4.2' alias='virt' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/> + <machine type='tcg' name='sx1-v1' maxCpus='1' defaultCPU='ti925t-arm-cpu'/> + <machine type='tcg' name='virt-2.6' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/> + <machine type='tcg' name='cubieboard' maxCpus='1' defaultCPU='cortex-a9-arm-cpu'/> + <machine type='tcg' name='virt-4.0' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/> <machine type='tcg' name='highbank' maxCpus='4'/> - <machine type='tcg' name='virt-4.1' maxCpus='512'/> + <machine type='tcg' name='virt-4.1' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/> <machine type='tcg' name='raspi2' maxCpus='4'/> <machine type='tcg' name='raspi3' maxCpus='4'/> <machine type='tcg' name='netduino2' maxCpus='1'/> - <machine type='tcg' name='terrier' maxCpus='1'/> - <machine type='tcg' name='n810' maxCpus='1'/> - <machine type='tcg' name='mainstone' maxCpus='1'/> + <machine type='tcg' name='terrier' maxCpus='1' defaultCPU='pxa270-c5-arm-cpu'/> + <machine type='tcg' name='n810' maxCpus='1' defaultCPU='arm1136-r2-arm-cpu'/> + <machine type='tcg' name='mainstone' maxCpus='1' defaultCPU='pxa270-c5-arm-cpu'/> <machine type='tcg' name='palmetto-bmc' maxCpus='2'/> <machine type='tcg' name='sabrelite' maxCpus='4'/> <machine type='tcg' name='midway' maxCpus='4'/> <machine type='tcg' name='romulus-bmc' maxCpus='2'/> - <machine type='tcg' name='cheetah' maxCpus='1'/> + <machine type='tcg' name='cheetah' maxCpus='1' defaultCPU='ti925t-arm-cpu'/> <machine type='tcg' name='tosa' maxCpus='1'/> - <machine type='tcg' name='borzoi' maxCpus='1'/> - <machine type='tcg' name='versatileab' maxCpus='1'/> - <machine type='tcg' name='lm3s6965evb' maxCpus='1'/> - <machine type='tcg' name='n800' maxCpus='1'/> - <machine type='tcg' name='virt-2.10' maxCpus='255'/> - <machine type='tcg' name='virt-2.11' maxCpus='255'/> + <machine type='tcg' name='borzoi' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/> + <machine type='tcg' name='versatileab' maxCpus='1' defaultCPU='arm926-arm-cpu'/> + <machine type='tcg' name='lm3s6965evb' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/> + <machine type='tcg' name='n800' maxCpus='1' defaultCPU='arm1136-r2-arm-cpu'/> + <machine type='tcg' name='virt-2.10' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/> + <machine type='tcg' name='virt-2.11' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/> <machine type='tcg' name='connex' maxCpus='1'/> - <machine type='tcg' name='virt-2.12' maxCpus='255'/> + <machine type='tcg' name='virt-2.12' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/> <machine type='tcg' name='microbit' maxCpus='1'/> <machine type='tcg' name='witherspoon-bmc' maxCpus='2'/> - <machine type='tcg' name='xilinx-zynq-a9' maxCpus='1'/> - <machine type='tcg' name='mps2-an385' maxCpus='1'/> - <machine type='tcg' name='vexpress-a9' maxCpus='4'/> - <machine type='tcg' name='mps2-an521' maxCpus='2'/> + <machine type='tcg' name='xilinx-zynq-a9' maxCpus='1' defaultCPU='cortex-a9-arm-cpu'/> + <machine type='tcg' name='mps2-an385' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/> + <machine type='tcg' name='vexpress-a9' maxCpus='4' defaultCPU='cortex-a9-arm-cpu'/> + <machine type='tcg' name='mps2-an521' maxCpus='2' defaultCPU='cortex-m33-arm-cpu'/> <machine type='tcg' name='mcimx6ul-evk' maxCpus='1'/> - <machine type='tcg' name='vexpress-a15' maxCpus='4'/> + <machine type='tcg' name='vexpress-a15' maxCpus='4' defaultCPU='cortex-a15-arm-cpu'/> <machine type='tcg' name='xlnx-zcu102' maxCpus='6'/> - <machine type='tcg' name='virt-3.1' maxCpus='512'/> + <machine type='tcg' name='virt-3.1' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/> <machine type='tcg' name='canon-a1100' maxCpus='1'/> - <machine type='tcg' name='lm3s811evb' maxCpus='1'/> + <machine type='tcg' name='lm3s811evb' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/> <gic version='3' kernel='yes' emulated='yes'/> <gic version='2' kernel='no' emulated='yes'/> </qemuCaps> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml index eca48b59d9..998e16ec6d 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml @@ -616,37 +616,37 @@ <cpu type='kvm' name='750_v3.1'/> <cpu type='kvm' name='power8e_v2.1'/> <cpu type='kvm' name='mpc8568e'/> - <machine type='kvm' name='pseries-4.2' alias='pseries' hotplugCpus='yes' maxCpus='1024' default='yes'/> + <machine type='kvm' name='pseries-4.2' alias='pseries' hotplugCpus='yes' maxCpus='1024' default='yes' defaultCPU='host-powerpc64-cpu'/> <machine type='kvm' name='ref405ep' maxCpus='1'/> - <machine type='kvm' name='sam460ex' maxCpus='1'/> - <machine type='kvm' name='virtex-ml507' maxCpus='1'/> - <machine type='kvm' name='ppce500' maxCpus='32'/> - <machine type='kvm' name='mpc8544ds' maxCpus='15'/> - <machine type='kvm' name='pseries-3.1' hotplugCpus='yes' maxCpus='1024'/> - <machine type='kvm' name='pseries-2.12-sxxm' hotplugCpus='yes' maxCpus='1024'/> - <machine type='kvm' name='bamboo' maxCpus='1'/> - <machine type='kvm' name='g3beige' maxCpus='1'/> - <machine type='kvm' name='pseries-3.0' hotplugCpus='yes' maxCpus='1024'/> - <machine type='kvm' name='pseries-2.10' hotplugCpus='yes' maxCpus='1024'/> - <machine type='kvm' name='prep' maxCpus='1'/> - <machine type='kvm' name='pseries-2.11' hotplugCpus='yes' maxCpus='1024'/> - <machine type='kvm' name='pseries-2.12' hotplugCpus='yes' maxCpus='1024'/> - <machine type='kvm' name='pseries-2.9' hotplugCpus='yes' maxCpus='1024'/> - <machine type='kvm' name='mac99' maxCpus='1'/> - <machine type='kvm' name='pseries-2.6' maxCpus='1024'/> - <machine type='kvm' name='pseries-2.7' hotplugCpus='yes' maxCpus='1024'/> - <machine type='kvm' name='pseries-2.8' hotplugCpus='yes' maxCpus='1024'/> - <machine type='kvm' name='pseries-2.4' maxCpus='1024'/> - <machine type='kvm' name='pseries-2.5' maxCpus='1024'/> - <machine type='kvm' name='pseries-4.0' hotplugCpus='yes' maxCpus='1024'/> - <machine type='kvm' name='pseries-4.1' hotplugCpus='yes' maxCpus='1024'/> - <machine type='kvm' name='pseries-2.2' maxCpus='1024'/> + <machine type='kvm' name='sam460ex' maxCpus='1' defaultCPU='460exb-powerpc64-cpu'/> + <machine type='kvm' name='virtex-ml507' maxCpus='1' defaultCPU='440-xilinx-powerpc64-cpu'/> + <machine type='kvm' name='ppce500' maxCpus='32' defaultCPU='e500v2_v30-powerpc64-cpu'/> + <machine type='kvm' name='mpc8544ds' maxCpus='15' defaultCPU='e500v2_v30-powerpc64-cpu'/> + <machine type='kvm' name='pseries-3.1' hotplugCpus='yes' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='pseries-2.12-sxxm' hotplugCpus='yes' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='bamboo' maxCpus='1' defaultCPU='440epb-powerpc64-cpu'/> + <machine type='kvm' name='g3beige' maxCpus='1' defaultCPU='750_v3.1-powerpc64-cpu'/> + <machine type='kvm' name='pseries-3.0' hotplugCpus='yes' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='pseries-2.10' hotplugCpus='yes' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='prep' maxCpus='1' defaultCPU='602-powerpc64-cpu'/> + <machine type='kvm' name='pseries-2.11' hotplugCpus='yes' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='pseries-2.12' hotplugCpus='yes' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='pseries-2.9' hotplugCpus='yes' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='mac99' maxCpus='1' defaultCPU='970fx_v3.1-powerpc64-cpu'/> + <machine type='kvm' name='pseries-2.6' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='pseries-2.7' hotplugCpus='yes' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='pseries-2.8' hotplugCpus='yes' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='pseries-2.4' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='pseries-2.5' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='pseries-4.0' hotplugCpus='yes' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='pseries-4.1' hotplugCpus='yes' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='pseries-2.2' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> <machine type='kvm' name='taihu' maxCpus='1'/> - <machine type='kvm' name='pseries-2.3' maxCpus='1024'/> - <machine type='kvm' name='pseries-2.1' maxCpus='1024'/> - <machine type='kvm' name='powernv8' maxCpus='2048'/> - <machine type='kvm' name='powernv9' alias='powernv' maxCpus='2048'/> - <machine type='kvm' name='40p' maxCpus='1'/> + <machine type='kvm' name='pseries-2.3' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='pseries-2.1' maxCpus='1024' defaultCPU='host-powerpc64-cpu'/> + <machine type='kvm' name='powernv8' maxCpus='2048' defaultCPU='power8_v2.0-powerpc64-cpu'/> + <machine type='kvm' name='powernv9' alias='powernv' maxCpus='2048' defaultCPU='power9_v2.0-powerpc64-cpu'/> + <machine type='kvm' name='40p' maxCpus='1' defaultCPU='604-powerpc64-cpu'/> <cpu type='tcg' name='default' typename='604-powerpc64-cpu'/> <cpu type='tcg' name='ppc' typename='604-powerpc64-cpu'/> <cpu type='tcg' name='ppc32' typename='604-powerpc64-cpu'/> @@ -1084,35 +1084,35 @@ <cpu type='tcg' name='750_v3.1'/> <cpu type='tcg' name='power8e_v2.1'/> <cpu type='tcg' name='mpc8568e'/> - <machine type='tcg' name='pseries-4.2' alias='pseries' hotplugCpus='yes' maxCpus='1024' default='yes'/> + <machine type='tcg' name='pseries-4.2' alias='pseries' hotplugCpus='yes' maxCpus='1024' default='yes' defaultCPU='power9_v2.0-powerpc64-cpu'/> <machine type='tcg' name='ref405ep' maxCpus='1'/> - <machine type='tcg' name='sam460ex' maxCpus='1'/> - <machine type='tcg' name='virtex-ml507' maxCpus='1'/> - <machine type='tcg' name='ppce500' maxCpus='32'/> - <machine type='tcg' name='mpc8544ds' maxCpus='15'/> - <machine type='tcg' name='pseries-3.1' hotplugCpus='yes' maxCpus='1024'/> - <machine type='tcg' name='pseries-2.12-sxxm' hotplugCpus='yes' maxCpus='1024'/> - <machine type='tcg' name='bamboo' maxCpus='1'/> - <machine type='tcg' name='g3beige' maxCpus='1'/> - <machine type='tcg' name='pseries-3.0' hotplugCpus='yes' maxCpus='1024'/> - <machine type='tcg' name='pseries-2.10' hotplugCpus='yes' maxCpus='1024'/> - <machine type='tcg' name='prep' maxCpus='1'/> - <machine type='tcg' name='pseries-2.11' hotplugCpus='yes' maxCpus='1024'/> - <machine type='tcg' name='pseries-2.12' hotplugCpus='yes' maxCpus='1024'/> - <machine type='tcg' name='pseries-2.9' hotplugCpus='yes' maxCpus='1024'/> - <machine type='tcg' name='mac99' maxCpus='1'/> - <machine type='tcg' name='pseries-2.6' maxCpus='1024'/> - <machine type='tcg' name='pseries-2.7' hotplugCpus='yes' maxCpus='1024'/> - <machine type='tcg' name='pseries-2.8' hotplugCpus='yes' maxCpus='1024'/> - <machine type='tcg' name='pseries-2.4' maxCpus='1024'/> - <machine type='tcg' name='pseries-2.5' maxCpus='1024'/> - <machine type='tcg' name='pseries-4.0' hotplugCpus='yes' maxCpus='1024'/> - <machine type='tcg' name='pseries-4.1' hotplugCpus='yes' maxCpus='1024'/> - <machine type='tcg' name='pseries-2.2' maxCpus='1024'/> + <machine type='tcg' name='sam460ex' maxCpus='1' defaultCPU='460exb-powerpc64-cpu'/> + <machine type='tcg' name='virtex-ml507' maxCpus='1' defaultCPU='440-xilinx-powerpc64-cpu'/> + <machine type='tcg' name='ppce500' maxCpus='32' defaultCPU='e500v2_v30-powerpc64-cpu'/> + <machine type='tcg' name='mpc8544ds' maxCpus='15' defaultCPU='e500v2_v30-powerpc64-cpu'/> + <machine type='tcg' name='pseries-3.1' hotplugCpus='yes' maxCpus='1024' defaultCPU='power8_v2.0-powerpc64-cpu'/> + <machine type='tcg' name='pseries-2.12-sxxm' hotplugCpus='yes' maxCpus='1024' defaultCPU='power8_v2.0-powerpc64-cpu'/> + <machine type='tcg' name='bamboo' maxCpus='1' defaultCPU='440epb-powerpc64-cpu'/> + <machine type='tcg' name='g3beige' maxCpus='1' defaultCPU='750_v3.1-powerpc64-cpu'/> + <machine type='tcg' name='pseries-3.0' hotplugCpus='yes' maxCpus='1024' defaultCPU='power8_v2.0-powerpc64-cpu'/> + <machine type='tcg' name='pseries-2.10' hotplugCpus='yes' maxCpus='1024' defaultCPU='power8_v2.0-powerpc64-cpu'/> + <machine type='tcg' name='prep' maxCpus='1' defaultCPU='602-powerpc64-cpu'/> + <machine type='tcg' name='pseries-2.11' hotplugCpus='yes' maxCpus='1024' defaultCPU='power8_v2.0-powerpc64-cpu'/> + <machine type='tcg' name='pseries-2.12' hotplugCpus='yes' maxCpus='1024' defaultCPU='power8_v2.0-powerpc64-cpu'/> + <machine type='tcg' name='pseries-2.9' hotplugCpus='yes' maxCpus='1024' defaultCPU='power8_v2.0-powerpc64-cpu'/> + <machine type='tcg' name='mac99' maxCpus='1' defaultCPU='970fx_v3.1-powerpc64-cpu'/> + <machine type='tcg' name='pseries-2.6' maxCpus='1024' defaultCPU='power7_v2.3-powerpc64-cpu'/> + <machine type='tcg' name='pseries-2.7' hotplugCpus='yes' maxCpus='1024' defaultCPU='power7_v2.3-powerpc64-cpu'/> + <machine type='tcg' name='pseries-2.8' hotplugCpus='yes' maxCpus='1024' defaultCPU='power8_v2.0-powerpc64-cpu'/> + <machine type='tcg' name='pseries-2.4' maxCpus='1024' defaultCPU='power7_v2.3-powerpc64-cpu'/> + <machine type='tcg' name='pseries-2.5' maxCpus='1024' defaultCPU='power7_v2.3-powerpc64-cpu'/> + <machine type='tcg' name='pseries-4.0' hotplugCpus='yes' maxCpus='1024' defaultCPU='power9_v2.0-powerpc64-cpu'/> + <machine type='tcg' name='pseries-4.1' hotplugCpus='yes' maxCpus='1024' defaultCPU='power9_v2.0-powerpc64-cpu'/> + <machine type='tcg' name='pseries-2.2' maxCpus='1024' defaultCPU='power7_v2.3-powerpc64-cpu'/> <machine type='tcg' name='taihu' maxCpus='1'/> - <machine type='tcg' name='pseries-2.3' maxCpus='1024'/> - <machine type='tcg' name='pseries-2.1' maxCpus='1024'/> - <machine type='tcg' name='powernv8' maxCpus='2048'/> - <machine type='tcg' name='powernv9' alias='powernv' maxCpus='2048'/> - <machine type='tcg' name='40p' maxCpus='1'/> + <machine type='tcg' name='pseries-2.3' maxCpus='1024' defaultCPU='power7_v2.3-powerpc64-cpu'/> + <machine type='tcg' name='pseries-2.1' maxCpus='1024' defaultCPU='power7_v2.3-powerpc64-cpu'/> + <machine type='tcg' name='powernv8' maxCpus='2048' defaultCPU='power8_v2.0-powerpc64-cpu'/> + <machine type='tcg' name='powernv9' alias='powernv' maxCpus='2048' defaultCPU='power9_v2.0-powerpc64-cpu'/> + <machine type='tcg' name='40p' maxCpus='1' defaultCPU='604-powerpc64-cpu'/> </qemuCaps> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml index b291deab44..902672bf71 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml @@ -371,20 +371,20 @@ <cpu type='kvm' name='qemu' typename='qemu-s390x-cpu' usable='no'> <blocker name='ais'/> </cpu> - <machine type='kvm' name='s390-ccw-virtio-4.2' alias='s390-ccw-virtio' hotplugCpus='yes' maxCpus='248' default='yes'/> - <machine type='kvm' name='s390-ccw-virtio-4.0' hotplugCpus='yes' maxCpus='248'/> - <machine type='kvm' name='s390-ccw-virtio-3.1' hotplugCpus='yes' maxCpus='248'/> - <machine type='kvm' name='s390-ccw-virtio-2.6' hotplugCpus='yes' maxCpus='248'/> - <machine type='kvm' name='s390-ccw-virtio-2.12' hotplugCpus='yes' maxCpus='248'/> - <machine type='kvm' name='s390-ccw-virtio-2.9' hotplugCpus='yes' maxCpus='248'/> - <machine type='kvm' name='s390-ccw-virtio-3.0' hotplugCpus='yes' maxCpus='248'/> - <machine type='kvm' name='s390-ccw-virtio-2.5' hotplugCpus='yes' maxCpus='248'/> - <machine type='kvm' name='s390-ccw-virtio-2.11' hotplugCpus='yes' maxCpus='248'/> - <machine type='kvm' name='s390-ccw-virtio-2.8' hotplugCpus='yes' maxCpus='248'/> - <machine type='kvm' name='s390-ccw-virtio-4.1' hotplugCpus='yes' maxCpus='248'/> - <machine type='kvm' name='s390-ccw-virtio-2.4' hotplugCpus='yes' maxCpus='248'/> - <machine type='kvm' name='s390-ccw-virtio-2.10' hotplugCpus='yes' maxCpus='248'/> - <machine type='kvm' name='s390-ccw-virtio-2.7' hotplugCpus='yes' maxCpus='248'/> + <machine type='kvm' name='s390-ccw-virtio-4.2' alias='s390-ccw-virtio' hotplugCpus='yes' maxCpus='248' default='yes' defaultCPU='host-s390x-cpu'/> + <machine type='kvm' name='s390-ccw-virtio-4.0' hotplugCpus='yes' maxCpus='248' defaultCPU='host-s390x-cpu'/> + <machine type='kvm' name='s390-ccw-virtio-3.1' hotplugCpus='yes' maxCpus='248' defaultCPU='host-s390x-cpu'/> + <machine type='kvm' name='s390-ccw-virtio-2.6' hotplugCpus='yes' maxCpus='248' defaultCPU='host-s390x-cpu'/> + <machine type='kvm' name='s390-ccw-virtio-2.12' hotplugCpus='yes' maxCpus='248' defaultCPU='host-s390x-cpu'/> + <machine type='kvm' name='s390-ccw-virtio-2.9' hotplugCpus='yes' maxCpus='248' defaultCPU='host-s390x-cpu'/> + <machine type='kvm' name='s390-ccw-virtio-3.0' hotplugCpus='yes' maxCpus='248' defaultCPU='host-s390x-cpu'/> + <machine type='kvm' name='s390-ccw-virtio-2.5' hotplugCpus='yes' maxCpus='248' defaultCPU='host-s390x-cpu'/> + <machine type='kvm' name='s390-ccw-virtio-2.11' hotplugCpus='yes' maxCpus='248' defaultCPU='host-s390x-cpu'/> + <machine type='kvm' name='s390-ccw-virtio-2.8' hotplugCpus='yes' maxCpus='248' defaultCPU='host-s390x-cpu'/> + <machine type='kvm' name='s390-ccw-virtio-4.1' hotplugCpus='yes' maxCpus='248' defaultCPU='host-s390x-cpu'/> + <machine type='kvm' name='s390-ccw-virtio-2.4' hotplugCpus='yes' maxCpus='248' defaultCPU='host-s390x-cpu'/> + <machine type='kvm' name='s390-ccw-virtio-2.10' hotplugCpus='yes' maxCpus='248' defaultCPU='host-s390x-cpu'/> + <machine type='kvm' name='s390-ccw-virtio-2.7' hotplugCpus='yes' maxCpus='248' defaultCPU='host-s390x-cpu'/> <hostCPU type='tcg' model='z13.2-base' migratability='no'> <property name='dateh2' type='boolean' value='false'/> <property name='aen' type='boolean' value='true'/> @@ -3342,18 +3342,18 @@ <blocker name='type'/> </cpu> <cpu type='tcg' name='qemu' typename='qemu-s390x-cpu' usable='yes'/> - <machine type='tcg' name='s390-ccw-virtio-4.2' alias='s390-ccw-virtio' hotplugCpus='yes' maxCpus='248' default='yes'/> - <machine type='tcg' name='s390-ccw-virtio-4.0' hotplugCpus='yes' maxCpus='248'/> - <machine type='tcg' name='s390-ccw-virtio-3.1' hotplugCpus='yes' maxCpus='248'/> - <machine type='tcg' name='s390-ccw-virtio-2.6' hotplugCpus='yes' maxCpus='248'/> - <machine type='tcg' name='s390-ccw-virtio-2.12' hotplugCpus='yes' maxCpus='248'/> - <machine type='tcg' name='s390-ccw-virtio-2.9' hotplugCpus='yes' maxCpus='248'/> - <machine type='tcg' name='s390-ccw-virtio-3.0' hotplugCpus='yes' maxCpus='248'/> - <machine type='tcg' name='s390-ccw-virtio-2.5' hotplugCpus='yes' maxCpus='248'/> - <machine type='tcg' name='s390-ccw-virtio-2.11' hotplugCpus='yes' maxCpus='248'/> - <machine type='tcg' name='s390-ccw-virtio-2.8' hotplugCpus='yes' maxCpus='248'/> - <machine type='tcg' name='s390-ccw-virtio-4.1' hotplugCpus='yes' maxCpus='248'/> - <machine type='tcg' name='s390-ccw-virtio-2.4' hotplugCpus='yes' maxCpus='248'/> - <machine type='tcg' name='s390-ccw-virtio-2.10' hotplugCpus='yes' maxCpus='248'/> - <machine type='tcg' name='s390-ccw-virtio-2.7' hotplugCpus='yes' maxCpus='248'/> + <machine type='tcg' name='s390-ccw-virtio-4.2' alias='s390-ccw-virtio' hotplugCpus='yes' maxCpus='248' default='yes' defaultCPU='qemu-s390x-cpu'/> + <machine type='tcg' name='s390-ccw-virtio-4.0' hotplugCpus='yes' maxCpus='248' defaultCPU='qemu-s390x-cpu'/> + <machine type='tcg' name='s390-ccw-virtio-3.1' hotplugCpus='yes' maxCpus='248' defaultCPU='qemu-s390x-cpu'/> + <machine type='tcg' name='s390-ccw-virtio-2.6' hotplugCpus='yes' maxCpus='248' defaultCPU='qemu-s390x-cpu'/> + <machine type='tcg' name='s390-ccw-virtio-2.12' hotplugCpus='yes' maxCpus='248' defaultCPU='qemu-s390x-cpu'/> + <machine type='tcg' name='s390-ccw-virtio-2.9' hotplugCpus='yes' maxCpus='248' defaultCPU='qemu-s390x-cpu'/> + <machine type='tcg' name='s390-ccw-virtio-3.0' hotplugCpus='yes' maxCpus='248' defaultCPU='qemu-s390x-cpu'/> + <machine type='tcg' name='s390-ccw-virtio-2.5' hotplugCpus='yes' maxCpus='248' defaultCPU='qemu-s390x-cpu'/> + <machine type='tcg' name='s390-ccw-virtio-2.11' hotplugCpus='yes' maxCpus='248' defaultCPU='qemu-s390x-cpu'/> + <machine type='tcg' name='s390-ccw-virtio-2.8' hotplugCpus='yes' maxCpus='248' defaultCPU='qemu-s390x-cpu'/> + <machine type='tcg' name='s390-ccw-virtio-4.1' hotplugCpus='yes' maxCpus='248' defaultCPU='qemu-s390x-cpu'/> + <machine type='tcg' name='s390-ccw-virtio-2.4' hotplugCpus='yes' maxCpus='248' defaultCPU='qemu-s390x-cpu'/> + <machine type='tcg' name='s390-ccw-virtio-2.10' hotplugCpus='yes' maxCpus='248' defaultCPU='qemu-s390x-cpu'/> + <machine type='tcg' name='s390-ccw-virtio-2.7' hotplugCpus='yes' maxCpus='248' defaultCPU='qemu-s390x-cpu'/> </qemuCaps> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml index 39b9db63fd..465db243eb 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml @@ -841,52 +841,52 @@ <cpu type='kvm' name='Broadwell' typename='Broadwell-x86_64-cpu' usable='yes'/> <cpu type='kvm' name='486-v1' typename='486-v1-x86_64-cpu' usable='yes'/> <cpu type='kvm' name='486' typename='486-x86_64-cpu' usable='yes'/> - <machine type='kvm' name='pc-i440fx-4.2' alias='pc' hotplugCpus='yes' maxCpus='255' default='yes'/> - <machine type='kvm' name='pc-0.15' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-i440fx-2.12' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-i440fx-2.0' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-q35-4.2' alias='q35' hotplugCpus='yes' maxCpus='288'/> - <machine type='kvm' name='pc-i440fx-2.5' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-i440fx-1.5' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-0.12' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-q35-2.7' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-i440fx-2.2' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-1.1' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-i440fx-2.7' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-q35-2.4' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-q35-2.10' hotplugCpus='yes' maxCpus='288'/> - <machine type='kvm' name='pc-i440fx-1.7' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-0.14' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-q35-2.9' hotplugCpus='yes' maxCpus='288'/> - <machine type='kvm' name='pc-i440fx-2.11' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-q35-3.1' hotplugCpus='yes' maxCpus='288'/> - <machine type='kvm' name='pc-q35-4.1' hotplugCpus='yes' maxCpus='288'/> - <machine type='kvm' name='pc-i440fx-2.4' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-1.3' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-i440fx-4.1' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-i440fx-2.9' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='isapc' hotplugCpus='yes' maxCpus='1'/> - <machine type='kvm' name='pc-i440fx-1.4' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-q35-2.6' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-i440fx-3.1' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-q35-2.12' hotplugCpus='yes' maxCpus='288'/> - <machine type='kvm' name='pc-i440fx-2.1' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-1.0' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-i440fx-2.6' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-q35-4.0.1' hotplugCpus='yes' maxCpus='288'/> - <machine type='kvm' name='pc-i440fx-1.6' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-0.13' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-q35-2.8' hotplugCpus='yes' maxCpus='288'/> - <machine type='kvm' name='pc-i440fx-2.10' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-q35-3.0' hotplugCpus='yes' maxCpus='288'/> - <machine type='kvm' name='pc-q35-4.0' hotplugCpus='yes' maxCpus='288'/> - <machine type='kvm' name='pc-i440fx-2.3' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-1.2' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-i440fx-4.0' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-i440fx-2.8' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-q35-2.5' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-i440fx-3.0' hotplugCpus='yes' maxCpus='255'/> - <machine type='kvm' name='pc-q35-2.11' hotplugCpus='yes' maxCpus='288'/> + <machine type='kvm' name='pc-i440fx-4.2' alias='pc' hotplugCpus='yes' maxCpus='255' default='yes' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-0.15' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-2.12' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-2.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-4.2' alias='q35' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-2.5' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-1.5' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-0.12' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-2.7' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-2.2' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-1.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-2.7' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-2.4' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-2.10' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-1.7' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-0.14' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-2.9' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-2.11' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-3.1' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-4.1' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-2.4' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-1.3' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-4.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-2.9' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='isapc' hotplugCpus='yes' maxCpus='1' defaultCPU='486-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-1.4' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-2.6' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-3.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-2.12' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-2.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-1.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-2.6' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-4.0.1' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-1.6' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-0.13' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-2.8' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-2.10' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-3.0' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-4.0' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-2.3' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-1.2' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-4.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-2.8' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-2.5' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-i440fx-3.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='kvm' name='pc-q35-2.11' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> <hostCPU type='tcg' model='base' migratability='yes'> <property name='cmov' type='boolean' value='true' migratable='yes'/> <property name='ia64' type='boolean' value='false'/> @@ -1950,50 +1950,50 @@ </cpu> <cpu type='tcg' name='486-v1' typename='486-v1-x86_64-cpu' usable='yes'/> <cpu type='tcg' name='486' typename='486-x86_64-cpu' usable='yes'/> - <machine type='tcg' name='pc-i440fx-4.2' alias='pc' hotplugCpus='yes' maxCpus='255' default='yes'/> - <machine type='tcg' name='pc-0.15' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-i440fx-2.12' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-i440fx-2.0' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-q35-4.2' alias='q35' hotplugCpus='yes' maxCpus='288'/> - <machine type='tcg' name='pc-i440fx-2.5' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-i440fx-1.5' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-0.12' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-q35-2.7' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-i440fx-2.2' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-1.1' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-i440fx-2.7' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-q35-2.4' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-q35-2.10' hotplugCpus='yes' maxCpus='288'/> - <machine type='tcg' name='pc-i440fx-1.7' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-0.14' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-q35-2.9' hotplugCpus='yes' maxCpus='288'/> - <machine type='tcg' name='pc-i440fx-2.11' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-q35-3.1' hotplugCpus='yes' maxCpus='288'/> - <machine type='tcg' name='pc-q35-4.1' hotplugCpus='yes' maxCpus='288'/> - <machine type='tcg' name='pc-i440fx-2.4' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-1.3' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-i440fx-4.1' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-i440fx-2.9' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='isapc' hotplugCpus='yes' maxCpus='1'/> - <machine type='tcg' name='pc-i440fx-1.4' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-q35-2.6' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-i440fx-3.1' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-q35-2.12' hotplugCpus='yes' maxCpus='288'/> - <machine type='tcg' name='pc-i440fx-2.1' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-1.0' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-i440fx-2.6' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-q35-4.0.1' hotplugCpus='yes' maxCpus='288'/> - <machine type='tcg' name='pc-i440fx-1.6' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-0.13' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-q35-2.8' hotplugCpus='yes' maxCpus='288'/> - <machine type='tcg' name='pc-i440fx-2.10' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-q35-3.0' hotplugCpus='yes' maxCpus='288'/> - <machine type='tcg' name='pc-q35-4.0' hotplugCpus='yes' maxCpus='288'/> - <machine type='tcg' name='pc-i440fx-2.3' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-1.2' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-i440fx-4.0' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-i440fx-2.8' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-q35-2.5' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-i440fx-3.0' hotplugCpus='yes' maxCpus='255'/> - <machine type='tcg' name='pc-q35-2.11' hotplugCpus='yes' maxCpus='288'/> + <machine type='tcg' name='pc-i440fx-4.2' alias='pc' hotplugCpus='yes' maxCpus='255' default='yes' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-0.15' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-2.12' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-2.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-4.2' alias='q35' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-2.5' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-1.5' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-0.12' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-2.7' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-2.2' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-1.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-2.7' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-2.4' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-2.10' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-1.7' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-0.14' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-2.9' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-2.11' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-3.1' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-4.1' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-2.4' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-1.3' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-4.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-2.9' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='isapc' hotplugCpus='yes' maxCpus='1' defaultCPU='486-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-1.4' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-2.6' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-3.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-2.12' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-2.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-1.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-2.6' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-4.0.1' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-1.6' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-0.13' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-2.8' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-2.10' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-3.0' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-4.0' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-2.3' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-1.2' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-4.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-2.8' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-2.5' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-i440fx-3.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/> + <machine type='tcg' name='pc-q35-2.11' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/> </qemuCaps> -- 2.23.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - fix crash with CPUs without type Version 3: - no change src/qemu/qemu_capabilities.c | 32 ++++++++++++++++++++++++++++++++ src/qemu/qemu_capabilities.h | 3 +++ 2 files changed, 35 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index dc2723d025..9829860d4d 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2195,6 +2195,38 @@ virQEMUCapsGetMachineHotplugCpus(virQEMUCapsPtr qemuCaps, } +const char * +virQEMUCapsGetMachineDefaultCPU(virQEMUCapsPtr qemuCaps, + const char *name, + virDomainVirtType type) +{ + virQEMUCapsAccelPtr accel = virQEMUCapsGetAccel(qemuCaps, type); + qemuMonitorCPUDefsPtr defs = accel->cpuModels; + const char *cpuType = NULL; + size_t i; + + if (!name || !defs) + return NULL; + + for (i = 0; i < accel->nmachineTypes; i++) { + if (STREQ(accel->machineTypes[i].name, name)) { + cpuType = accel->machineTypes[i].defaultCPU; + break; + } + } + + if (!cpuType) + return NULL; + + for (i = 0; i < defs->ncpus; i++) { + if (STREQ_NULLABLE(defs->cpus[i].type, cpuType)) + return defs->cpus[i].name; + } + + return NULL; +} + + /** * virQEMUCapsSetGICCapabilities: * @qemuCaps: QEMU capabilities diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index bc43b99579..f063d95048 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -609,6 +609,9 @@ int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, bool virQEMUCapsGetMachineHotplugCpus(virQEMUCapsPtr qemuCaps, virDomainVirtType virtType, const char *name); +const char *virQEMUCapsGetMachineDefaultCPU(virQEMUCapsPtr qemuCaps, + const char *name, + virDomainVirtType type); void virQEMUCapsFilterByMachineType(virQEMUCapsPtr qemuCaps, virDomainVirtType virtType, -- 2.23.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - no change Version 3: - g_autoptr src/qemu/qemu_domain.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 8627238c6a..7e470c602a 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4610,55 +4610,51 @@ qemuDomainDefPostParse(virDomainDefPtr def, void *parseOpaque) { virQEMUDriverPtr driver = opaque; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); /* Note that qemuCaps may be NULL when this function is called. This * function shall not fail in that case. It will be re-run on VM startup * with the capabilities populated. */ virQEMUCapsPtr qemuCaps = parseOpaque; - int ret = -1; if (def->os.bootloader || def->os.bootloaderArgs) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("bootloader is not supported by QEMU")); - goto cleanup; + return -1; } if (!def->os.machine) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing machine type")); - goto cleanup; + return -1; } if (qemuDomainNVRAMPathGenerate(cfg, def) < 0) - goto cleanup; + return -1; if (qemuDomainDefAddDefaultDevices(def, qemuCaps) < 0) - goto cleanup; + return -1; if (qemuCanonicalizeMachine(def, qemuCaps) < 0) - goto cleanup; + return -1; qemuDomainDefEnableDefaultFeatures(def, qemuCaps); if (qemuDomainRecheckInternalPaths(def, cfg, parseFlags) < 0) - goto cleanup; + return -1; if (qemuSecurityVerify(driver->securityManager, def) < 0) - goto cleanup; + return -1; if (qemuDomainDefVcpusPostParse(def) < 0) - goto cleanup; + return -1; if (qemuDomainDefCPUPostParse(def) < 0) - goto cleanup; + return -1; if (qemuDomainDefTsegPostParse(def, qemuCaps) < 0) - goto cleanup; + return -1; - ret = 0; - cleanup: - virObjectUnref(cfg); - return ret; + return 0; } -- 2.23.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - no change Version 3: - G_DEFINE_AUTOPTR_CLEANUP_FUNC src/conf/cpu_conf.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h index 30904fab95..892ed08653 100644 --- a/src/conf/cpu_conf.h +++ b/src/conf/cpu_conf.h @@ -151,6 +151,7 @@ virCPUDefFreeModel(virCPUDefPtr def); void virCPUDefFree(virCPUDefPtr def); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUDef, virCPUDefFree); int ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) virCPUDefCopyModel(virCPUDefPtr dst, -- 2.23.0

To avoid mismatch between host and QEMU capabilities. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 3: - new patch tests/qemuxml2argvtest.c | 4 ++++ tests/testutilsqemu.c | 6 +++--- tests/testutilsqemu.h | 1 + 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index fd330df3e0..7c00c72aff 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -717,9 +717,13 @@ mymain(void) VIR_TEST_DEBUG("Failed to generate paths for '%s'", _name); \ return EXIT_FAILURE; \ } \ + if (info.arch != VIR_ARCH_NONE && info.arch != VIR_ARCH_X86_64) \ + qemuTestSetHostArch(driver.caps, info.arch); \ if (virTestRun("QEMU XML-2-ARGV " _name _suffix, \ testCompareXMLToArgv, &info) < 0) \ ret = -1; \ + if (info.arch != VIR_ARCH_NONE && info.arch != VIR_ARCH_X86_64) \ + qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE); \ testQemuInfoClear(&info); \ } while (0) diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index 54d6b1a0ac..ba9b56003a 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -1061,6 +1061,8 @@ testQemuInfoSetArgs(struct testQemuInfo *info, if (!qemuCaps && capsarch && capsver) { bool stripmachinealiases = false; + info->arch = virArchFromString(capsarch); + if (STREQ(capsver, "latest")) { capsfile = g_strdup(virHashLookup(capslatest, capsarch)); stripmachinealiases = true; @@ -1069,10 +1071,8 @@ testQemuInfoSetArgs(struct testQemuInfo *info, goto cleanup; } - if (!(qemuCaps = qemuTestParseCapabilitiesArch(virArchFromString(capsarch), - capsfile))) { + if (!(qemuCaps = qemuTestParseCapabilitiesArch(info->arch, capsfile))) goto cleanup; - } if (stripmachinealiases) virQEMUCapsStripMachineAliases(qemuCaps); diff --git a/tests/testutilsqemu.h b/tests/testutilsqemu.h index 714a95bb7a..da3bf3ab7a 100644 --- a/tests/testutilsqemu.h +++ b/tests/testutilsqemu.h @@ -63,6 +63,7 @@ struct testQemuInfo { int migrateFd; unsigned int flags; unsigned int parseFlags; + virArch arch; }; virCapsPtr testQemuCapsInit(void); -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:45PM +0100, Jiri Denemark wrote:
To avoid mismatch between host and QEMU capabilities.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 3: - new patch
tests/qemuxml2argvtest.c | 4 ++++ tests/testutilsqemu.c | 6 +++--- tests/testutilsqemu.h | 1 + 3 files changed, 8 insertions(+), 3 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - new patch Version 3: - no change ...fault-cpu-kvm-virt-4.2.aarch64-latest.args | 38 +++++++++++++++++++ .../aarch64-default-cpu-kvm-virt-4.2.xml | 20 ++++++++++ ...fault-cpu-tcg-virt-4.2.aarch64-latest.args | 38 +++++++++++++++++++ .../aarch64-default-cpu-tcg-virt-4.2.xml | 20 ++++++++++ tests/qemuxml2argvtest.c | 3 ++ ...efault-cpu-kvm-virt-4.2.aarch64-latest.xml | 38 +++++++++++++++++++ ...efault-cpu-tcg-virt-4.2.aarch64-latest.xml | 38 +++++++++++++++++++ tests/qemuxml2xmltest.c | 3 ++ 8 files changed, 198 insertions(+) create mode 100644 tests/qemuxml2argvdata/aarch64-default-cpu-kvm-virt-4.2.aarch64-latest.args create mode 100644 tests/qemuxml2argvdata/aarch64-default-cpu-kvm-virt-4.2.xml create mode 100644 tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.args create mode 100644 tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.xml create mode 100644 tests/qemuxml2xmloutdata/aarch64-default-cpu-kvm-virt-4.2.aarch64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.xml diff --git a/tests/qemuxml2argvdata/aarch64-default-cpu-kvm-virt-4.2.aarch64-latest.args b/tests/qemuxml2argvdata/aarch64-default-cpu-kvm-virt-4.2.aarch64-latest.args new file mode 100644 index 0000000000..fe33d5410a --- /dev/null +++ b/tests/qemuxml2argvdata/aarch64-default-cpu-kvm-virt-4.2.aarch64-latest.args @@ -0,0 +1,38 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-aarch64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-guest/master-key.aes \ +-machine virt-4.2,accel=kvm,usb=off,dump-guest-core=off,gic-version=3 \ +-m 4096 \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-boot strict=on \ +-device pcie-root-port,port=0x8,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,\ +addr=0x1 \ +-device pcie-root-port,port=0x9,chassis=2,id=pci.2,bus=pcie.0,addr=0x1.0x1 \ +-drive file=/var/lib/libvirt/images/guest.qcow2,format=qcow2,if=none,\ +id=drive-virtio-disk0 \ +-device virtio-blk-pci,scsi=off,bus=pci.1,addr=0x0,drive=drive-virtio-disk0,\ +id=virtio-disk0,bootindex=1 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/aarch64-default-cpu-kvm-virt-4.2.xml b/tests/qemuxml2argvdata/aarch64-default-cpu-kvm-virt-4.2.xml new file mode 100644 index 0000000000..1267306ebf --- /dev/null +++ b/tests/qemuxml2argvdata/aarch64-default-cpu-kvm-virt-4.2.xml @@ -0,0 +1,20 @@ +<domain type='kvm'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <currentMemory>4194304</currentMemory> + <vcpu>1</vcpu> + <os> + <type arch='aarch64' machine='virt-4.2'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <devices> + <emulator>/usr/bin/qemu-system-aarch64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + </disk> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.args b/tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.args new file mode 100644 index 0000000000..5ecbe1fdd6 --- /dev/null +++ b/tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.args @@ -0,0 +1,38 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-aarch64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-guest/master-key.aes \ +-machine virt-4.2,accel=tcg,usb=off,dump-guest-core=off,gic-version=2 \ +-m 4096 \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-boot strict=on \ +-device pcie-root-port,port=0x8,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,\ +addr=0x1 \ +-device pcie-root-port,port=0x9,chassis=2,id=pci.2,bus=pcie.0,addr=0x1.0x1 \ +-drive file=/var/lib/libvirt/images/guest.qcow2,format=qcow2,if=none,\ +id=drive-virtio-disk0 \ +-device virtio-blk-pci,scsi=off,bus=pci.1,addr=0x0,drive=drive-virtio-disk0,\ +id=virtio-disk0,bootindex=1 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.xml b/tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.xml new file mode 100644 index 0000000000..20ef1228ce --- /dev/null +++ b/tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.xml @@ -0,0 +1,20 @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <currentMemory>4194304</currentMemory> + <vcpu>1</vcpu> + <os> + <type arch='aarch64' machine='virt-4.2'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <devices> + <emulator>/usr/bin/qemu-system-aarch64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + </disk> + </devices> +</domain> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 7c00c72aff..5a621b7b3c 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -3022,6 +3022,9 @@ mymain(void) DO_TEST_CAPS_LATEST("vhost-user-vga"); DO_TEST_CAPS_LATEST("vhost-user-gpu-secondary"); + DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-kvm-virt-4.2", "aarch64"); + DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-tcg-virt-4.2", "aarch64"); + if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL) virFileDeleteTree(fakerootdir); diff --git a/tests/qemuxml2xmloutdata/aarch64-default-cpu-kvm-virt-4.2.aarch64-latest.xml b/tests/qemuxml2xmloutdata/aarch64-default-cpu-kvm-virt-4.2.aarch64-latest.xml new file mode 100644 index 0000000000..efbe726758 --- /dev/null +++ b/tests/qemuxml2xmloutdata/aarch64-default-cpu-kvm-virt-4.2.aarch64-latest.xml @@ -0,0 +1,38 @@ +<domain type='kvm'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='aarch64' machine='virt-4.2'>hvm</type> + <boot dev='hd'/> + </os> + <features> + <gic version='3'/> + </features> + <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> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> + </disk> + <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> + </devices> +</domain> diff --git a/tests/qemuxml2xmloutdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.xml b/tests/qemuxml2xmloutdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.xml new file mode 100644 index 0000000000..1f4104857a --- /dev/null +++ b/tests/qemuxml2xmloutdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.xml @@ -0,0 +1,38 @@ +<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'>1</vcpu> + <os> + <type arch='aarch64' machine='virt-4.2'>hvm</type> + <boot dev='hd'/> + </os> + <features> + <gic version='2'/> + </features> + <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> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> + </disk> + <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> + </devices> +</domain> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 89c9494e6c..9d7cacc321 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -1339,6 +1339,9 @@ mymain(void) DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-graphics", "x86_64"); DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-graphics", "x86_64"); + DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-kvm-virt-4.2", "aarch64"); + DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-tcg-virt-4.2", "aarch64"); + if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL) virFileDeleteTree(fakerootdir); -- 2.23.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - new patch Version 3: - no change ...ault-cpu-kvm-pseries-2.7.ppc64-latest.args | 38 ++++++++++++++++ .../ppc64-default-cpu-kvm-pseries-2.7.xml | 22 +++++++++ ...ault-cpu-kvm-pseries-3.1.ppc64-latest.args | 38 ++++++++++++++++ .../ppc64-default-cpu-kvm-pseries-3.1.xml | 22 +++++++++ ...ault-cpu-kvm-pseries-4.2.ppc64-latest.args | 38 ++++++++++++++++ .../ppc64-default-cpu-kvm-pseries-4.2.xml | 22 +++++++++ ...ault-cpu-tcg-pseries-2.7.ppc64-latest.args | 38 ++++++++++++++++ .../ppc64-default-cpu-tcg-pseries-2.7.xml | 22 +++++++++ ...ault-cpu-tcg-pseries-3.1.ppc64-latest.args | 38 ++++++++++++++++ .../ppc64-default-cpu-tcg-pseries-3.1.xml | 22 +++++++++ ...ault-cpu-tcg-pseries-4.2.ppc64-latest.args | 38 ++++++++++++++++ .../ppc64-default-cpu-tcg-pseries-4.2.xml | 22 +++++++++ tests/qemuxml2argvtest.c | 6 +++ ...fault-cpu-kvm-pseries-2.7.ppc64-latest.xml | 45 +++++++++++++++++++ ...fault-cpu-kvm-pseries-3.1.ppc64-latest.xml | 45 +++++++++++++++++++ ...fault-cpu-kvm-pseries-4.2.ppc64-latest.xml | 45 +++++++++++++++++++ ...fault-cpu-tcg-pseries-2.7.ppc64-latest.xml | 45 +++++++++++++++++++ ...fault-cpu-tcg-pseries-3.1.ppc64-latest.xml | 45 +++++++++++++++++++ ...fault-cpu-tcg-pseries-4.2.ppc64-latest.xml | 45 +++++++++++++++++++ tests/qemuxml2xmltest.c | 6 +++ 20 files changed, 642 insertions(+) create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.xml diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.args b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.args new file mode 100644 index 0000000000..d264659d49 --- /dev/null +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.args @@ -0,0 +1,38 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-ppc64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-guest/master-key.aes \ +-machine pseries-2.7,accel=kvm,usb=off,dump-guest-core=off \ +-m 4096 \ +-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,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device pci-ohci,id=usb,bus=pci.0,addr=0x1 \ +-drive file=/var/lib/libvirt/images/guest.qcow2,format=qcow2,if=none,\ +id=drive-virtio-disk0 \ +-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=drive-virtio-disk0,\ +id=virtio-disk0,bootindex=1 \ +-chardev pty,id=charserial0 \ +-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.xml b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.xml new file mode 100644 index 0000000000..9aac1815c4 --- /dev/null +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.xml @@ -0,0 +1,22 @@ +<domain type='kvm'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <currentMemory>4194304</currentMemory> + <vcpu>4</vcpu> + <os> + <type arch='ppc64' machine='pseries-2.7'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <devices> + <emulator>/usr/bin/qemu-system-ppc64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + </disk> + <console type='pty'/> + <memballoon model='virtio'/> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.args b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.args new file mode 100644 index 0000000000..88f3b4ba26 --- /dev/null +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.args @@ -0,0 +1,38 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-ppc64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-guest/master-key.aes \ +-machine pseries-3.1,accel=kvm,usb=off,dump-guest-core=off \ +-m 4096 \ +-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,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device pci-ohci,id=usb,bus=pci.0,addr=0x1 \ +-drive file=/var/lib/libvirt/images/guest.qcow2,format=qcow2,if=none,\ +id=drive-virtio-disk0 \ +-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=drive-virtio-disk0,\ +id=virtio-disk0,bootindex=1 \ +-chardev pty,id=charserial0 \ +-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.xml b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.xml new file mode 100644 index 0000000000..820b5bdf1c --- /dev/null +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.xml @@ -0,0 +1,22 @@ +<domain type='kvm'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <currentMemory>4194304</currentMemory> + <vcpu>4</vcpu> + <os> + <type arch='ppc64' machine='pseries-3.1'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <devices> + <emulator>/usr/bin/qemu-system-ppc64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + </disk> + <console type='pty'/> + <memballoon model='virtio'/> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.args b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.args new file mode 100644 index 0000000000..ea27f424cb --- /dev/null +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.args @@ -0,0 +1,38 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-ppc64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-guest/master-key.aes \ +-machine pseries-4.2,accel=kvm,usb=off,dump-guest-core=off \ +-m 4096 \ +-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,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device pci-ohci,id=usb,bus=pci.0,addr=0x1 \ +-drive file=/var/lib/libvirt/images/guest.qcow2,format=qcow2,if=none,\ +id=drive-virtio-disk0 \ +-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=drive-virtio-disk0,\ +id=virtio-disk0,bootindex=1 \ +-chardev pty,id=charserial0 \ +-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.xml b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.xml new file mode 100644 index 0000000000..df89d1c1be --- /dev/null +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.xml @@ -0,0 +1,22 @@ +<domain type='kvm'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <currentMemory>4194304</currentMemory> + <vcpu>4</vcpu> + <os> + <type arch='ppc64' machine='pseries-4.2'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <devices> + <emulator>/usr/bin/qemu-system-ppc64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + </disk> + <console type='pty'/> + <memballoon model='virtio'/> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.args b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.args new file mode 100644 index 0000000000..c97fa531ae --- /dev/null +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.args @@ -0,0 +1,38 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-ppc64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-guest/master-key.aes \ +-machine pseries-2.7,accel=tcg,usb=off,dump-guest-core=off \ +-m 4096 \ +-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,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device pci-ohci,id=usb,bus=pci.0,addr=0x1 \ +-drive file=/var/lib/libvirt/images/guest.qcow2,format=qcow2,if=none,\ +id=drive-virtio-disk0 \ +-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=drive-virtio-disk0,\ +id=virtio-disk0,bootindex=1 \ +-chardev pty,id=charserial0 \ +-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.xml b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.xml new file mode 100644 index 0000000000..3e873becc6 --- /dev/null +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.xml @@ -0,0 +1,22 @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <currentMemory>4194304</currentMemory> + <vcpu>4</vcpu> + <os> + <type arch='ppc64' machine='pseries-2.7'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <devices> + <emulator>/usr/bin/qemu-system-ppc64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + </disk> + <console type='pty'/> + <memballoon model='virtio'/> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.args b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.args new file mode 100644 index 0000000000..fbad53b0fb --- /dev/null +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.args @@ -0,0 +1,38 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-ppc64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-guest/master-key.aes \ +-machine pseries-3.1,accel=tcg,usb=off,dump-guest-core=off \ +-m 4096 \ +-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,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device pci-ohci,id=usb,bus=pci.0,addr=0x1 \ +-drive file=/var/lib/libvirt/images/guest.qcow2,format=qcow2,if=none,\ +id=drive-virtio-disk0 \ +-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=drive-virtio-disk0,\ +id=virtio-disk0,bootindex=1 \ +-chardev pty,id=charserial0 \ +-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.xml b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.xml new file mode 100644 index 0000000000..747de38584 --- /dev/null +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.xml @@ -0,0 +1,22 @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <currentMemory>4194304</currentMemory> + <vcpu>4</vcpu> + <os> + <type arch='ppc64' machine='pseries-3.1'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <devices> + <emulator>/usr/bin/qemu-system-ppc64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + </disk> + <console type='pty'/> + <memballoon model='virtio'/> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.args b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.args new file mode 100644 index 0000000000..4222d4d4aa --- /dev/null +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.args @@ -0,0 +1,38 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-ppc64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-guest/master-key.aes \ +-machine pseries-4.2,accel=tcg,usb=off,dump-guest-core=off \ +-m 4096 \ +-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,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device pci-ohci,id=usb,bus=pci.0,addr=0x1 \ +-drive file=/var/lib/libvirt/images/guest.qcow2,format=qcow2,if=none,\ +id=drive-virtio-disk0 \ +-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=drive-virtio-disk0,\ +id=virtio-disk0,bootindex=1 \ +-chardev pty,id=charserial0 \ +-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.xml b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.xml new file mode 100644 index 0000000000..1e2fef3313 --- /dev/null +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.xml @@ -0,0 +1,22 @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <currentMemory>4194304</currentMemory> + <vcpu>4</vcpu> + <os> + <type arch='ppc64' machine='pseries-4.2'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <devices> + <emulator>/usr/bin/qemu-system-ppc64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + </disk> + <console type='pty'/> + <memballoon model='virtio'/> + </devices> +</domain> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 5a621b7b3c..814cacb70b 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -3024,6 +3024,12 @@ mymain(void) DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-kvm-virt-4.2", "aarch64"); DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-tcg-virt-4.2", "aarch64"); + DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-2.7", "ppc64"); + DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-2.7", "ppc64"); + DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-3.1", "ppc64"); + DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-3.1", "ppc64"); + DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-4.2", "ppc64"); + DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-4.2", "ppc64"); if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL) virFileDeleteTree(fakerootdir); diff --git a/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.xml b/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.xml new file mode 100644 index 0000000000..d0bff449c1 --- /dev/null +++ b/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.xml @@ -0,0 +1,45 @@ +<domain type='kvm'> + <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-2.7'>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-ppc64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </disk> + <controller type='usb' index='0' model='pci-ohci'> + <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> + <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> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </memballoon> + <panic model='pseries'/> + </devices> +</domain> diff --git a/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.xml b/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.xml new file mode 100644 index 0000000000..add48334e7 --- /dev/null +++ b/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.xml @@ -0,0 +1,45 @@ +<domain type='kvm'> + <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-3.1'>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-ppc64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </disk> + <controller type='usb' index='0' model='pci-ohci'> + <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> + <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> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </memballoon> + <panic model='pseries'/> + </devices> +</domain> diff --git a/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.xml b/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.xml new file mode 100644 index 0000000000..9c02766b71 --- /dev/null +++ b/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.xml @@ -0,0 +1,45 @@ +<domain type='kvm'> + <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-4.2'>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-ppc64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </disk> + <controller type='usb' index='0' model='pci-ohci'> + <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> + <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> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </memballoon> + <panic model='pseries'/> + </devices> +</domain> diff --git a/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.xml b/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.xml new file mode 100644 index 0000000000..fc1714a17e --- /dev/null +++ b/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.xml @@ -0,0 +1,45 @@ +<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-2.7'>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-ppc64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </disk> + <controller type='usb' index='0' model='pci-ohci'> + <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> + <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> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </memballoon> + <panic model='pseries'/> + </devices> +</domain> diff --git a/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.xml b/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.xml new file mode 100644 index 0000000000..f40f3be155 --- /dev/null +++ b/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.xml @@ -0,0 +1,45 @@ +<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-3.1'>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-ppc64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </disk> + <controller type='usb' index='0' model='pci-ohci'> + <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> + <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> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </memballoon> + <panic model='pseries'/> + </devices> +</domain> diff --git a/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.xml b/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.xml new file mode 100644 index 0000000000..9582223550 --- /dev/null +++ b/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.xml @@ -0,0 +1,45 @@ +<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-4.2'>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-ppc64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </disk> + <controller type='usb' index='0' model='pci-ohci'> + <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> + <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> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </memballoon> + <panic model='pseries'/> + </devices> +</domain> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 9d7cacc321..fae023d27a 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -1341,6 +1341,12 @@ mymain(void) DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-kvm-virt-4.2", "aarch64"); DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-tcg-virt-4.2", "aarch64"); + DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-2.7", "ppc64"); + DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-2.7", "ppc64"); + DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-3.1", "ppc64"); + DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-3.1", "ppc64"); + DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-4.2", "ppc64"); + DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-4.2", "ppc64"); if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL) virFileDeleteTree(fakerootdir); -- 2.23.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - new patch Version 3: - no change ...t-cpu-kvm-ccw-virtio-4.2.s390x-latest.args | 31 +++++++++++++++++++ .../s390-default-cpu-kvm-ccw-virtio-4.2.xml | 16 ++++++++++ ...t-cpu-tcg-ccw-virtio-4.2.s390x-latest.args | 31 +++++++++++++++++++ .../s390-default-cpu-tcg-ccw-virtio-4.2.xml | 16 ++++++++++ tests/qemuxml2argvtest.c | 2 ++ ...lt-cpu-kvm-ccw-virtio-4.2.s390x-latest.xml | 23 ++++++++++++++ ...lt-cpu-tcg-ccw-virtio-4.2.s390x-latest.xml | 23 ++++++++++++++ tests/qemuxml2xmltest.c | 2 ++ 8 files changed, 144 insertions(+) create mode 100644 tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.args create mode 100644 tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.xml create mode 100644 tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.args create mode 100644 tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.xml create mode 100644 tests/qemuxml2xmloutdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.xml create mode 100644 tests/qemuxml2xmloutdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.xml diff --git a/tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.args b/tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.args new file mode 100644 index 0000000000..d45a87e6ec --- /dev/null +++ b/tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.args @@ -0,0 +1,31 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-test \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-test/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-test/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-test/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-s390x \ +-name guest=test,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-test/master-key.aes \ +-machine s390-ccw-virtio-4.2,accel=kvm,usb=off,dump-guest-core=off \ +-m 256 \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid 9aa4b45c-b9dd-45ef-91fe-862b27b4231f \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device 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/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.xml b/tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.xml new file mode 100644 index 0000000000..405b53db7d --- /dev/null +++ b/tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.xml @@ -0,0 +1,16 @@ +<domain type='kvm'> + <name>test</name> + <uuid>9aa4b45c-b9dd-45ef-91fe-862b27b4231f</uuid> + <memory>262144</memory> + <currentMemory>262144</currentMemory> + <os> + <type arch='s390x' machine='s390-ccw-virtio-4.2'>hvm</type> + </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-s390x</emulator> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.args b/tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.args new file mode 100644 index 0000000000..3d31148613 --- /dev/null +++ b/tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.args @@ -0,0 +1,31 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-test \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-test/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-test/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-test/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-s390x \ +-name guest=test,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-test/master-key.aes \ +-machine s390-ccw-virtio-4.2,accel=tcg,usb=off,dump-guest-core=off \ +-m 256 \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid 9aa4b45c-b9dd-45ef-91fe-862b27b4231f \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device 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/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.xml b/tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.xml new file mode 100644 index 0000000000..c6c92bb08a --- /dev/null +++ b/tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.xml @@ -0,0 +1,16 @@ +<domain type='qemu'> + <name>test</name> + <uuid>9aa4b45c-b9dd-45ef-91fe-862b27b4231f</uuid> + <memory>262144</memory> + <currentMemory>262144</currentMemory> + <os> + <type arch='s390x' machine='s390-ccw-virtio-4.2'>hvm</type> + </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-s390x</emulator> + </devices> +</domain> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 814cacb70b..721b5e0373 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -3030,6 +3030,8 @@ mymain(void) DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-3.1", "ppc64"); DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-4.2", "ppc64"); DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-4.2", "ppc64"); + DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-kvm-ccw-virtio-4.2", "s390x"); + DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-tcg-ccw-virtio-4.2", "s390x"); if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL) virFileDeleteTree(fakerootdir); diff --git a/tests/qemuxml2xmloutdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.xml b/tests/qemuxml2xmloutdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.xml new file mode 100644 index 0000000000..b35de63ab3 --- /dev/null +++ b/tests/qemuxml2xmloutdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.xml @@ -0,0 +1,23 @@ +<domain type='kvm'> + <name>test</name> + <uuid>9aa4b45c-b9dd-45ef-91fe-862b27b4231f</uuid> + <memory unit='KiB'>262144</memory> + <currentMemory unit='KiB'>262144</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='s390x' machine='s390-ccw-virtio-4.2'>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-s390x</emulator> + <controller type='pci' index='0' model='pci-root'/> + <memballoon model='virtio'> + <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/> + </memballoon> + <panic model='s390'/> + </devices> +</domain> diff --git a/tests/qemuxml2xmloutdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.xml b/tests/qemuxml2xmloutdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.xml new file mode 100644 index 0000000000..55149d4a78 --- /dev/null +++ b/tests/qemuxml2xmloutdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.xml @@ -0,0 +1,23 @@ +<domain type='qemu'> + <name>test</name> + <uuid>9aa4b45c-b9dd-45ef-91fe-862b27b4231f</uuid> + <memory unit='KiB'>262144</memory> + <currentMemory unit='KiB'>262144</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='s390x' machine='s390-ccw-virtio-4.2'>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-s390x</emulator> + <controller type='pci' index='0' model='pci-root'/> + <memballoon model='virtio'> + <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/> + </memballoon> + <panic model='s390'/> + </devices> +</domain> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index fae023d27a..0a1598aeea 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -1347,6 +1347,8 @@ mymain(void) DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-3.1", "ppc64"); DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-4.2", "ppc64"); DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-4.2", "ppc64"); + DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-kvm-ccw-virtio-4.2", "s390x"); + DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-tcg-ccw-virtio-4.2", "s390x"); if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL) virFileDeleteTree(fakerootdir); -- 2.23.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- Notes: Version 2: - new patch Version 3: - no change ...-default-cpu-kvm-pc-4.2.x86_64-latest.args | 36 +++++++++++ .../x86_64-default-cpu-kvm-pc-4.2.xml | 24 ++++++++ ...default-cpu-kvm-q35-4.2.x86_64-latest.args | 41 +++++++++++++ .../x86_64-default-cpu-kvm-q35-4.2.xml | 24 ++++++++ ...-default-cpu-tcg-pc-4.2.x86_64-latest.args | 36 +++++++++++ .../x86_64-default-cpu-tcg-pc-4.2.xml | 24 ++++++++ ...default-cpu-tcg-q35-4.2.x86_64-latest.args | 41 +++++++++++++ .../x86_64-default-cpu-tcg-q35-4.2.xml | 24 ++++++++ tests/qemuxml2argvtest.c | 4 ++ ...4-default-cpu-kvm-pc-4.2.x86_64-latest.xml | 37 ++++++++++++ ...-default-cpu-kvm-q35-4.2.x86_64-latest.xml | 60 +++++++++++++++++++ ...4-default-cpu-tcg-pc-4.2.x86_64-latest.xml | 37 ++++++++++++ ...-default-cpu-tcg-q35-4.2.x86_64-latest.xml | 60 +++++++++++++++++++ tests/qemuxml2xmltest.c | 4 ++ 14 files changed, 452 insertions(+) create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.xml create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.xml create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.xml create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.xml create mode 100644 tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.xml diff --git a/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.args b/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.args new file mode 100644 index 0000000000..c7bef11f22 --- /dev/null +++ b/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.args @@ -0,0 +1,36 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-x86_64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-guest/master-key.aes \ +-machine pc-i440fx-4.2,accel=kvm,usb=off,dump-guest-core=off \ +-m 4096 \ +-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,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-drive file=/var/lib/libvirt/images/guest.qcow2,format=qcow2,if=none,\ +id=drive-virtio-disk0 \ +-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=drive-virtio-disk0,\ +id=virtio-disk0,bootindex=1 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.xml b/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.xml new file mode 100644 index 0000000000..ce432ef52f --- /dev/null +++ b/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.xml @@ -0,0 +1,24 @@ +<domain type='kvm'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <currentMemory>4194304</currentMemory> + <vcpu>4</vcpu> + <os> + <type arch='x86_64' machine='pc-i440fx-4.2'>hvm</type> + <boot dev='hd'/> + </os> + <features> + <acpi/> + <apic/> + </features> + <clock offset='utc'/> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + </disk> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.args b/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.args new file mode 100644 index 0000000000..c65d29fc32 --- /dev/null +++ b/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.args @@ -0,0 +1,41 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-x86_64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-guest/master-key.aes \ +-machine pc-q35-4.2,accel=kvm,usb=off,dump-guest-core=off \ +-m 4096 \ +-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,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device pcie-root-port,port=0x8,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,\ +addr=0x1 \ +-device pcie-root-port,port=0x9,chassis=2,id=pci.2,bus=pcie.0,addr=0x1.0x1 \ +-device pcie-root-port,port=0xa,chassis=3,id=pci.3,bus=pcie.0,addr=0x1.0x2 \ +-device pcie-root-port,port=0xb,chassis=4,id=pci.4,bus=pcie.0,addr=0x1.0x3 \ +-device qemu-xhci,id=usb,bus=pci.1,addr=0x0 \ +-drive file=/var/lib/libvirt/images/guest.qcow2,format=qcow2,if=none,\ +id=drive-virtio-disk0 \ +-device virtio-blk-pci,scsi=off,bus=pci.2,addr=0x0,drive=drive-virtio-disk0,\ +id=virtio-disk0,bootindex=1 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.3,addr=0x0 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.xml b/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.xml new file mode 100644 index 0000000000..bf2678e674 --- /dev/null +++ b/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.xml @@ -0,0 +1,24 @@ +<domain type='kvm'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <currentMemory>4194304</currentMemory> + <vcpu>4</vcpu> + <os> + <type arch='x86_64' machine='pc-q35-4.2'>hvm</type> + <boot dev='hd'/> + </os> + <features> + <acpi/> + <apic/> + </features> + <clock offset='utc'/> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + </disk> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.args b/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.args new file mode 100644 index 0000000000..1c233243ad --- /dev/null +++ b/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.args @@ -0,0 +1,36 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-x86_64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-guest/master-key.aes \ +-machine pc-i440fx-4.2,accel=tcg,usb=off,dump-guest-core=off \ +-m 4096 \ +-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,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-drive file=/var/lib/libvirt/images/guest.qcow2,format=qcow2,if=none,\ +id=drive-virtio-disk0 \ +-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=drive-virtio-disk0,\ +id=virtio-disk0,bootindex=1 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.xml b/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.xml new file mode 100644 index 0000000000..8e77a3ad92 --- /dev/null +++ b/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.xml @@ -0,0 +1,24 @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <currentMemory>4194304</currentMemory> + <vcpu>4</vcpu> + <os> + <type arch='x86_64' machine='pc-i440fx-4.2'>hvm</type> + <boot dev='hd'/> + </os> + <features> + <acpi/> + <apic/> + </features> + <clock offset='utc'/> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + </disk> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.args b/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.args new file mode 100644 index 0000000000..505eeb44b3 --- /dev/null +++ b/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.args @@ -0,0 +1,41 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-guest \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-x86_64 \ +-name guest=guest,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-guest/master-key.aes \ +-machine pc-q35-4.2,accel=tcg,usb=off,dump-guest-core=off \ +-m 4096 \ +-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,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device pcie-root-port,port=0x8,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,\ +addr=0x1 \ +-device pcie-root-port,port=0x9,chassis=2,id=pci.2,bus=pcie.0,addr=0x1.0x1 \ +-device pcie-root-port,port=0xa,chassis=3,id=pci.3,bus=pcie.0,addr=0x1.0x2 \ +-device pcie-root-port,port=0xb,chassis=4,id=pci.4,bus=pcie.0,addr=0x1.0x3 \ +-device qemu-xhci,id=usb,bus=pci.1,addr=0x0 \ +-drive file=/var/lib/libvirt/images/guest.qcow2,format=qcow2,if=none,\ +id=drive-virtio-disk0 \ +-device virtio-blk-pci,scsi=off,bus=pci.2,addr=0x0,drive=drive-virtio-disk0,\ +id=virtio-disk0,bootindex=1 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.3,addr=0x0 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.xml b/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.xml new file mode 100644 index 0000000000..4e3b341800 --- /dev/null +++ b/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.xml @@ -0,0 +1,24 @@ +<domain type='qemu'> + <name>guest</name> + <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid> + <memory>4194304</memory> + <currentMemory>4194304</currentMemory> + <vcpu>4</vcpu> + <os> + <type arch='x86_64' machine='pc-q35-4.2'>hvm</type> + <boot dev='hd'/> + </os> + <features> + <acpi/> + <apic/> + </features> + <clock offset='utc'/> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + </disk> + </devices> +</domain> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 721b5e0373..5009f6bd4e 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -3032,6 +3032,10 @@ mymain(void) DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-4.2", "ppc64"); DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-kvm-ccw-virtio-4.2", "s390x"); DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-tcg-ccw-virtio-4.2", "s390x"); + DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-kvm-pc-4.2", "x86_64"); + DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-pc-4.2", "x86_64"); + DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-kvm-q35-4.2", "x86_64"); + DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-q35-4.2", "x86_64"); if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL) virFileDeleteTree(fakerootdir); diff --git a/tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.xml b/tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.xml new file mode 100644 index 0000000000..1f24dee8e7 --- /dev/null +++ b/tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.xml @@ -0,0 +1,37 @@ +<domain type='kvm'> + <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-i440fx-4.2'>hvm</type> + <boot dev='hd'/> + </os> + <features> + <acpi/> + <apic/> + </features> + <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='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </disk> + <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'/> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.xml b/tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.xml new file mode 100644 index 0000000000..39a7013b67 --- /dev/null +++ b/tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.xml @@ -0,0 +1,60 @@ +<domain type='kvm'> + <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-q35-4.2'>hvm</type> + <boot dev='hd'/> + </os> + <features> + <acpi/> + <apic/> + </features> + <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='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> + </disk> + <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> + <controller type='pci' index='4' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='4' port='0xb'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/> + </controller> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.xml b/tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.xml new file mode 100644 index 0000000000..b45ad4c051 --- /dev/null +++ b/tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.xml @@ -0,0 +1,37 @@ +<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-i440fx-4.2'>hvm</type> + <boot dev='hd'/> + </os> + <features> + <acpi/> + <apic/> + </features> + <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='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </disk> + <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'/> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.xml b/tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.xml new file mode 100644 index 0000000000..c6a85977e9 --- /dev/null +++ b/tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.xml @@ -0,0 +1,60 @@ +<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-q35-4.2'>hvm</type> + <boot dev='hd'/> + </os> + <features> + <acpi/> + <apic/> + </features> + <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='file' device='disk'> + <driver name='qemu' type='qcow2'/> + <source file='/var/lib/libvirt/images/guest.qcow2'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> + </disk> + <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> + <controller type='pci' index='4' model='pcie-root-port'> + <model name='pcie-root-port'/> + <target chassis='4' port='0xb'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/> + </controller> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 0a1598aeea..311511dd30 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -1349,6 +1349,10 @@ mymain(void) DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-4.2", "ppc64"); DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-kvm-ccw-virtio-4.2", "s390x"); DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-tcg-ccw-virtio-4.2", "s390x"); + DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-kvm-pc-4.2", "x86_64"); + DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-pc-4.2", "x86_64"); + DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-kvm-q35-4.2", "x86_64"); + DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-q35-4.2", "x86_64"); if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL) virFileDeleteTree(fakerootdir); -- 2.23.0

When starting a domain without a CPU model specified in the domain XML, QEMU will choose a default one. Which is fine unless the domain gets migrated to another host because libvirt doesn't perform any CPU ABI checks and the virtual CPU provided by QEMU on the destination host can differ from the one on the source host. With QEMU 4.2.0 we can probe for the default CPU model used by QEMU for a particular machine type and store it in the domain XML. This way the chosen CPU model is more visible to users and libvirt will make sure the guest will see the exact same CPU after migration. Architecture specific notes - aarch64: We only set the default CPU for TCG domains as KVM requires explicit "-cpu host" to work. - ppc64: The default CPU for KVM is "host" thanks to some hacks in QEMU, we will translate the default model to the model corresponding to the host CPU ("POWER8" on a Power8 host, "POWER9" on Power9 host, etc.). This is not a problem as the corresponding CPU model is in fact an alias for "host". This is probably not ideal, but it's not wrong and the default virtual CPU configured by libvirt is the same QEMU would use. TCG uses various CPU models depending on machine type and its version. - s390x: The default CPU for KVM is "host" while TCG defaults to "qemu". - x86_64: The default CPU model (qemu64) is not runnable on any host with KVM, but QEMU just disables unavailable features and starts happily. https://bugzilla.redhat.com/show_bug.cgi?id=1598151 https://bugzilla.redhat.com/show_bug.cgi?id=1598162 Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - new test cases Version 3: - enable default CPU for KVM on s390 and ppc64 - handle "host" default CPU src/qemu/qemu_domain.c | 61 +++++++++++++++++++ ...fault-cpu-tcg-virt-4.2.aarch64-latest.args | 1 + .../disk-cache.x86_64-latest.args | 1 + .../disk-cdrom-network.x86_64-latest.args | 1 + .../disk-cdrom-tray.x86_64-latest.args | 1 + .../disk-copy_on_read.x86_64-latest.args | 1 + .../disk-detect-zeroes.x86_64-latest.args | 1 + .../disk-floppy-q35-2_11.x86_64-latest.args | 1 + .../disk-floppy-q35-2_9.x86_64-latest.args | 1 + .../os-firmware-bios.x86_64-latest.args | 1 + ...os-firmware-efi-secboot.x86_64-latest.args | 1 + .../os-firmware-efi.x86_64-latest.args | 1 + ...ault-cpu-kvm-pseries-2.7.ppc64-latest.args | 1 + ...ault-cpu-kvm-pseries-3.1.ppc64-latest.args | 1 + ...ault-cpu-kvm-pseries-4.2.ppc64-latest.args | 1 + ...ault-cpu-tcg-pseries-2.7.ppc64-latest.args | 1 + ...ault-cpu-tcg-pseries-3.1.ppc64-latest.args | 1 + ...ault-cpu-tcg-pseries-4.2.ppc64-latest.args | 1 + ...t-cpu-kvm-ccw-virtio-4.2.s390x-latest.args | 1 + ...t-cpu-tcg-ccw-virtio-4.2.s390x-latest.args | 1 + .../tpm-emulator-tpm2-enc.x86_64-latest.args | 1 + .../tpm-emulator-tpm2.x86_64-latest.args | 1 + .../tpm-emulator.x86_64-latest.args | 1 + .../tseg-explicit-size.x86_64-latest.args | 1 + .../vhost-vsock-auto.x86_64-latest.args | 1 + .../vhost-vsock.x86_64-latest.args | 1 + ...-default-cpu-kvm-pc-4.2.x86_64-latest.args | 1 + ...default-cpu-kvm-q35-4.2.x86_64-latest.args | 1 + ...-default-cpu-tcg-pc-4.2.x86_64-latest.args | 1 + ...default-cpu-tcg-q35-4.2.x86_64-latest.args | 1 + ...efault-cpu-tcg-virt-4.2.aarch64-latest.xml | 3 + .../os-firmware-bios.x86_64-latest.xml | 3 + .../os-firmware-efi-secboot.x86_64-latest.xml | 3 + .../os-firmware-efi.x86_64-latest.xml | 3 + ...fault-cpu-kvm-pseries-2.7.ppc64-latest.xml | 3 + ...fault-cpu-kvm-pseries-3.1.ppc64-latest.xml | 3 + ...fault-cpu-kvm-pseries-4.2.ppc64-latest.xml | 3 + ...fault-cpu-tcg-pseries-2.7.ppc64-latest.xml | 3 + ...fault-cpu-tcg-pseries-3.1.ppc64-latest.xml | 3 + ...fault-cpu-tcg-pseries-4.2.ppc64-latest.xml | 3 + ...lt-cpu-kvm-ccw-virtio-4.2.s390x-latest.xml | 1 + ...lt-cpu-tcg-ccw-virtio-4.2.s390x-latest.xml | 3 + .../tpm-emulator-tpm2-enc.x86_64-latest.xml | 3 + .../tpm-emulator-tpm2.x86_64-latest.xml | 3 + .../tpm-emulator.x86_64-latest.xml | 3 + .../tpm-passthrough-crb.x86_64-latest.xml | 3 + .../tpm-passthrough.x86_64-latest.xml | 3 + ...4-default-cpu-kvm-pc-4.2.x86_64-latest.xml | 3 + ...-default-cpu-kvm-q35-4.2.x86_64-latest.xml | 3 + ...4-default-cpu-tcg-pc-4.2.x86_64-latest.xml | 3 + ...-default-cpu-tcg-q35-4.2.x86_64-latest.xml | 3 + 51 files changed, 151 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 7e470c602a..a90a45c517 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4463,6 +4463,64 @@ qemuDomainDefVcpusPostParse(virDomainDefPtr def) } +static int +qemuDomainDefSetDefaultCPU(virDomainDefPtr def, + virQEMUCapsPtr qemuCaps) +{ + const char *model; + + if (def->cpu && + (def->cpu->mode != VIR_CPU_MODE_CUSTOM || + def->cpu->model)) + return 0; + + /* Default CPU model info from QEMU is usable for TCG only except for + * x86, s390, and ppc64. */ + if (!ARCH_IS_X86(def->os.arch) && + !ARCH_IS_S390(def->os.arch) && + !ARCH_IS_PPC64(def->os.arch) && + def->virtType != VIR_DOMAIN_VIRT_QEMU) + return 0; + + model = virQEMUCapsGetMachineDefaultCPU(qemuCaps, def->os.machine, def->virtType); + if (!model) { + VIR_DEBUG("Unknown default CPU model for domain '%s'", def->name); + return 0; + } + + if (STREQ(model, "host") && def->virtType != VIR_DOMAIN_VIRT_KVM) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("QEMU reports invalid default CPU model \"host\" " + "for non-kvm domain virt type")); + return -1; + } + + VIR_DEBUG("Setting default CPU model for domain '%s' to %s", + def->name, model); + + if (!def->cpu) + def->cpu = g_new0(virCPUDef, 1); + + /* We need to turn off all CPU checks when the domain is started because + * the default CPU (e.g., qemu64) may not be runnable on any host. QEMU + * will just disable the unavailable features and we will update the CPU + * definition accordingly and set check to FULL when starting the domain. */ + def->cpu->type = VIR_CPU_TYPE_GUEST; + def->cpu->check = VIR_CPU_CHECK_NONE; + + if (STREQ(model, "host")) { + def->cpu->mode = VIR_CPU_MODE_HOST_PASSTHROUGH; + } else { + def->cpu->mode = VIR_CPU_MODE_CUSTOM; + def->cpu->match = VIR_CPU_MATCH_EXACT; + def->cpu->fallback = VIR_CPU_FALLBACK_FORBID; + def->cpu->model = g_strdup(model); + } + + return 0; +} + + static int qemuDomainDefCPUPostParse(virDomainDefPtr def) { @@ -4637,6 +4695,9 @@ qemuDomainDefPostParse(virDomainDefPtr def, if (qemuCanonicalizeMachine(def, qemuCaps) < 0) return -1; + if (qemuDomainDefSetDefaultCPU(def, qemuCaps) < 0) + return -1; + qemuDomainDefEnableDefaultFeatures(def, qemuCaps); if (qemuDomainRecheckInternalPaths(def, cfg, parseFlags) < 0) diff --git a/tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.args b/tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.args index 5ecbe1fdd6..5305c23464 100644 --- a/tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.args +++ b/tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-guest/master-key.aes \ -machine virt-4.2,accel=tcg,usb=off,dump-guest-core=off,gic-version=2 \ +-cpu cortex-a15 \ -m 4096 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/disk-cache.x86_64-latest.args b/tests/qemuxml2argvdata/disk-cache.x86_64-latest.args index 7ea6d5b4d5..01d3b9d490 100644 --- a/tests/qemuxml2argvdata/disk-cache.x86_64-latest.args +++ b/tests/qemuxml2argvdata/disk-cache.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ -machine pc-i440fx-2.6,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 214 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/disk-cdrom-network.x86_64-latest.args b/tests/qemuxml2argvdata/disk-cdrom-network.x86_64-latest.args index cf711c0a3f..e0d2eb049d 100644 --- a/tests/qemuxml2argvdata/disk-cdrom-network.x86_64-latest.args +++ b/tests/qemuxml2argvdata/disk-cdrom-network.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ -machine pc-1.2,accel=kvm,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 1024 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/disk-cdrom-tray.x86_64-latest.args b/tests/qemuxml2argvdata/disk-cdrom-tray.x86_64-latest.args index ad17416851..21542db4c2 100644 --- a/tests/qemuxml2argvdata/disk-cdrom-tray.x86_64-latest.args +++ b/tests/qemuxml2argvdata/disk-cdrom-tray.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-test/master-key.aes \ -machine pc-0.13,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 1024 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/disk-copy_on_read.x86_64-latest.args b/tests/qemuxml2argvdata/disk-copy_on_read.x86_64-latest.args index 1f1d37c957..8552f9f00e 100644 --- a/tests/qemuxml2argvdata/disk-copy_on_read.x86_64-latest.args +++ b/tests/qemuxml2argvdata/disk-copy_on_read.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-test/master-key.aes \ -machine pc-0.13,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 1024 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/disk-detect-zeroes.x86_64-latest.args b/tests/qemuxml2argvdata/disk-detect-zeroes.x86_64-latest.args index b48c0f8d43..2a01647e50 100644 --- a/tests/qemuxml2argvdata/disk-detect-zeroes.x86_64-latest.args +++ b/tests/qemuxml2argvdata/disk-detect-zeroes.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-test/master-key.aes \ -machine pc-0.13,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 1024 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/disk-floppy-q35-2_11.x86_64-latest.args b/tests/qemuxml2argvdata/disk-floppy-q35-2_11.x86_64-latest.args index 02e2b1e76c..fadd5a6d7e 100644 --- a/tests/qemuxml2argvdata/disk-floppy-q35-2_11.x86_64-latest.args +++ b/tests/qemuxml2argvdata/disk-floppy-q35-2_11.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ -machine pc-q35-2.11,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 214 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/disk-floppy-q35-2_9.x86_64-latest.args b/tests/qemuxml2argvdata/disk-floppy-q35-2_9.x86_64-latest.args index a158e8e3d3..4c932a7365 100644 --- a/tests/qemuxml2argvdata/disk-floppy-q35-2_9.x86_64-latest.args +++ b/tests/qemuxml2argvdata/disk-floppy-q35-2_9.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ -machine pc-q35-2.9,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 214 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/os-firmware-bios.x86_64-latest.args b/tests/qemuxml2argvdata/os-firmware-bios.x86_64-latest.args index 7d6108ec24..4391c6eda2 100644 --- a/tests/qemuxml2argvdata/os-firmware-bios.x86_64-latest.args +++ b/tests/qemuxml2argvdata/os-firmware-bios.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-fedora/master-key.aes \ -machine pc-q35-4.0,accel=kvm,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -bios /usr/share/seabios/bios-256k.bin \ -m 8 \ -overcommit mem-lock=off \ diff --git a/tests/qemuxml2argvdata/os-firmware-efi-secboot.x86_64-latest.args b/tests/qemuxml2argvdata/os-firmware-efi-secboot.x86_64-latest.args index d8f356ea07..4de135beb8 100644 --- a/tests/qemuxml2argvdata/os-firmware-efi-secboot.x86_64-latest.args +++ b/tests/qemuxml2argvdata/os-firmware-efi-secboot.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-fedora/master-key.aes \ -machine pc-q35-4.0,accel=kvm,usb=off,smm=on,dump-guest-core=off \ +-cpu qemu64 \ -global driver=cfi.pflash01,property=secure,value=on \ -drive file=/usr/share/OVMF/OVMF_CODE.secboot.fd,if=pflash,format=raw,unit=0,\ readonly=on \ diff --git a/tests/qemuxml2argvdata/os-firmware-efi.x86_64-latest.args b/tests/qemuxml2argvdata/os-firmware-efi.x86_64-latest.args index e4dda734b0..7eba20e443 100644 --- a/tests/qemuxml2argvdata/os-firmware-efi.x86_64-latest.args +++ b/tests/qemuxml2argvdata/os-firmware-efi.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-fedora/master-key.aes \ -machine pc-q35-4.0,accel=kvm,usb=off,smm=on,dump-guest-core=off \ +-cpu qemu64 \ -drive file=/usr/share/OVMF/OVMF_CODE.secboot.fd,if=pflash,format=raw,unit=0,\ readonly=on \ -drive file=/var/lib/libvirt/qemu/nvram/fedora_VARS.fd,if=pflash,format=raw,\ diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.args b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.args index d264659d49..e177d06c8b 100644 --- a/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.args +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-guest/master-key.aes \ -machine pseries-2.7,accel=kvm,usb=off,dump-guest-core=off \ +-cpu POWER8 \ -m 4096 \ -overcommit mem-lock=off \ -smp 4,sockets=4,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.args b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.args index 88f3b4ba26..61f39f27fd 100644 --- a/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.args +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-guest/master-key.aes \ -machine pseries-3.1,accel=kvm,usb=off,dump-guest-core=off \ +-cpu POWER8 \ -m 4096 \ -overcommit mem-lock=off \ -smp 4,sockets=4,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.args b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.args index ea27f424cb..e591db0d8c 100644 --- a/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.args +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-guest/master-key.aes \ -machine pseries-4.2,accel=kvm,usb=off,dump-guest-core=off \ +-cpu POWER8 \ -m 4096 \ -overcommit mem-lock=off \ -smp 4,sockets=4,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.args b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.args index c97fa531ae..06946dcbd9 100644 --- a/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.args +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-guest/master-key.aes \ -machine pseries-2.7,accel=tcg,usb=off,dump-guest-core=off \ +-cpu POWER7 \ -m 4096 \ -overcommit mem-lock=off \ -smp 4,sockets=4,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.args b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.args index fbad53b0fb..6090a1bbad 100644 --- a/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.args +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-guest/master-key.aes \ -machine pseries-3.1,accel=tcg,usb=off,dump-guest-core=off \ +-cpu POWER8 \ -m 4096 \ -overcommit mem-lock=off \ -smp 4,sockets=4,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.args b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.args index 4222d4d4aa..7804a7b220 100644 --- a/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.args +++ b/tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-guest/master-key.aes \ -machine pseries-4.2,accel=tcg,usb=off,dump-guest-core=off \ +-cpu POWER9 \ -m 4096 \ -overcommit mem-lock=off \ -smp 4,sockets=4,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.args b/tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.args index d45a87e6ec..4b7345630b 100644 --- a/tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.args +++ b/tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-test/master-key.aes \ -machine s390-ccw-virtio-4.2,accel=kvm,usb=off,dump-guest-core=off \ +-cpu host \ -m 256 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.args b/tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.args index 3d31148613..c7bd0c3840 100644 --- a/tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.args +++ b/tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-test/master-key.aes \ -machine s390-ccw-virtio-4.2,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu \ -m 256 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/tpm-emulator-tpm2-enc.x86_64-latest.args b/tests/qemuxml2argvdata/tpm-emulator-tpm2-enc.x86_64-latest.args index 3c8dc8e483..2455e14cfe 100644 --- a/tests/qemuxml2argvdata/tpm-emulator-tpm2-enc.x86_64-latest.args +++ b/tests/qemuxml2argvdata/tpm-emulator-tpm2-enc.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-TPM-VM/master-key.aes \ -machine pc-i440fx-2.12,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 2048 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/tpm-emulator-tpm2.x86_64-latest.args b/tests/qemuxml2argvdata/tpm-emulator-tpm2.x86_64-latest.args index 3c8dc8e483..2455e14cfe 100644 --- a/tests/qemuxml2argvdata/tpm-emulator-tpm2.x86_64-latest.args +++ b/tests/qemuxml2argvdata/tpm-emulator-tpm2.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-TPM-VM/master-key.aes \ -machine pc-i440fx-2.12,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 2048 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/tpm-emulator.x86_64-latest.args b/tests/qemuxml2argvdata/tpm-emulator.x86_64-latest.args index 3c8dc8e483..2455e14cfe 100644 --- a/tests/qemuxml2argvdata/tpm-emulator.x86_64-latest.args +++ b/tests/qemuxml2argvdata/tpm-emulator.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-TPM-VM/master-key.aes \ -machine pc-i440fx-2.12,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 2048 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/tseg-explicit-size.x86_64-latest.args b/tests/qemuxml2argvdata/tseg-explicit-size.x86_64-latest.args index 2fece310e7..53dab283cc 100644 --- a/tests/qemuxml2argvdata/tseg-explicit-size.x86_64-latest.args +++ b/tests/qemuxml2argvdata/tseg-explicit-size.x86_64-latest.args @@ -14,6 +14,7 @@ QEMU_AUDIO_DRV=none \ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ -machine pc-q35-2.10,accel=tcg,usb=off,smm=on,dump-guest-core=off \ -global mch.extended-tseg-mbytes=48 \ +-cpu qemu64 \ -m 214 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/vhost-vsock-auto.x86_64-latest.args b/tests/qemuxml2argvdata/vhost-vsock-auto.x86_64-latest.args index b5d3ff2204..e083b872c5 100644 --- a/tests/qemuxml2argvdata/vhost-vsock-auto.x86_64-latest.args +++ b/tests/qemuxml2argvdata/vhost-vsock-auto.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-test/master-key.aes \ -machine pc-i440fx-2.9,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 1024 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/vhost-vsock.x86_64-latest.args b/tests/qemuxml2argvdata/vhost-vsock.x86_64-latest.args index 76df9d2d4d..1b0ffee6e8 100644 --- a/tests/qemuxml2argvdata/vhost-vsock.x86_64-latest.args +++ b/tests/qemuxml2argvdata/vhost-vsock.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-test/master-key.aes \ -machine pc-0.13,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 1024 \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.args b/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.args index c7bef11f22..7a335bc0c4 100644 --- a/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.args +++ b/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-guest/master-key.aes \ -machine pc-i440fx-4.2,accel=kvm,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 4096 \ -overcommit mem-lock=off \ -smp 4,sockets=4,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.args b/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.args index c65d29fc32..88a634fc68 100644 --- a/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.args +++ b/tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-guest/master-key.aes \ -machine pc-q35-4.2,accel=kvm,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 4096 \ -overcommit mem-lock=off \ -smp 4,sockets=4,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.args b/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.args index 1c233243ad..5f11a07a19 100644 --- a/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.args +++ b/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-guest/master-key.aes \ -machine pc-i440fx-4.2,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 4096 \ -overcommit mem-lock=off \ -smp 4,sockets=4,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.args b/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.args index 505eeb44b3..1c9330f720 100644 --- a/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.args +++ b/tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.args @@ -13,6 +13,7 @@ QEMU_AUDIO_DRV=none \ -object secret,id=masterKey0,format=raw,\ file=/tmp/lib/domain--1-guest/master-key.aes \ -machine pc-q35-4.2,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu64 \ -m 4096 \ -overcommit mem-lock=off \ -smp 4,sockets=4,cores=1,threads=1 \ diff --git a/tests/qemuxml2xmloutdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.xml b/tests/qemuxml2xmloutdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.xml index 1f4104857a..c0aa2f39ee 100644 --- a/tests/qemuxml2xmloutdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.xml +++ b/tests/qemuxml2xmloutdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.xml @@ -11,6 +11,9 @@ <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> diff --git a/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml b/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml index 63886666dd..60d3498765 100644 --- a/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml +++ b/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml @@ -16,6 +16,9 @@ <apic/> <pae/> </features> + <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> diff --git a/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml b/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml index a285e06334..938da73711 100644 --- a/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml +++ b/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml @@ -16,6 +16,9 @@ <apic/> <pae/> </features> + <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> diff --git a/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml b/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml index 46a7b1b780..97ce8a75c7 100644 --- a/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml +++ b/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml @@ -16,6 +16,9 @@ <apic/> <pae/> </features> + <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> diff --git a/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.xml b/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.xml index d0bff449c1..246462c719 100644 --- a/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.xml +++ b/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.xml @@ -8,6 +8,9 @@ <type arch='ppc64' machine='pseries-2.7'>hvm</type> <boot dev='hd'/> </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>POWER8</model> + </cpu> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> diff --git a/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.xml b/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.xml index add48334e7..392c075073 100644 --- a/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.xml +++ b/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.xml @@ -8,6 +8,9 @@ <type arch='ppc64' machine='pseries-3.1'>hvm</type> <boot dev='hd'/> </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>POWER8</model> + </cpu> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> diff --git a/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.xml b/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.xml index 9c02766b71..2306dcd7f0 100644 --- a/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.xml +++ b/tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.xml @@ -8,6 +8,9 @@ <type arch='ppc64' machine='pseries-4.2'>hvm</type> <boot dev='hd'/> </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>POWER8</model> + </cpu> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> diff --git a/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.xml b/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.xml index fc1714a17e..e76766ff5a 100644 --- a/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.xml +++ b/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.xml @@ -8,6 +8,9 @@ <type arch='ppc64' machine='pseries-2.7'>hvm</type> <boot dev='hd'/> </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>POWER7</model> + </cpu> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> diff --git a/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.xml b/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.xml index f40f3be155..c1d619a9cb 100644 --- a/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.xml +++ b/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.xml @@ -8,6 +8,9 @@ <type arch='ppc64' machine='pseries-3.1'>hvm</type> <boot dev='hd'/> </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>POWER8</model> + </cpu> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> diff --git a/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.xml b/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.xml index 9582223550..311a7ad9da 100644 --- a/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.xml +++ b/tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.xml @@ -8,6 +8,9 @@ <type arch='ppc64' machine='pseries-4.2'>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> diff --git a/tests/qemuxml2xmloutdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.xml b/tests/qemuxml2xmloutdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.xml index b35de63ab3..eec5051934 100644 --- a/tests/qemuxml2xmloutdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.xml +++ b/tests/qemuxml2xmloutdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.xml @@ -8,6 +8,7 @@ <type arch='s390x' machine='s390-ccw-virtio-4.2'>hvm</type> <boot dev='hd'/> </os> + <cpu mode='host-passthrough' check='none'/> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> diff --git a/tests/qemuxml2xmloutdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.xml b/tests/qemuxml2xmloutdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.xml index 55149d4a78..8ccd460d01 100644 --- a/tests/qemuxml2xmloutdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.xml +++ b/tests/qemuxml2xmloutdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.xml @@ -8,6 +8,9 @@ <type arch='s390x' machine='s390-ccw-virtio-4.2'>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> diff --git a/tests/qemuxml2xmloutdata/tpm-emulator-tpm2-enc.x86_64-latest.xml b/tests/qemuxml2xmloutdata/tpm-emulator-tpm2-enc.x86_64-latest.xml index dcd504310f..8a842e4d22 100644 --- a/tests/qemuxml2xmloutdata/tpm-emulator-tpm2-enc.x86_64-latest.xml +++ b/tests/qemuxml2xmloutdata/tpm-emulator-tpm2-enc.x86_64-latest.xml @@ -12,6 +12,9 @@ <features> <acpi/> </features> + <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> diff --git a/tests/qemuxml2xmloutdata/tpm-emulator-tpm2.x86_64-latest.xml b/tests/qemuxml2xmloutdata/tpm-emulator-tpm2.x86_64-latest.xml index 625aaa5f60..9143a1dde1 100644 --- a/tests/qemuxml2xmloutdata/tpm-emulator-tpm2.x86_64-latest.xml +++ b/tests/qemuxml2xmloutdata/tpm-emulator-tpm2.x86_64-latest.xml @@ -12,6 +12,9 @@ <features> <acpi/> </features> + <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> diff --git a/tests/qemuxml2xmloutdata/tpm-emulator.x86_64-latest.xml b/tests/qemuxml2xmloutdata/tpm-emulator.x86_64-latest.xml index 002af76c21..ff4006b2e3 100644 --- a/tests/qemuxml2xmloutdata/tpm-emulator.x86_64-latest.xml +++ b/tests/qemuxml2xmloutdata/tpm-emulator.x86_64-latest.xml @@ -12,6 +12,9 @@ <features> <acpi/> </features> + <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> diff --git a/tests/qemuxml2xmloutdata/tpm-passthrough-crb.x86_64-latest.xml b/tests/qemuxml2xmloutdata/tpm-passthrough-crb.x86_64-latest.xml index ef68c2d0d7..b8be67acfd 100644 --- a/tests/qemuxml2xmloutdata/tpm-passthrough-crb.x86_64-latest.xml +++ b/tests/qemuxml2xmloutdata/tpm-passthrough-crb.x86_64-latest.xml @@ -12,6 +12,9 @@ <features> <acpi/> </features> + <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> diff --git a/tests/qemuxml2xmloutdata/tpm-passthrough.x86_64-latest.xml b/tests/qemuxml2xmloutdata/tpm-passthrough.x86_64-latest.xml index 2a99f35cf8..669992bcf6 100644 --- a/tests/qemuxml2xmloutdata/tpm-passthrough.x86_64-latest.xml +++ b/tests/qemuxml2xmloutdata/tpm-passthrough.x86_64-latest.xml @@ -12,6 +12,9 @@ <features> <acpi/> </features> + <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> diff --git a/tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.xml b/tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.xml index 1f24dee8e7..c7b0f11cf8 100644 --- a/tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.xml +++ b/tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.xml @@ -12,6 +12,9 @@ <acpi/> <apic/> </features> + <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> diff --git a/tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.xml b/tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.xml index 39a7013b67..be211acd29 100644 --- a/tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.xml +++ b/tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.xml @@ -12,6 +12,9 @@ <acpi/> <apic/> </features> + <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> diff --git a/tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.xml b/tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.xml index b45ad4c051..159270b83a 100644 --- a/tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.xml +++ b/tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.xml @@ -12,6 +12,9 @@ <acpi/> <apic/> </features> + <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> diff --git a/tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.xml b/tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.xml index c6a85977e9..b95e146c81 100644 --- a/tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.xml +++ b/tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.xml @@ -12,6 +12,9 @@ <acpi/> <apic/> </features> + <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> -- 2.23.0

On Tue, Nov 05, 2019 at 02:27:50PM +0100, Jiri Denemark wrote:
When starting a domain without a CPU model specified in the domain XML, QEMU will choose a default one. Which is fine unless the domain gets migrated to another host because libvirt doesn't perform any CPU ABI checks and the virtual CPU provided by QEMU on the destination host can differ from the one on the source host.
With QEMU 4.2.0 we can probe for the default CPU model used by QEMU for a particular machine type and store it in the domain XML. This way the chosen CPU model is more visible to users and libvirt will make sure the guest will see the exact same CPU after migration.
Architecture specific notes - aarch64: We only set the default CPU for TCG domains as KVM requires explicit "-cpu host" to work.
- ppc64: The default CPU for KVM is "host" thanks to some hacks in QEMU, we will translate the default model to the model corresponding to the host CPU ("POWER8" on a Power8 host, "POWER9" on Power9 host, etc.). This is not a problem as the corresponding CPU model is in fact an alias for "host". This is probably not ideal, but it's not wrong and the default virtual CPU configured by libvirt is the same QEMU would use. TCG uses various CPU models depending on machine type and its version.
- s390x: The default CPU for KVM is "host" while TCG defaults to "qemu".
- x86_64: The default CPU model (qemu64) is not runnable on any host with KVM, but QEMU just disables unavailable features and starts happily.
https://bugzilla.redhat.com/show_bug.cgi?id=1598151 https://bugzilla.redhat.com/show_bug.cgi?id=1598162
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - new test cases
Version 3: - enable default CPU for KVM on s390 and ppc64 - handle "host" default CPU
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

As discussed, does it make sense to add the default change to host-model for s390 in this series or should that be a separate patch? On 05.11.19 14:26, Jiri Denemark wrote:
When starting a domain without a CPU model specified in the domain XML, QEMU will choose a default one. Which is fine unless the domain gets migrated to another host because libvirt doesn't perform any CPU ABI checks and the virtual CPU provided by QEMU on the destination host can differ from the one on the source host.
With QEMU 4.2.0 we can probe for the default CPU model used by QEMU for a particular machine type and store it in the domain XML. This way the chosen CPU model is more visible to users and libvirt will make sure the guest will see the exact same CPU after migration.
https://bugzilla.redhat.com/show_bug.cgi?id=1598151 https://bugzilla.redhat.com/show_bug.cgi?id=1598162
Version 2: - more tests - TCG-only support for non x86_64 architectures
Version 3: - as a result of talking with QEMU developers dealing with s390 and ppc64 I have to enhance the series so that libvirt is able to fetch different default CPU models on TCG vs. KVM
---
Some patches were too large so I decided to shorten them before sending to the list. You can check the full version of this series with
git fetch https://gitlab.com/jirkade/libvirt cpu-default-type
Jiri Denemark (52): tests: Add capabilities for QEMU 4.2.0 on s390x tests: Update 4.2.0 capabilities data on ppc64 conf: Use VIR_AUTO* in virDomainCapsCPUModelsAdd conf: Drop nameLen parameter from virDomainCapsCPUModelsAdd qemu: Copy CPU models in virQEMUCapsGetCPUDefinitions qemu: Filter models in virQEMUCapsGetCPUDefinitions qemu: Use virQEMUCapsGetCPUDefinitions more qemu: Use g_autoptr in qemuMonitorJSONGetCPUDefinitions qemu: Change return type of virQEMUCapsFetchCPUDefinitions qemu: Introduce qemuMonitorCPUDefs struct qemu: Flatten qemuMonitorCPUDefs.cpus qemu: Add qemuMonitorCPUDefsCopy qemu: Use g_autofree in virQEMUCapsLoadCPUModels qemu: Use virDomainCapsCPUUsable in qemuMonitorCPUDefInfo qemu: Introduce virQEMUCapsCPUDefsToModels qemu: Rename virQEMUCaps{Get,Fetch}CPUDefinitions qemu: Split virQEMUCapsFetchCPUModels qemu: Switch qemuCaps to use qemuMonitorCPUDefs conf: Drop unused virDomainCapsCPUModelsFilter conf: Drop virDomainCapsCPUModelsAddSteal qemu: Store typename from query-cpu-definitions in qemuCaps qemu: Drop unused virQEMUCapsGetDefaultMachine qemu: Add virQEMUCaps{Load,Format}Accel qemu: Introduce virQEMUCapsAccel structure qemu: Introduce virQEMUCapsAccelCopy qemu: Introduce virQEMUCapsAccelClear qemu: Introduce and use virQEMUCapsGetAccel qemu: Drop virQEMUCapsGetHostCPUData qemu: Refactor virQEMUCapsLoadAccel qemu: Refactor virQEMUCapsFormatAccel qemu: Introduce virQEMUCapsProbeCPUDefinitionsTest qemu: Refactor probing of accelerator dependent data qemu: Make virQEMUCapsGetMachineTypesCaps static qemu: Make virQEMUCapsIsMachineSupported static qemu: Refactor virQEMUCapsLoadCache a bit qemu: Refactor virQEMUCapsFormatCache a bit qemu: Pass virDomainVirtType to APIs dealing with machine types qemu: Move machine type data in capabilities cache qemu: Use typedef for virQEMUCapsMachineType qemu: Introduce virQEMUCapsCopyMachineTypes qemu: Make probed machine types depend on accelerator qemu: Probe machine types for both KVM and TCG qemu: Probe for default CPU types qemu: Introduce virQEMUCapsGetMachineDefaultCPU qemu: Use g_autoptr in qemuDomainDefPostParse conf: Define g_autoptr cleanup function for virCPUDef qemuxml2argvtest: Update host arch for DO_TEST*ARCH* tests qemuxml2*test: Add test cases for default CPU models on aarch64 qemuxml2*test: Add test cases for default CPU models on ppc64 qemuxml2*test: Add test cases for default CPU models on s390x qemuxml2*test: Add test cases for default CPU models on x86_64 qemu: Store default CPU in domain XML
src/conf/cpu_conf.h | 1 + src/conf/domain_capabilities.c | 86 +- src/conf/domain_capabilities.h | 10 +- src/libvirt_private.syms | 2 - src/qemu/qemu_capabilities.c | 1064 +- src/qemu/qemu_capabilities.h | 29 +- src/qemu/qemu_capspriv.h | 5 +- src/qemu/qemu_domain.c | 97 +- src/qemu/qemu_driver.c | 4 +- src/qemu/qemu_monitor.c | 61 +- src/qemu/qemu_monitor.h | 19 +- src/qemu/qemu_monitor_json.c | 82 +- src/qemu/qemu_monitor_json.h | 2 +- src/qemu/qemu_process.c | 24 +- tests/cputest.c | 12 +- tests/domaincapsdata/qemu_4.2.0.s390x.xml | 202 + tests/domaincapstest.c | 10 +- .../caps_1.5.3.x86_64.replies | 78 + .../caps_1.5.3.x86_64.xml | 45 +- .../caps_1.6.0.x86_64.replies | 86 + .../caps_1.6.0.x86_64.xml | 51 +- .../caps_1.7.0.x86_64.replies | 94 + .../caps_1.7.0.x86_64.xml | 57 +- .../caps_2.1.1.x86_64.replies | 110 + .../caps_2.1.1.x86_64.xml | 69 +- .../caps_2.10.0.aarch64.replies | 272 + .../caps_2.10.0.aarch64.xml | 279 +- .../caps_2.10.0.ppc64.replies | 123 + .../caps_2.10.0.ppc64.xml | 575 +- .../caps_2.10.0.s390x.replies | 53 + .../caps_2.10.0.s390x.xml | 285 +- .../caps_2.10.0.x86_64.replies | 194 + .../caps_2.10.0.x86_64.xml | 387 +- .../caps_2.11.0.s390x.replies | 58 + .../caps_2.11.0.s390x.xml | 288 +- .../caps_2.11.0.x86_64.replies | 194 + .../caps_2.11.0.x86_64.xml | 327 +- .../caps_2.12.0.aarch64.replies | 302 + .../caps_2.12.0.aarch64.xml | 307 +- .../caps_2.12.0.ppc64.replies | 143 + .../caps_2.12.0.ppc64.xml | 591 +- .../caps_2.12.0.s390x.replies | 63 + .../caps_2.12.0.s390x.xml | 291 +- .../caps_2.12.0.x86_64.replies | 204 + .../caps_2.12.0.x86_64.xml | 631 +- .../caps_2.4.0.x86_64.replies | 134 + .../caps_2.4.0.x86_64.xml | 87 +- .../caps_2.5.0.x86_64.replies | 142 + .../caps_2.5.0.x86_64.xml | 93 +- .../caps_2.6.0.aarch64.replies | 180 + .../caps_2.6.0.aarch64.xml | 123 +- .../caps_2.6.0.ppc64.replies | 77 + .../qemucapabilitiesdata/caps_2.6.0.ppc64.xml | 45 +- .../caps_2.6.0.x86_64.replies | 118 + .../caps_2.6.0.x86_64.xml | 75 +- .../caps_2.7.0.s390x.replies | 38 + .../qemucapabilitiesdata/caps_2.7.0.s390x.xml | 12 +- .../caps_2.7.0.x86_64.replies | 154 + .../caps_2.7.0.x86_64.xml | 81 +- .../caps_2.8.0.s390x.replies | 43 + .../qemucapabilitiesdata/caps_2.8.0.s390x.xml | 15 +- .../caps_2.8.0.x86_64.replies | 174 + .../caps_2.8.0.x86_64.xml | 93 +- .../caps_2.9.0.ppc64.replies | 118 + .../qemucapabilitiesdata/caps_2.9.0.ppc64.xml | 572 +- .../caps_2.9.0.s390x.replies | 48 + .../qemucapabilitiesdata/caps_2.9.0.s390x.xml | 274 +- .../caps_2.9.0.x86_64.replies | 184 + .../caps_2.9.0.x86_64.xml | 277 +- .../caps_3.0.0.ppc64.replies | 148 + .../qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 594 +- .../caps_3.0.0.riscv32.replies | 42 + .../caps_3.0.0.riscv32.xml | 10 +- .../caps_3.0.0.riscv64.replies | 42 + .../caps_3.0.0.riscv64.xml | 10 +- .../caps_3.0.0.s390x.replies | 68 + .../qemucapabilitiesdata/caps_3.0.0.s390x.xml | 302 +- .../caps_3.0.0.x86_64.replies | 214 + .../caps_3.0.0.x86_64.xml | 447 +- .../caps_3.1.0.ppc64.replies | 153 + .../qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 597 +- .../caps_3.1.0.x86_64.replies | 224 + .../caps_3.1.0.x86_64.xml | 587 +- .../caps_4.0.0.aarch64.replies | 347 + .../caps_4.0.0.aarch64.xml | 346 +- .../caps_4.0.0.ppc64.replies | 158 + .../qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 600 +- .../caps_4.0.0.riscv32.replies | 42 + .../caps_4.0.0.riscv32.xml | 10 +- .../caps_4.0.0.riscv64.replies | 42 + .../caps_4.0.0.riscv64.xml | 10 +- .../caps_4.0.0.s390x.replies | 78 + .../qemucapabilitiesdata/caps_4.0.0.s390x.xml | 324 +- .../caps_4.0.0.x86_64.replies | 224 + .../caps_4.0.0.x86_64.xml | 583 +- .../caps_4.1.0.x86_64.replies | 329 + .../caps_4.1.0.x86_64.xml | 930 +- .../caps_4.2.0.aarch64.replies | 556 + .../caps_4.2.0.aarch64.xml | 358 +- .../caps_4.2.0.ppc64.replies | 305 +- .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 611 +- .../caps_4.2.0.s390x.replies | 22548 ++++++++++++++++ .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 3359 +++ .../caps_4.2.0.x86_64.replies | 389 + .../caps_4.2.0.x86_64.xml | 942 +- tests/qemumonitorjsontest.c | 42 +- ...fault-cpu-kvm-virt-4.2.aarch64-latest.args | 38 + .../aarch64-default-cpu-kvm-virt-4.2.xml | 20 + ...fault-cpu-tcg-virt-4.2.aarch64-latest.args | 39 + .../aarch64-default-cpu-tcg-virt-4.2.xml | 20 + .../disk-cache.x86_64-latest.args | 1 + .../disk-cdrom-network.x86_64-latest.args | 1 + .../disk-cdrom-tray.x86_64-latest.args | 1 + .../disk-copy_on_read.x86_64-latest.args | 1 + .../disk-detect-zeroes.x86_64-latest.args | 1 + .../disk-floppy-q35-2_11.x86_64-latest.args | 1 + .../disk-floppy-q35-2_9.x86_64-latest.args | 1 + .../os-firmware-bios.x86_64-latest.args | 1 + ...os-firmware-efi-secboot.x86_64-latest.args | 1 + .../os-firmware-efi.x86_64-latest.args | 1 + ...ault-cpu-kvm-pseries-2.7.ppc64-latest.args | 39 + .../ppc64-default-cpu-kvm-pseries-2.7.xml | 22 + ...ault-cpu-kvm-pseries-3.1.ppc64-latest.args | 39 + .../ppc64-default-cpu-kvm-pseries-3.1.xml | 22 + ...ault-cpu-kvm-pseries-4.2.ppc64-latest.args | 39 + .../ppc64-default-cpu-kvm-pseries-4.2.xml | 22 + ...ault-cpu-tcg-pseries-2.7.ppc64-latest.args | 39 + .../ppc64-default-cpu-tcg-pseries-2.7.xml | 22 + ...ault-cpu-tcg-pseries-3.1.ppc64-latest.args | 39 + .../ppc64-default-cpu-tcg-pseries-3.1.xml | 22 + ...ault-cpu-tcg-pseries-4.2.ppc64-latest.args | 39 + .../ppc64-default-cpu-tcg-pseries-4.2.xml | 22 + ...t-cpu-kvm-ccw-virtio-4.2.s390x-latest.args | 32 + .../s390-default-cpu-kvm-ccw-virtio-4.2.xml | 16 + ...t-cpu-tcg-ccw-virtio-4.2.s390x-latest.args | 32 + .../s390-default-cpu-tcg-ccw-virtio-4.2.xml | 16 + .../tpm-emulator-tpm2-enc.x86_64-latest.args | 1 + .../tpm-emulator-tpm2.x86_64-latest.args | 1 + .../tpm-emulator.x86_64-latest.args | 1 + .../tseg-explicit-size.x86_64-latest.args | 1 + .../vhost-vsock-auto.x86_64-latest.args | 1 + .../vhost-vsock.x86_64-latest.args | 1 + ...-default-cpu-kvm-pc-4.2.x86_64-latest.args | 37 + .../x86_64-default-cpu-kvm-pc-4.2.xml | 24 + ...default-cpu-kvm-q35-4.2.x86_64-latest.args | 42 + .../x86_64-default-cpu-kvm-q35-4.2.xml | 24 + ...-default-cpu-tcg-pc-4.2.x86_64-latest.args | 37 + .../x86_64-default-cpu-tcg-pc-4.2.xml | 24 + ...default-cpu-tcg-q35-4.2.x86_64-latest.args | 42 + .../x86_64-default-cpu-tcg-q35-4.2.xml | 24 + tests/qemuxml2argvtest.c | 19 + ...efault-cpu-kvm-virt-4.2.aarch64-latest.xml | 38 + ...efault-cpu-tcg-virt-4.2.aarch64-latest.xml | 41 + .../os-firmware-bios.x86_64-latest.xml | 3 + .../os-firmware-efi-secboot.x86_64-latest.xml | 3 + .../os-firmware-efi.x86_64-latest.xml | 3 + ...fault-cpu-kvm-pseries-2.7.ppc64-latest.xml | 48 + ...fault-cpu-kvm-pseries-3.1.ppc64-latest.xml | 48 + ...fault-cpu-kvm-pseries-4.2.ppc64-latest.xml | 48 + ...fault-cpu-tcg-pseries-2.7.ppc64-latest.xml | 48 + ...fault-cpu-tcg-pseries-3.1.ppc64-latest.xml | 48 + ...fault-cpu-tcg-pseries-4.2.ppc64-latest.xml | 48 + ...lt-cpu-kvm-ccw-virtio-4.2.s390x-latest.xml | 24 + ...lt-cpu-tcg-ccw-virtio-4.2.s390x-latest.xml | 26 + .../tpm-emulator-tpm2-enc.x86_64-latest.xml | 3 + .../tpm-emulator-tpm2.x86_64-latest.xml | 3 + .../tpm-emulator.x86_64-latest.xml | 3 + .../tpm-passthrough-crb.x86_64-latest.xml | 3 + .../tpm-passthrough.x86_64-latest.xml | 3 + ...4-default-cpu-kvm-pc-4.2.x86_64-latest.xml | 40 + ...-default-cpu-kvm-q35-4.2.x86_64-latest.xml | 63 + ...4-default-cpu-tcg-pc-4.2.x86_64-latest.xml | 40 + ...-default-cpu-tcg-q35-4.2.x86_64-latest.xml | 63 + tests/qemuxml2xmltest.c | 15 + tests/testutilsqemu.c | 6 +- tests/testutilsqemu.h | 1 + 176 files changed, 42397 insertions(+), 6735 deletions(-) create mode 100644 tests/domaincapsdata/qemu_4.2.0.s390x.xml create mode 100644 tests/qemucapabilitiesdata/caps_4.2.0.s390x.replies create mode 100644 tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml create mode 100644 tests/qemuxml2argvdata/aarch64-default-cpu-kvm-virt-4.2.aarch64-latest.args create mode 100644 tests/qemuxml2argvdata/aarch64-default-cpu-kvm-virt-4.2.xml create mode 100644 tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.args create mode 100644 tests/qemuxml2argvdata/aarch64-default-cpu-tcg-virt-4.2.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-2.7.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-3.1.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-kvm-pseries-4.2.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-2.7.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-3.1.xml create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.args create mode 100644 tests/qemuxml2argvdata/ppc64-default-cpu-tcg-pseries-4.2.xml create mode 100644 tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.args create mode 100644 tests/qemuxml2argvdata/s390-default-cpu-kvm-ccw-virtio-4.2.xml create mode 100644 tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.args create mode 100644 tests/qemuxml2argvdata/s390-default-cpu-tcg-ccw-virtio-4.2.xml create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-kvm-pc-4.2.xml create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-kvm-q35-4.2.xml create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-tcg-pc-4.2.xml create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/x86_64-default-cpu-tcg-q35-4.2.xml create mode 100644 tests/qemuxml2xmloutdata/aarch64-default-cpu-kvm-virt-4.2.aarch64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/aarch64-default-cpu-tcg-virt-4.2.aarch64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-2.7.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-3.1.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-kvm-pseries-4.2.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-2.7.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-3.1.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/ppc64-default-cpu-tcg-pseries-4.2.ppc64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.xml create mode 100644 tests/qemuxml2xmloutdata/s390-default-cpu-tcg-ccw-virtio-4.2.s390x-latest.xml create mode 100644 tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-pc-4.2.x86_64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/x86_64-default-cpu-kvm-q35-4.2.x86_64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-pc-4.2.x86_64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-q35-4.2.x86_64-latest.xml

On Fri, Nov 08, 2019 at 12:25:06 +0100, Christian Borntraeger wrote:
As discussed, does it make sense to add the default change to host-model for s390 in this series or should that be a separate patch?
Originally I wanted to do it as a separate patch, but since no review has apparently started on this series yet, I guess we could even add it as a 53/52 patch to this series. Unless a reviewer (hi Jano :-)) is faster. Jirka
participants (3)
-
Christian Borntraeger
-
Jiri Denemark
-
Ján Tomko