diff options
Diffstat (limited to 'arch/x86/kvm/cpuid.h')
| -rw-r--r-- | arch/x86/kvm/cpuid.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/x86/kvm/cpuid.h b/arch/x86/kvm/cpuid.h index a10e46016851..b7fd07984888 100644 --- a/arch/x86/kvm/cpuid.h +++ b/arch/x86/kvm/cpuid.h | |||
| @@ -24,10 +24,21 @@ static inline bool guest_cpuid_has_xsave(struct kvm_vcpu *vcpu) | |||
| 24 | { | 24 | { |
| 25 | struct kvm_cpuid_entry2 *best; | 25 | struct kvm_cpuid_entry2 *best; |
| 26 | 26 | ||
| 27 | if (!static_cpu_has(X86_FEATURE_XSAVE)) | ||
| 28 | return 0; | ||
| 29 | |||
| 27 | best = kvm_find_cpuid_entry(vcpu, 1, 0); | 30 | best = kvm_find_cpuid_entry(vcpu, 1, 0); |
| 28 | return best && (best->ecx & bit(X86_FEATURE_XSAVE)); | 31 | return best && (best->ecx & bit(X86_FEATURE_XSAVE)); |
| 29 | } | 32 | } |
| 30 | 33 | ||
| 34 | static inline bool guest_cpuid_has_tsc_adjust(struct kvm_vcpu *vcpu) | ||
| 35 | { | ||
| 36 | struct kvm_cpuid_entry2 *best; | ||
| 37 | |||
| 38 | best = kvm_find_cpuid_entry(vcpu, 7, 0); | ||
| 39 | return best && (best->ebx & bit(X86_FEATURE_TSC_ADJUST)); | ||
| 40 | } | ||
| 41 | |||
| 31 | static inline bool guest_cpuid_has_smep(struct kvm_vcpu *vcpu) | 42 | static inline bool guest_cpuid_has_smep(struct kvm_vcpu *vcpu) |
| 32 | { | 43 | { |
| 33 | struct kvm_cpuid_entry2 *best; | 44 | struct kvm_cpuid_entry2 *best; |
