615e680a7d
This fixes upstream bug rh#1439424. I opened an openSUSE bug report boo#1033893 for this issue. OBS-URL: https://build.opensuse.org/request/show/487720 OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=597
73 lines
2.7 KiB
Diff
73 lines
2.7 KiB
Diff
From ae102b5d7bccd29bc6015a3e0acefeaa90d097ac Mon Sep 17 00:00:00 2001
|
|
From: Jiri Denemark <jdenemar@redhat.com>
|
|
Date: Thu, 6 Apr 2017 13:52:30 +0200
|
|
Subject: [PATCH] qemu: Fix regression when hyperv/vendor_id feature is used
|
|
|
|
qemuProcessVerifyHypervFeatures is supposed to check whether all
|
|
requested hyperv features were actually honored by QEMU/KVM. This is
|
|
done by checking the corresponding CPUID bits reported by the virtual
|
|
CPU. In other words, it doesn't work for string properties, such as
|
|
VIR_DOMAIN_HYPERV_VENDOR_ID (there is no CPUID bit we could check). We
|
|
could theoretically check all 96 bits corresponding to the vendor
|
|
string, but luckily we don't have to check the feature at all. If QEMU
|
|
is too old to support hyperv features, the domain won't even start.
|
|
Otherwise, it is always supported.
|
|
|
|
Without this patch, libvirt refuses to start a domain which contains
|
|
|
|
<features>
|
|
<hyperv>
|
|
<vendor_id state='on' value='...'/>
|
|
</hyperv>
|
|
</features>
|
|
|
|
reporting internal error: "unknown CPU feature __kvm_hv_vendor_id.
|
|
|
|
This regression was introduced by commit v3.1.0-186-ge9dbe7011, which
|
|
(by fixing the virCPUDataCheckFeature condition in
|
|
qemuProcessVerifyHypervFeatures) revealed an old bug in the feature
|
|
verification code. It's been there ever since the verification was
|
|
implemented by commit v1.3.3-rc1-5-g95bbe4bf5, which effectively did not
|
|
check VIR_DOMAIN_HYPERV_VENDOR_ID at all.
|
|
|
|
https://bugzilla.redhat.com/show_bug.cgi?id=1439424
|
|
|
|
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
---
|
|
src/qemu/qemu_process.c | 6 +++++-
|
|
1 files changed, 5 insertions(+), 1 deletions(-)
|
|
|
|
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
|
|
index e450d06..8323a18 100644
|
|
--- a/src/qemu/qemu_process.c
|
|
+++ b/src/qemu/qemu_process.c
|
|
@@ -3793,6 +3793,10 @@ qemuProcessVerifyHypervFeatures(virDomainDefPtr def,
|
|
int rc;
|
|
|
|
for (i = 0; i < VIR_DOMAIN_HYPERV_LAST; i++) {
|
|
+ /* always supported string property */
|
|
+ if (i == VIR_DOMAIN_HYPERV_VENDOR_ID)
|
|
+ continue;
|
|
+
|
|
if (def->hyperv_features[i] != VIR_TRISTATE_SWITCH_ON)
|
|
continue;
|
|
|
|
@@ -3821,13 +3825,13 @@ qemuProcessVerifyHypervFeatures(virDomainDefPtr def,
|
|
case VIR_DOMAIN_HYPERV_SYNIC:
|
|
case VIR_DOMAIN_HYPERV_STIMER:
|
|
case VIR_DOMAIN_HYPERV_RESET:
|
|
- case VIR_DOMAIN_HYPERV_VENDOR_ID:
|
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
_("host doesn't support hyperv '%s' feature"),
|
|
virDomainHypervTypeToString(i));
|
|
return -1;
|
|
|
|
/* coverity[dead_error_begin] */
|
|
+ case VIR_DOMAIN_HYPERV_VENDOR_ID:
|
|
case VIR_DOMAIN_HYPERV_LAST:
|
|
break;
|
|
}
|
|
--
|
|
1.7.1
|
|
|