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 +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 +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 @@ + + + ++ ++ cortex-a53 ++ + + hvm + /aarch64.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 @@ + + + ++ ++ cortex-a53 ++ + + destroy + restart +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 @@ +- ++ + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 +@@ -23,6 +23,6 @@ + restart + destroy + +- /usr/bin/qemu ++ /usr/bin/qemu-kvm + + +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 @@ +- ++ + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 +@@ -30,6 +30,6 @@ + restart + destroy + +- /usr/bin/qemu ++ /usr/bin/qemu-kvm + + +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 @@ +- ++ + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 +@@ -30,6 +30,6 @@ + restart + destroy + +- /usr/bin/qemu ++ /usr/bin/qemu-kvm + + +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 @@ +- ++ + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 +@@ -20,6 +20,6 @@ + restart + destroy + +- /usr/bin/qemu ++ /usr/bin/qemu-kvm + + +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 @@ +- ++ + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 +@@ -16,6 +16,6 @@ + restart + destroy + +- /usr/bin/qemu ++ /usr/bin/qemu-kvm + + +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 @@ +- ++ + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 +@@ -20,6 +20,6 @@ + restart + destroy + +- /usr/bin/qemu ++ /usr/bin/qemu-kvm + + +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 @@ +- ++ + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 +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 @@ +- ++ + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 +@@ -33,6 +33,6 @@ + restart + destroy + +- /usr/bin/qemu ++ /usr/bin/qemu-kvm + + +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 @@ +- ++ + f14 + 553effab-b5e1-2d80-dfe3-da4344826c43 + 1048576 +@@ -38,7 +38,7 @@ + restart + restart + +- /usr/bin/qemu ++ /usr/bin/qemu-kvm + + + +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 @@ +- ++ + f14 + 553effab-b5e1-2d80-dfe3-da4344826c43 + 1048576 +@@ -38,7 +38,7 @@ + restart + restart + +- /usr/bin/qemu ++ /usr/bin/qemu-kvm + + + 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 - 1.2.9-2 +- Fix specifying CPU for qemu aarch64 + * Wed Sep 24 2014 Cole Robinson - 1.2.8-6 - Fix labelling host devices (bz #1145968)