diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2019-04-10 11:41:40 +0200 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2019-04-16 15:39:02 +0200 |
commit | 674ea351cdeb01d2740edce31db7f2d79ce6095d (patch) | |
tree | aaabcbffb1ebd5543da17d648b3818e5014b01f9 /arch/x86/kvm/x86.h | |
parent | f16cb57be82b20c6a00a6bb1750cb77c08e56c1a (diff) | |
download | linux-stable-674ea351cdeb01d2740edce31db7f2d79ce6095d.tar.gz linux-stable-674ea351cdeb01d2740edce31db7f2d79ce6095d.tar.bz2 linux-stable-674ea351cdeb01d2740edce31db7f2d79ce6095d.zip |
KVM: x86: optimize check for valid PAT value
This check will soon be done on every nested vmentry and vmexit,
"parallelize" it using bitwise operations.
Reviewed-by: Sean Christopherson <sean.j.christopherson@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/kvm/x86.h')
-rw-r--r-- | arch/x86/kvm/x86.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86.h b/arch/x86/kvm/x86.h index aedc5d0d4989..eda954441213 100644 --- a/arch/x86/kvm/x86.h +++ b/arch/x86/kvm/x86.h @@ -347,6 +347,16 @@ static inline void kvm_after_interrupt(struct kvm_vcpu *vcpu) __this_cpu_write(current_vcpu, NULL); } + +static inline bool kvm_pat_valid(u64 data) +{ + if (data & 0xF8F8F8F8F8F8F8F8ull) + return false; + /* 0, 1, 4, 5, 6, 7 are valid values. */ + return (data | ((data & 0x0202020202020202ull) << 1)) == data; +} + void kvm_load_guest_xcr0(struct kvm_vcpu *vcpu); void kvm_put_guest_xcr0(struct kvm_vcpu *vcpu); + #endif |