[PATCH v2] qemu-kvm: preserve the hypervisor bit while KVM trims the CPUID bits

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The KVM kernel will disable all bits in CPUID which are not present in
the host. As this is mostly true for the hypervisor bit (1.ecx),
preserve its value before the trim and restore it afterwards.
This is similar to commit 6c0d7ee8, but since qemu-kvm uses another code
path it has to be inserted in qemu-kvm-x86.c, too.

Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx>
---
 qemu-kvm-x86.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

The last patch had a typo (and I compile tested the wrong branch), so
here is the correct version.

Regards,
Andre.

diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
index d6735c1..7505380 100644
--- a/qemu-kvm-x86.c
+++ b/qemu-kvm-x86.c
@@ -1211,8 +1211,13 @@ int kvm_arch_qemu_init_env(CPUState *cenv)
 
     kvm_trim_features(&cenv->cpuid_features,
                       kvm_arch_get_supported_cpuid(cenv, 1, R_EDX));
+
+    /* prevent the hypervisor bit from being cleared by the kernel */
+    i = cenv->cpuid_ext_features & CPUID_EXT_HYPERVISOR;
     kvm_trim_features(&cenv->cpuid_ext_features,
                       kvm_arch_get_supported_cpuid(cenv, 1, R_ECX));
+    cenv->cpuid_ext_features |= i;
+
     kvm_trim_features(&cenv->cpuid_ext2_features,
                       kvm_arch_get_supported_cpuid(cenv, 0x80000001, R_EDX));
     kvm_trim_features(&cenv->cpuid_ext3_features,
-- 
1.6.1.3


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux