Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

x86, kvm: Switch to use hypervisor_cpuid_base()

Switch to use hypervisor_cpuid_base() to detect KVM.

Cc: Gleb Natapov <gleb@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Link: http://lkml.kernel.org/r/1374742475-2485-3-git-send-email-jasowang@redhat.com
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>

authored by

Jason Wang and committed by
H. Peter Anvin
1085ba7f 448ac44d

+12 -18
+12 -18
arch/x86/include/asm/kvm_para.h
··· 85 85 return ret; 86 86 } 87 87 88 + static inline uint32_t kvm_cpuid_base(void) 89 + { 90 + if (boot_cpu_data.cpuid_level < 0) 91 + return 0; /* So we don't blow up on old processors */ 92 + 93 + if (cpu_has_hypervisor) 94 + return hypervisor_cpuid_base("KVMKVMKVM\0\0\0", 0); 95 + 96 + return 0; 97 + } 98 + 88 99 static inline bool kvm_para_available(void) 89 100 { 90 - unsigned int eax, ebx, ecx, edx; 91 - char signature[13]; 92 - 93 - if (boot_cpu_data.cpuid_level < 0) 94 - return false; /* So we don't blow up on old processors */ 95 - 96 - if (cpu_has_hypervisor) { 97 - cpuid(KVM_CPUID_SIGNATURE, &eax, &ebx, &ecx, &edx); 98 - memcpy(signature + 0, &ebx, 4); 99 - memcpy(signature + 4, &ecx, 4); 100 - memcpy(signature + 8, &edx, 4); 101 - signature[12] = 0; 102 - 103 - if (strcmp(signature, "KVMKVMKVM") == 0) 104 - return true; 105 - } 106 - 107 - return false; 101 + return kvm_cpuid_base() != 0; 108 102 } 109 103 110 104 static inline unsigned int kvm_arch_para_features(void)