diff options
Diffstat (limited to 'arch/x86/kvm/kvm_cache_regs.h')
-rw-r--r-- | arch/x86/kvm/kvm_cache_regs.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/arch/x86/kvm/kvm_cache_regs.h b/arch/x86/kvm/kvm_cache_regs.h index 7bcc5b6a4403..cff851cf5322 100644 --- a/arch/x86/kvm/kvm_cache_regs.h +++ b/arch/x86/kvm/kvm_cache_regs.h | |||
@@ -1,6 +1,11 @@ | |||
1 | #ifndef ASM_KVM_CACHE_REGS_H | 1 | #ifndef ASM_KVM_CACHE_REGS_H |
2 | #define ASM_KVM_CACHE_REGS_H | 2 | #define ASM_KVM_CACHE_REGS_H |
3 | 3 | ||
4 | #define KVM_POSSIBLE_CR0_GUEST_BITS X86_CR0_TS | ||
5 | #define KVM_POSSIBLE_CR4_GUEST_BITS \ | ||
6 | (X86_CR4_PVI | X86_CR4_DE | X86_CR4_PCE | X86_CR4_OSFXSR \ | ||
7 | | X86_CR4_OSXMMEXCPT | X86_CR4_PGE) | ||
8 | |||
4 | static inline unsigned long kvm_register_read(struct kvm_vcpu *vcpu, | 9 | static inline unsigned long kvm_register_read(struct kvm_vcpu *vcpu, |
5 | enum kvm_reg reg) | 10 | enum kvm_reg reg) |
6 | { | 11 | { |
@@ -38,4 +43,30 @@ static inline u64 kvm_pdptr_read(struct kvm_vcpu *vcpu, int index) | |||
38 | return vcpu->arch.pdptrs[index]; | 43 | return vcpu->arch.pdptrs[index]; |
39 | } | 44 | } |
40 | 45 | ||
46 | static inline ulong kvm_read_cr0_bits(struct kvm_vcpu *vcpu, ulong mask) | ||
47 | { | ||
48 | ulong tmask = mask & KVM_POSSIBLE_CR0_GUEST_BITS; | ||
49 | if (tmask & vcpu->arch.cr0_guest_owned_bits) | ||
50 | kvm_x86_ops->decache_cr0_guest_bits(vcpu); | ||
51 | return vcpu->arch.cr0 & mask; | ||
52 | } | ||
53 | |||
54 | static inline ulong kvm_read_cr0(struct kvm_vcpu *vcpu) | ||
55 | { | ||
56 | return kvm_read_cr0_bits(vcpu, ~0UL); | ||
57 | } | ||
58 | |||
59 | static inline ulong kvm_read_cr4_bits(struct kvm_vcpu *vcpu, ulong mask) | ||
60 | { | ||
61 | ulong tmask = mask & KVM_POSSIBLE_CR4_GUEST_BITS; | ||
62 | if (tmask & vcpu->arch.cr4_guest_owned_bits) | ||
63 | kvm_x86_ops->decache_cr4_guest_bits(vcpu); | ||
64 | return vcpu->arch.cr4 & mask; | ||
65 | } | ||
66 | |||
67 | static inline ulong kvm_read_cr4(struct kvm_vcpu *vcpu) | ||
68 | { | ||
69 | return kvm_read_cr4_bits(vcpu, ~0UL); | ||
70 | } | ||
71 | |||
41 | #endif | 72 | #endif |