| #ifndef ASM_KVM_CACHE_REGS_H |
| #define ASM_KVM_CACHE_REGS_H |
| |
| static inline unsigned long kvm_register_read(struct kvm_vcpu *vcpu, |
| enum kvm_reg reg) |
| { |
| if (!test_bit(reg, (unsigned long *)&vcpu->arch.regs_avail)) |
| kvm_x86_ops->cache_reg(vcpu, reg); |
| |
| return vcpu->arch.regs[reg]; |
| } |
| |
| static inline void kvm_register_write(struct kvm_vcpu *vcpu, |
| enum kvm_reg reg, |
| unsigned long val) |
| { |
| vcpu->arch.regs[reg] = val; |
| __set_bit(reg, (unsigned long *)&vcpu->arch.regs_dirty); |
| __set_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); |
| } |
| |
| static inline unsigned long kvm_rip_read(struct kvm_vcpu *vcpu) |
| { |
| return kvm_register_read(vcpu, VCPU_REGS_RIP); |
| } |
| |
| static inline void kvm_rip_write(struct kvm_vcpu *vcpu, unsigned long val) |
| { |
| kvm_register_write(vcpu, VCPU_REGS_RIP, val); |
| } |
| |
| static inline u64 kvm_pdptr_read(struct kvm_vcpu *vcpu, int index) |
| { |
| if (!test_bit(VCPU_EXREG_PDPTR, |
| (unsigned long *)&vcpu->arch.regs_avail)) |
| kvm_x86_ops->cache_reg(vcpu, VCPU_EXREG_PDPTR); |
| |
| return vcpu->arch.pdptrs[index]; |
| } |
| |
| #endif |