From: Roman Bolshakov <r.bolshakov(a)yadro.com>
The function should be used to check if qemu capabilities include a
hardware acceleration, i.e. accel is not TCG.
Signed-off-by: Roman Bolshakov <r.bolshakov(a)yadro.com>
Signed-off-by: Andrea Bolognani <abologna(a)redhat.com>
Tested-by: Brad Laue <brad(a)brad-x.com>
Reviewed-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
src/qemu/qemu_capabilities.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 85dd36e274..79e80dd288 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -810,6 +810,13 @@ virQEMUCapsTypeIsAccelerated(virDomainVirtType type)
}
+static bool
+virQEMUCapsHaveAccel(virQEMUCaps *qemuCaps)
+{
+ return virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM);
+}
+
+
/* Checks whether a domain with @guest arch can run natively on @host.
*/
bool
@@ -5031,7 +5038,7 @@ virQEMUCapsIsValid(void *data,
return false;
}
- if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) {
+ if (virQEMUCapsHaveAccel(qemuCaps)) {
if (STRNEQ_NULLABLE(priv->hostCPUSignature, qemuCaps->hostCPUSignature)) {
VIR_DEBUG("Outdated capabilities for '%s': host CPU changed
"
"('%s' vs '%s')",
@@ -5065,7 +5072,9 @@ virQEMUCapsIsValid(void *data,
qemuCaps->binary);
return false;
}
+ }
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) {
kvmSupportsNesting = virQEMUCapsKVMSupportsNesting();
if (kvmSupportsNesting != qemuCaps->kvmSupportsNesting) {
VIR_DEBUG("Outdated capabilities for '%s': kvm kernel nested
"
@@ -5530,7 +5539,7 @@ virQEMUCapsInitQMP(virQEMUCaps *qemuCaps,
* for TCG capabilities by asking the same binary again and turning KVM
* off.
*/
- if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM) &&
+ if (virQEMUCapsHaveAccel(qemuCaps) &&
virQEMUCapsGet(qemuCaps, QEMU_CAPS_TCG) &&
virQEMUCapsInitQMPSingle(qemuCaps, libDir, runUid, runGid, true) < 0)
return -1;
@@ -5594,13 +5603,15 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch,
virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KVM);
virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_QEMU);
- if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) {
+ if (virQEMUCapsHaveAccel(qemuCaps)) {
qemuCaps->hostCPUSignature = g_strdup(hostCPUSignature);
qemuCaps->microcodeVersion = microcodeVersion;
qemuCaps->cpuData = virCPUDataNewCopy(cpuData);
qemuCaps->kernelVersion = g_strdup(kernelVersion);
+ }
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) {
qemuCaps->kvmSupportsNesting = virQEMUCapsKVMSupportsNesting();
qemuCaps->kvmSupportsSecureGuest = virQEMUCapsKVMSupportsSecureGuest();
--
2.34.1