diff options
| -rw-r--r-- | arch/x86/include/asm/kvm_para.h | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_para.h index 695399f2d5eb..0644129a5333 100644 --- a/arch/x86/include/asm/kvm_para.h +++ b/arch/x86/include/asm/kvm_para.h | |||
| @@ -85,26 +85,20 @@ static inline long kvm_hypercall4(unsigned int nr, unsigned long p1, | |||
| 85 | return ret; | 85 | return ret; |
| 86 | } | 86 | } |
| 87 | 87 | ||
| 88 | static inline bool kvm_para_available(void) | 88 | static inline uint32_t kvm_cpuid_base(void) |
| 89 | { | 89 | { |
| 90 | unsigned int eax, ebx, ecx, edx; | ||
| 91 | char signature[13]; | ||
| 92 | |||
| 93 | if (boot_cpu_data.cpuid_level < 0) | 90 | if (boot_cpu_data.cpuid_level < 0) |
| 94 | return false; /* So we don't blow up on old processors */ | 91 | return 0; /* So we don't blow up on old processors */ |
| 95 | 92 | ||
| 96 | if (cpu_has_hypervisor) { | 93 | if (cpu_has_hypervisor) |
| 97 | cpuid(KVM_CPUID_SIGNATURE, &eax, &ebx, &ecx, &edx); | 94 | return hypervisor_cpuid_base("KVMKVMKVM\0\0\0", 0); |
| 98 | memcpy(signature + 0, &ebx, 4); | ||
| 99 | memcpy(signature + 4, &ecx, 4); | ||
| 100 | memcpy(signature + 8, &edx, 4); | ||
| 101 | signature[12] = 0; | ||
| 102 | 95 | ||
| 103 | if (strcmp(signature, "KVMKVMKVM") == 0) | 96 | return 0; |
| 104 | return true; | 97 | } |
| 105 | } | ||
| 106 | 98 | ||
| 107 | return false; | 99 | static inline bool kvm_para_available(void) |
| 100 | { | ||
| 101 | return kvm_cpuid_base() != 0; | ||
| 108 | } | 102 | } |
| 109 | 103 | ||
| 110 | static inline unsigned int kvm_arch_para_features(void) | 104 | static inline unsigned int kvm_arch_para_features(void) |
