[libvirt] Fix specifying CPU for qemu aarch64
Cole Robinson
crobinso at fedoraproject.org
Fri Oct 3 13:32:51 UTC 2014
commit 0a64085f47fe0cbbdb2db47e50459831545449dc
Author: Cole Robinson <crobinso at redhat.com>
Date: Fri Oct 3 09:32:42 2014 -0400
Fix specifying CPU for qemu aarch64
0001-qemu_command-Split-qemuBuildCpuArgStr.patch | 291 +++++++++++
...mu-Don-t-compare-CPU-against-host-for-TCG.patch | 536 ++++++++++++++++++++
libvirt.spec | 13 +-
3 files changed, 839 insertions(+), 1 deletions(-)
---
diff --git a/0001-qemu_command-Split-qemuBuildCpuArgStr.patch b/0001-qemu_command-Split-qemuBuildCpuArgStr.patch
new file mode 100644
index 0000000..52521f1
--- /dev/null
+++ b/0001-qemu_command-Split-qemuBuildCpuArgStr.patch
@@ -0,0 +1,291 @@
+From e543e857120b8a1b352bf34fd8a983e95ea70487 Mon Sep 17 00:00:00 2001
+From: Cole Robinson <crobinso at redhat.com>
+Date: Tue, 23 Sep 2014 11:35:57 -0400
+Subject: [PATCH] qemu_command: Split qemuBuildCpuArgStr
+
+Move the CPU mode/model handling to its own function. This is just
+code movement and re-indentation.
+
+(cherry picked from commit e1d872dc77c80d43036f928f83f560f2e9286148)
+---
+ src/qemu/qemu_command.c | 226 ++++++++++++++++++++++++++----------------------
+ 1 file changed, 122 insertions(+), 104 deletions(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 2184caa..96ba081 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -6052,139 +6052,162 @@ qemuBuildClockArgStr(virDomainClockDefPtr def)
+ return NULL;
+ }
+
+-
+ static int
+-qemuBuildCpuArgStr(virQEMUDriverPtr driver,
+- const virDomainDef *def,
+- const char *emulator,
+- virQEMUCapsPtr qemuCaps,
+- virArch hostarch,
+- char **opt,
+- bool *hasHwVirt,
+- bool migrating)
++qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
++ const virDomainDef *def,
++ virBufferPtr buf,
++ virQEMUCapsPtr qemuCaps,
++ bool *hasHwVirt,
++ bool migrating)
+ {
++ int ret = -1;
++ size_t i;
+ virCPUDefPtr host = NULL;
+ virCPUDefPtr guest = NULL;
+ virCPUDefPtr cpu = NULL;
+ size_t ncpus = 0;
+ char **cpus = NULL;
+- const char *default_model;
+ virCPUDataPtr data = NULL;
+- bool have_cpu = false;
+ char *compare_msg = NULL;
+- int ret = -1;
+- virBuffer buf = VIR_BUFFER_INITIALIZER;
+- size_t i;
++ virCPUCompareResult cmp;
++ const char *preferred;
+ virCapsPtr caps = NULL;
+
+- *hasHwVirt = false;
+-
+ if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
+ goto cleanup;
+
+ host = caps->host.cpu;
+
+- if (def->os.arch == VIR_ARCH_I686)
+- default_model = "qemu32";
+- else
+- default_model = "qemu64";
++ if (!host ||
++ !host->model ||
++ (ncpus = virQEMUCapsGetCPUDefinitions(qemuCaps, &cpus)) == 0) {
++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++ _("CPU specification not supported by hypervisor"));
++ goto cleanup;
++ }
+
+- if (def->cpu &&
+- (def->cpu->mode != VIR_CPU_MODE_CUSTOM || def->cpu->model)) {
+- virCPUCompareResult cmp;
+- const char *preferred;
++ if (!(cpu = virCPUDefCopy(def->cpu)))
++ goto cleanup;
++
++ if (cpu->mode != VIR_CPU_MODE_CUSTOM &&
++ !migrating &&
++ cpuUpdate(cpu, host) < 0)
++ goto cleanup;
+
+- if (!host ||
+- !host->model ||
+- (ncpus = virQEMUCapsGetCPUDefinitions(qemuCaps, &cpus)) == 0) {
++ cmp = cpuGuestData(host, cpu, &data, &compare_msg);
++ switch (cmp) {
++ case VIR_CPU_COMPARE_INCOMPATIBLE:
++ if (compare_msg) {
++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
++ _("guest and host CPU are not compatible: %s"),
++ compare_msg);
++ } else {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+- _("CPU specification not supported by hypervisor"));
+- goto cleanup;
++ _("guest CPU is not compatible with host CPU"));
+ }
++ /* fall through */
++ case VIR_CPU_COMPARE_ERROR:
++ goto cleanup;
+
+- if (!(cpu = virCPUDefCopy(def->cpu)))
++ default:
++ break;
++ }
++
++ /* Only 'svm' requires --enable-nesting. The nested
++ * 'vmx' patches now simply hook off the CPU features
++ */
++ if (def->os.arch == VIR_ARCH_X86_64 ||
++ def->os.arch == VIR_ARCH_I686) {
++ int hasSVM = cpuHasFeature(data, "svm");
++ if (hasSVM < 0)
+ goto cleanup;
++ *hasHwVirt = hasSVM > 0 ? true : false;
++ }
+
+- if (cpu->mode != VIR_CPU_MODE_CUSTOM &&
+- !migrating &&
+- cpuUpdate(cpu, host) < 0)
++ if (cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) {
++ const char *mode = virCPUModeTypeToString(cpu->mode);
++ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_HOST)) {
++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
++ _("CPU mode '%s' is not supported by QEMU"
++ " binary"), mode);
++ goto cleanup;
++ }
++ if (def->virtType != VIR_DOMAIN_VIRT_KVM) {
++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
++ _("CPU mode '%s' is only supported with kvm"),
++ mode);
++ goto cleanup;
++ }
++ virBufferAddLit(buf, "host");
++ } else {
++ if (VIR_ALLOC(guest) < 0)
++ goto cleanup;
++ if (VIR_STRDUP(guest->vendor_id, cpu->vendor_id) < 0)
+ goto cleanup;
+
+- cmp = cpuGuestData(host, cpu, &data, &compare_msg);
+- switch (cmp) {
+- case VIR_CPU_COMPARE_INCOMPATIBLE:
+- if (compare_msg) {
+- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+- _("guest and host CPU are not compatible: %s"),
+- compare_msg);
+- } else {
+- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+- _("guest CPU is not compatible with host CPU"));
+- }
+- /* fall through */
+- case VIR_CPU_COMPARE_ERROR:
++ guest->arch = host->arch;
++ if (cpu->match == VIR_CPU_MATCH_MINIMUM)
++ preferred = host->model;
++ else
++ preferred = cpu->model;
++
++ guest->type = VIR_CPU_TYPE_GUEST;
++ guest->fallback = cpu->fallback;
++ if (cpuDecode(guest, data, (const char **)cpus, ncpus, preferred) < 0)
+ goto cleanup;
+
+- default:
+- break;
+- }
++ virBufferAdd(buf, guest->model, -1);
++ if (guest->vendor_id)
++ virBufferAsprintf(buf, ",vendor=%s", guest->vendor_id);
++ for (i = 0; i < guest->nfeatures; i++) {
++ char sign;
++ if (guest->features[i].policy == VIR_CPU_FEATURE_DISABLE)
++ sign = '-';
++ else
++ sign = '+';
+
+- /* Only 'svm' requires --enable-nesting. The nested
+- * 'vmx' patches now simply hook off the CPU features
+- */
+- if (def->os.arch == VIR_ARCH_X86_64 ||
+- def->os.arch == VIR_ARCH_I686) {
+- int hasSVM = cpuHasFeature(data, "svm");
+- if (hasSVM < 0)
+- goto cleanup;
+- *hasHwVirt = hasSVM > 0 ? true : false;
++ virBufferAsprintf(buf, ",%c%s", sign, guest->features[i].name);
+ }
++ }
+
+- if (cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) {
+- const char *mode = virCPUModeTypeToString(cpu->mode);
+- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_HOST)) {
+- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+- _("CPU mode '%s' is not supported by QEMU"
+- " binary"), mode);
+- goto cleanup;
+- }
+- if (def->virtType != VIR_DOMAIN_VIRT_KVM) {
+- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+- _("CPU mode '%s' is only supported with kvm"),
+- mode);
+- goto cleanup;
+- }
+- virBufferAddLit(&buf, "host");
+- } else {
+- if (VIR_ALLOC(guest) < 0)
+- goto cleanup;
+- if (VIR_STRDUP(guest->vendor_id, cpu->vendor_id) < 0)
+- goto cleanup;
++ ret = 0;
++cleanup:
++ virObjectUnref(caps);
++ VIR_FREE(compare_msg);
++ cpuDataFree(data);
++ virCPUDefFree(guest);
++ virCPUDefFree(cpu);
++ return ret;
++}
+
+- guest->arch = host->arch;
+- if (cpu->match == VIR_CPU_MATCH_MINIMUM)
+- preferred = host->model;
+- else
+- preferred = cpu->model;
++static int
++qemuBuildCpuArgStr(virQEMUDriverPtr driver,
++ const virDomainDef *def,
++ const char *emulator,
++ virQEMUCapsPtr qemuCaps,
++ virArch hostarch,
++ char **opt,
++ bool *hasHwVirt,
++ bool migrating)
++{
++ const char *default_model;
++ bool have_cpu = false;
++ int ret = -1;
++ virBuffer buf = VIR_BUFFER_INITIALIZER;
++ size_t i;
+
+- guest->type = VIR_CPU_TYPE_GUEST;
+- guest->fallback = cpu->fallback;
+- if (cpuDecode(guest, data, (const char **)cpus, ncpus, preferred) < 0)
+- goto cleanup;
++ *hasHwVirt = false;
+
+- virBufferAdd(&buf, guest->model, -1);
+- if (guest->vendor_id)
+- virBufferAsprintf(&buf, ",vendor=%s", guest->vendor_id);
+- for (i = 0; i < guest->nfeatures; i++) {
+- char sign;
+- if (guest->features[i].policy == VIR_CPU_FEATURE_DISABLE)
+- sign = '-';
+- else
+- sign = '+';
++ if (def->os.arch == VIR_ARCH_I686)
++ default_model = "qemu32";
++ else
++ default_model = "qemu64";
+
+- virBufferAsprintf(&buf, ",%c%s", sign, guest->features[i].name);
+- }
+- }
++ if (def->cpu &&
++ (def->cpu->mode != VIR_CPU_MODE_CUSTOM || def->cpu->model)) {
++ if (qemuBuildCpuModelArgStr(driver, def, &buf, qemuCaps,
++ hasHwVirt, migrating) < 0)
++ goto cleanup;
+ have_cpu = true;
+ } else {
+ /*
+@@ -6309,11 +6332,6 @@ qemuBuildCpuArgStr(virQEMUDriverPtr driver,
+ ret = 0;
+
+ cleanup:
+- VIR_FREE(compare_msg);
+- cpuDataFree(data);
+- virCPUDefFree(guest);
+- virCPUDefFree(cpu);
+- virObjectUnref(caps);
+ return ret;
+ }
+
diff --git a/0002-qemu-Don-t-compare-CPU-against-host-for-TCG.patch b/0002-qemu-Don-t-compare-CPU-against-host-for-TCG.patch
new file mode 100644
index 0000000..8bc4548
--- /dev/null
+++ b/0002-qemu-Don-t-compare-CPU-against-host-for-TCG.patch
@@ -0,0 +1,536 @@
+From fe13df3feab361cd7596e67af87ad1ca2c4158c5 Mon Sep 17 00:00:00 2001
+From: Cole Robinson <crobinso at redhat.com>
+Date: Tue, 23 Sep 2014 13:07:09 -0400
+Subject: [PATCH] qemu: Don't compare CPU against host for TCG
+
+Right now when building the qemu command line, we try to do various
+unconditional validations of the guest CPU against the host CPU. However
+this checks are overly applied. The only time we should use the checks
+are:
+
+- The user requests host-model/host-passthrough, or
+
+- When KVM is requsted. CPU features requested in TCG mode are always
+ emulated by qemu and are independent of the host CPU, so no host CPU
+ checks should be performed.
+
+Right now if trying to specify a CPU for arm on an x86 host, it attempts
+to do non-sensical validation and falls over.
+
+Switch all the test cases that were intending to test CPU validation to
+use KVM, so they continue to test the intended code.
+
+Amend some aarch64 XML tests with a CPU model, to ensure things work
+correctly.
+
+(cherry picked from commit cf7fce8f2fd1c930f357fd4ff93ac35f38eb30c6)
+---
+ src/qemu/qemu_command.c | 68 +++++++++++++---------
+ .../qemuxml2argv-aarch64-virt-default-nic.args | 3 +-
+ .../qemuxml2argv-aarch64-virt-default-nic.xml | 3 +
+ .../qemuxml2argv-aarch64-virt-virtio.args | 3 +-
+ .../qemuxml2argv-aarch64-virt-virtio.xml | 3 +
+ .../qemuxml2argvdata/qemuxml2argv-cpu-exact1.args | 2 +-
+ tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml | 4 +-
+ .../qemuxml2argv-cpu-exact2-nofallback.args | 2 +-
+ .../qemuxml2argv-cpu-exact2-nofallback.xml | 4 +-
+ .../qemuxml2argvdata/qemuxml2argv-cpu-exact2.args | 2 +-
+ tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml | 4 +-
+ .../qemuxml2argv-cpu-fallback.args | 2 +-
+ .../qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml | 4 +-
+ .../qemuxml2argv-cpu-minimum1.args | 2 +-
+ .../qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml | 4 +-
+ .../qemuxml2argv-cpu-minimum2.args | 2 +-
+ .../qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml | 4 +-
+ .../qemuxml2argv-cpu-nofallback.xml | 2 +-
+ .../qemuxml2argvdata/qemuxml2argv-cpu-strict1.args | 2 +-
+ .../qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml | 4 +-
+ .../qemuxml2argv-graphics-spice-timeout.args | 2 +-
+ .../qemuxml2argv-graphics-spice-timeout.xml | 4 +-
+ .../qemuxml2argv-pseries-cpu-exact.args | 4 +-
+ tests/qemuxml2argvtest.c | 21 +++----
+ .../qemuxml2xmlout-graphics-spice-timeout.xml | 4 +-
+ 25 files changed, 90 insertions(+), 69 deletions(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 96ba081..a3bcab9 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -6072,6 +6072,8 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
+ virCPUCompareResult cmp;
+ const char *preferred;
+ virCapsPtr caps = NULL;
++ bool compareAgainstHost = (def->virtType == VIR_DOMAIN_VIRT_KVM ||
++ def->cpu->mode != VIR_CPU_MODE_CUSTOM);
+
+ if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
+ goto cleanup;
+@@ -6094,30 +6096,33 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
+ cpuUpdate(cpu, host) < 0)
+ goto cleanup;
+
+- cmp = cpuGuestData(host, cpu, &data, &compare_msg);
+- switch (cmp) {
+- case VIR_CPU_COMPARE_INCOMPATIBLE:
+- if (compare_msg) {
+- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+- _("guest and host CPU are not compatible: %s"),
+- compare_msg);
+- } else {
+- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+- _("guest CPU is not compatible with host CPU"));
+- }
+- /* fall through */
+- case VIR_CPU_COMPARE_ERROR:
+- goto cleanup;
++ /* For non-KVM, CPU features are emulated, so host compat doesn't matter */
++ if (compareAgainstHost) {
++ cmp = cpuGuestData(host, cpu, &data, &compare_msg);
++ switch (cmp) {
++ case VIR_CPU_COMPARE_INCOMPATIBLE:
++ if (compare_msg) {
++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
++ _("guest and host CPU are not compatible: %s"),
++ compare_msg);
++ } else {
++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
++ _("guest CPU is not compatible with host CPU"));
++ }
++ /* fall through */
++ case VIR_CPU_COMPARE_ERROR:
++ goto cleanup;
+
+- default:
+- break;
++ default:
++ break;
++ }
+ }
+
+ /* Only 'svm' requires --enable-nesting. The nested
+ * 'vmx' patches now simply hook off the CPU features
+ */
+- if (def->os.arch == VIR_ARCH_X86_64 ||
+- def->os.arch == VIR_ARCH_I686) {
++ if ((def->os.arch == VIR_ARCH_X86_64 || def->os.arch == VIR_ARCH_I686) &&
++ compareAgainstHost) {
+ int hasSVM = cpuHasFeature(data, "svm");
+ if (hasSVM < 0)
+ goto cleanup;
+@@ -6145,16 +6150,23 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
+ if (VIR_STRDUP(guest->vendor_id, cpu->vendor_id) < 0)
+ goto cleanup;
+
+- guest->arch = host->arch;
+- if (cpu->match == VIR_CPU_MATCH_MINIMUM)
+- preferred = host->model;
+- else
+- preferred = cpu->model;
++ if (compareAgainstHost) {
++ guest->arch = host->arch;
++ if (cpu->match == VIR_CPU_MATCH_MINIMUM)
++ preferred = host->model;
++ else
++ preferred = cpu->model;
+
+- guest->type = VIR_CPU_TYPE_GUEST;
+- guest->fallback = cpu->fallback;
+- if (cpuDecode(guest, data, (const char **)cpus, ncpus, preferred) < 0)
+- goto cleanup;
++ guest->type = VIR_CPU_TYPE_GUEST;
++ guest->fallback = cpu->fallback;
++ if (cpuDecode(guest, data,
++ (const char **)cpus, ncpus, preferred) < 0)
++ goto cleanup;
++ } else {
++ guest->arch = def->os.arch;
++ if (VIR_STRDUP(guest->model, cpu->model) < 0)
++ goto cleanup;
++ }
+
+ virBufferAdd(buf, guest->model, -1);
+ if (guest->vendor_id)
+@@ -6171,7 +6183,7 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
+ }
+
+ ret = 0;
+-cleanup:
++ cleanup:
+ virObjectUnref(caps);
+ VIR_FREE(compare_msg);
+ cpuDataFree(data);
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args
+index d4d403b..8cb57c5 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args
+@@ -1,5 +1,6 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu-system-aarch64 -S -M virt -m 1024 -smp 1 -nographic \
++/usr/bin/qemu-system-aarch64 -S -M virt -cpu cortex-a53 \
++-m 1024 -smp 1 -nographic \
+ -nodefconfig -nodefaults -monitor unix:/tmp/test-monitor,server,nowait \
+ -boot c -kernel /aarch64.kernel -initrd /aarch64.initrd -append console=ttyAMA0 \
+ -usb -device virtio-net-device,vlan=0,id=net0,mac=52:54:00:09:a4:37 \
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.xml b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.xml
+index 868de94..3a6f098 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.xml
+@@ -7,6 +7,9 @@
+ <features>
+ <acpi/>
+ </features>
++ <cpu match='exact'>
++ <model>cortex-a53</model>
++ </cpu>
+ <os>
+ <type arch="aarch64" machine="virt">hvm</type>
+ <kernel>/aarch64.kernel</kernel>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args
+index afd6e41..05f3629 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args
+@@ -1,5 +1,6 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu-system-aarch64 -S -M virt -m 1024 -smp 1 -nographic \
++/usr/bin/qemu-system-aarch64 -S -M virt -cpu cortex-a53 \
++-m 1024 -smp 1 -nographic \
+ -nodefconfig -nodefaults -monitor unix:/tmp/test-monitor,server,nowait \
+ -boot c -kernel /aarch64.kernel -initrd /aarch64.initrd -append \
+ 'earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait' \
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml
+index 184b62c..ad34615 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml
+@@ -16,6 +16,9 @@
+ <apic/>
+ <pae/>
+ </features>
++ <cpu match='exact'>
++ <model>cortex-a53</model>
++ </cpu>
+ <clock offset="utc"/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args
+index 76c2c48..0a58616 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args
+@@ -1,5 +1,5 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu -S -M pc \
++/usr/bin/qemu-kvm -S -M pc \
+ -cpu qemu64,-svm,-lm,-nx,-syscall,-clflush,-pse36,-mca -m 214 -smp 6 \
+ -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot n -usb -net \
+ none -serial none -parallel none
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml
+index ddd9d5a..1d1e815 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219100</memory>
+@@ -23,6 +23,6 @@
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+- <emulator>/usr/bin/qemu</emulator>
++ <emulator>/usr/bin/qemu-kvm</emulator>
+ </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args
+index 0e37379..e46527b 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args
+@@ -1,5 +1,5 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu -S -M pc \
++/usr/bin/qemu-kvm -S -M pc \
+ -cpu core2duo,+lahf_lm,+3dnowext,+xtpr,+ds_cpl,+tm,+ht,+ds,-nx -m 214 -smp 6 \
+ -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot n -usb -net \
+ none -serial none -parallel none
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.xml
+index de4c8d2..6b9b7d4 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219100</memory>
+@@ -30,6 +30,6 @@
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+- <emulator>/usr/bin/qemu</emulator>
++ <emulator>/usr/bin/qemu-kvm</emulator>
+ </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args
+index 0e37379..e46527b 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args
+@@ -1,5 +1,5 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu -S -M pc \
++/usr/bin/qemu-kvm -S -M pc \
+ -cpu core2duo,+lahf_lm,+3dnowext,+xtpr,+ds_cpl,+tm,+ht,+ds,-nx -m 214 -smp 6 \
+ -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot n -usb -net \
+ none -serial none -parallel none
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml
+index e027e6f..eaea564 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219100</memory>
+@@ -30,6 +30,6 @@
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+- <emulator>/usr/bin/qemu</emulator>
++ <emulator>/usr/bin/qemu-kvm</emulator>
+ </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args
+index 4ee8391..ead561f 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args
+@@ -3,7 +3,7 @@ PATH=/bin \
+ HOME=/home/test \
+ USER=test \
+ LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu \
++/usr/bin/qemu-kvm \
+ -S \
+ -M pc \
+ -cpu Penryn,-sse4.1 \
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml
+index 6125f41..85642e9 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219100</memory>
+@@ -20,6 +20,6 @@
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+- <emulator>/usr/bin/qemu</emulator>
++ <emulator>/usr/bin/qemu-kvm</emulator>
+ </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args
+index 0630ef4..d8207e7 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args
+@@ -1,5 +1,5 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu -S -M pc \
++/usr/bin/qemu-kvm -S -M pc \
+ -cpu core2duo,+lahf_lm,+xtpr,+cx16,+tm2,+est,+vmx,+ds_cpl,+pbe,+tm,+ht,+ss,\
+ +acpi,+ds -m 214 -smp 6 -nographic -monitor unix:/tmp/test-monitor,server,\
+ nowait -no-acpi -boot n -usb -net none -serial none -parallel none
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml
+index 4ba5d0b..5879d35 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219100</memory>
+@@ -16,6 +16,6 @@
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+- <emulator>/usr/bin/qemu</emulator>
++ <emulator>/usr/bin/qemu-kvm</emulator>
+ </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args
+index 830994f..17ba256 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args
+@@ -1,5 +1,5 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu -S -M pc \
++/usr/bin/qemu-kvm -S -M pc \
+ -cpu core2duo,+lahf_lm,+xtpr,+cx16,+tm2,+est,+vmx,+ds_cpl,+pbe,+tm,+ht,+ss,\
+ +acpi,+ds,-lm,-nx,-syscall -m 214 -smp 6 -nographic -monitor \
+ unix:/tmp/test-monitor,server,nowait -no-acpi -boot n -usb -net none -serial none \
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml
+index c43bf4f..b8bbf25 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219100</memory>
+@@ -20,6 +20,6 @@
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+- <emulator>/usr/bin/qemu</emulator>
++ <emulator>/usr/bin/qemu-kvm</emulator>
+ </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-nofallback.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-nofallback.xml
+index 4ae0be8..abb0e9c 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-nofallback.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-nofallback.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219100</memory>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args
+index 8b545a7..c500ef7 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args
+@@ -1,5 +1,5 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+-/usr/bin/qemu -S -M pc \
++/usr/bin/qemu-kvm -S -M pc \
+ -cpu core2duo,+lahf_lm,+3dnowext,+xtpr,+est,+vmx,+ds_cpl,+tm,+ht,+acpi,+ds,-nx \
+ -m 214 -smp 6 -nographic -monitor unix:/tmp/test-monitor,server,nowait \
+ -no-acpi -boot n -usb -net none -serial none -parallel none
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml
+index 935f46f..a9fc9c5 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219100</memory>
+@@ -33,6 +33,6 @@
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+- <emulator>/usr/bin/qemu</emulator>
++ <emulator>/usr/bin/qemu-kvm</emulator>
+ </devices>
+ </domain>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args
+index 48744b2..8b5d9ee 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args
+@@ -1,5 +1,5 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=spice \
+-/usr/bin/qemu -S -M pc -cpu core2duo,+lahf_lm,+xtpr,+cx16,+tm2,\
++/usr/bin/qemu-kvm -S -M pc -cpu core2duo,+lahf_lm,+xtpr,+cx16,+tm2,\
+ +est,+vmx,+ds_cpl,+pbe,+tm,+ht,+ss,+acpi,+ds \
+ -m 1024 -smp 2 -nodefaults -monitor unix:/tmp/test-monitor,server,nowait \
+ -boot dc -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 \
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.xml b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.xml
+index e6ecbed..3ed864c 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+ <name>f14</name>
+ <uuid>553effab-b5e1-2d80-dfe3-da4344826c43</uuid>
+ <memory unit='KiB'>1048576</memory>
+@@ -38,7 +38,7 @@
+ <on_reboot>restart</on_reboot>
+ <on_crash>restart</on_crash>
+ <devices>
+- <emulator>/usr/bin/qemu</emulator>
++ <emulator>/usr/bin/qemu-kvm</emulator>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2'/>
+ <source file='/var/lib/libvirt/images/f14.img'/>
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args
+index 1e09680..9927294 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args
+@@ -1,6 +1,6 @@
+ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test \
+-/usr/bin/qemu-system-ppc64 -S -M pseries -cpu POWER7_v2.3 -m 512 -smp 1 -nographic \
+--nodefconfig -nodefaults \
++QEMU_AUDIO_DRV=none /usr/bin/qemu-system-ppc64 -S -M pseries -cpu POWER7_v2.3 \
++-m 512 -smp 1 -nographic -nodefconfig -nodefaults \
+ -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
+ -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c -usb \
+ -chardev pty,id=charserial0 \
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 3feb2fe..e649aa5 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -920,7 +920,7 @@ mymain(void)
+ QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
+ QEMU_CAPS_DEVICE_QXL);
+ DO_TEST("graphics-spice-timeout",
+- QEMU_CAPS_DRIVE,
++ QEMU_CAPS_KVM, QEMU_CAPS_DRIVE,
+ QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
+ QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
+ QEMU_CAPS_DEVICE_QXL_VGA);
+@@ -1192,14 +1192,14 @@ mymain(void)
+ DO_TEST("cpu-topology1", QEMU_CAPS_SMP_TOPOLOGY);
+ DO_TEST("cpu-topology2", QEMU_CAPS_SMP_TOPOLOGY);
+ DO_TEST("cpu-topology3", NONE);
+- DO_TEST("cpu-minimum1", NONE);
+- DO_TEST("cpu-minimum2", NONE);
+- DO_TEST("cpu-exact1", NONE);
+- DO_TEST("cpu-exact2", NONE);
+- DO_TEST("cpu-exact2-nofallback", NONE);
+- DO_TEST("cpu-fallback", NONE);
+- DO_TEST_FAILURE("cpu-nofallback", NONE);
+- DO_TEST("cpu-strict1", NONE);
++ DO_TEST("cpu-minimum1", QEMU_CAPS_KVM);
++ DO_TEST("cpu-minimum2", QEMU_CAPS_KVM);
++ DO_TEST("cpu-exact1", QEMU_CAPS_KVM);
++ DO_TEST("cpu-exact2", QEMU_CAPS_KVM);
++ DO_TEST("cpu-exact2-nofallback", QEMU_CAPS_KVM);
++ DO_TEST("cpu-fallback", QEMU_CAPS_KVM);
++ DO_TEST_FAILURE("cpu-nofallback", QEMU_CAPS_KVM);
++ DO_TEST("cpu-strict1", QEMU_CAPS_KVM);
+ DO_TEST("cpu-numa1", NONE);
+ DO_TEST("cpu-numa2", QEMU_CAPS_SMP_TOPOLOGY);
+ DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
+@@ -1284,7 +1284,8 @@ mymain(void)
+ DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
+ QEMU_CAPS_DEVICE_USB_KBD, QEMU_CAPS_CHARDEV,
+ QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+- DO_TEST_FAILURE("pseries-cpu-exact", QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
++ DO_TEST("pseries-cpu-exact", QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
++ QEMU_CAPS_NODEFCONFIG);
+ DO_TEST("disk-ide-drive-split",
+ QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
+ QEMU_CAPS_IDE_CD);
+diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml
+index 44c4cf7..73ebcab 100644
+--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml
++++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml
+@@ -1,4 +1,4 @@
+-<domain type='qemu'>
++<domain type='kvm'>
+ <name>f14</name>
+ <uuid>553effab-b5e1-2d80-dfe3-da4344826c43</uuid>
+ <memory unit='KiB'>1048576</memory>
+@@ -38,7 +38,7 @@
+ <on_reboot>restart</on_reboot>
+ <on_crash>restart</on_crash>
+ <devices>
+- <emulator>/usr/bin/qemu</emulator>
++ <emulator>/usr/bin/qemu-kvm</emulator>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2'/>
+ <source file='/var/lib/libvirt/images/f14.img'/>
diff --git a/libvirt.spec b/libvirt.spec
index 7acf617..492466b 100644
--- a/libvirt.spec
+++ b/libvirt.spec
@@ -363,7 +363,7 @@
Summary: Library providing a simple virtualization API
Name: libvirt
Version: 1.2.9
-Release: 1%{?dist}%{?extra_release}
+Release: 2%{?dist}%{?extra_release}
License: LGPLv2+
Group: Development/Libraries
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
@@ -374,6 +374,10 @@ URL: http://libvirt.org/
%endif
Source: http://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.gz
+# Fix specifying CPU for qemu aarch64
+Patch0001: 0001-qemu_command-Split-qemuBuildCpuArgStr.patch
+Patch0002: 0002-qemu-Don-t-compare-CPU-against-host-for-TCG.patch
+
%if %{with_libvirtd}
Requires: libvirt-daemon = %{version}-%{release}
%if %{with_network}
@@ -1198,6 +1202,10 @@ driver
%prep
%setup -q
+# Fix specifying CPU for qemu aarch64
+%patch0001 -p1
+%patch0002 -p1
+
%build
%if ! %{with_xen}
%define _without_xen --without-xen
@@ -2274,6 +2282,9 @@ exit 0
%doc examples/systemtap
%changelog
+* Fri Oct 03 2014 Cole Robinson <crobinso at redhat.com> - 1.2.9-2
+- Fix specifying CPU for qemu aarch64
+
* Wed Sep 24 2014 Cole Robinson <crobinso at redhat.com> - 1.2.8-6
- Fix labelling host devices (bz #1145968)
More information about the scm-commits
mailing list