1#ifndef ASM_KVM_CACHE_REGS_H 2#define ASM_KVM_CACHE_REGS_H 3 4static 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 13static 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 22static inline unsigned long kvm_rip_read(struct kvm_vcpu *vcpu) 23{ 24 return kvm_register_read(vcpu, VCPU_REGS_RIP); 25} 26 27static inline void kvm_rip_write(struct kvm_vcpu *vcpu, unsigned long val) 28{ 29 kvm_register_write(vcpu, VCPU_REGS_RIP, val); 30} 31 32static inline u64 kvm_pdptr_read(struct kvm_vcpu *vcpu, int index) 33{ 34 if (!test_bit(VCPU_EXREG_PDPTR, 35 (unsigned long *)&vcpu->arch.regs_avail)) 36 kvm_x86_ops->cache_reg(vcpu, VCPU_EXREG_PDPTR); 37 38 return vcpu->arch.pdptrs[index]; 39} 40 41#endif 42