diff options
Diffstat (limited to 'arch/x86/kvm/kvm_cache_regs.h')
| -rw-r--r-- | arch/x86/kvm/kvm_cache_regs.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/arch/x86/kvm/kvm_cache_regs.h b/arch/x86/kvm/kvm_cache_regs.h new file mode 100644 index 000000000000..1ff819dce7d3 --- /dev/null +++ b/arch/x86/kvm/kvm_cache_regs.h | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | #ifndef ASM_KVM_CACHE_REGS_H | ||
| 2 | #define ASM_KVM_CACHE_REGS_H | ||
| 3 | |||
| 4 | static inline unsigned long kvm_register_read(struct kvm_vcpu *vcpu, | ||
| 5 | enum kvm_reg reg) | ||
| 6 | { | ||
| 7 | if (!test_bit(reg, (unsigned long *)&vcpu->arch.regs_avail)) | ||
| 8 | kvm_x86_ops->cache_reg(vcpu, reg); | ||
| 9 | |||
| 10 | return vcpu->arch.regs[reg]; | ||
| 11 | } | ||
| 12 | |||
| 13 | static inline void kvm_register_write(struct kvm_vcpu *vcpu, | ||
| 14 | enum kvm_reg reg, | ||
| 15 | unsigned long val) | ||
| 16 | { | ||
| 17 | vcpu->arch.regs[reg] = val; | ||
| 18 | __set_bit(reg, (unsigned long *)&vcpu->arch.regs_dirty); | ||
| 19 | __set_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); | ||
| 20 | } | ||
| 21 | |||
| 22 | static inline unsigned long kvm_rip_read(struct kvm_vcpu *vcpu) | ||
| 23 | { | ||
| 24 | return kvm_register_read(vcpu, VCPU_REGS_RIP); | ||
| 25 | } | ||
| 26 | |||
| 27 | static inline void kvm_rip_write(struct kvm_vcpu *vcpu, unsigned long val) | ||
| 28 | { | ||
| 29 | kvm_register_write(vcpu, VCPU_REGS_RIP, val); | ||
| 30 | } | ||
| 31 | |||
| 32 | #endif | ||
