Lines Matching full:vcpu
50 static inline void kvm_clear_exception_queue(struct kvm_vcpu *vcpu) in kvm_clear_exception_queue() argument
52 vcpu->arch.exception.pending = false; in kvm_clear_exception_queue()
53 vcpu->arch.exception.injected = false; in kvm_clear_exception_queue()
56 static inline void kvm_queue_interrupt(struct kvm_vcpu *vcpu, u8 vector, in kvm_queue_interrupt() argument
59 vcpu->arch.interrupt.injected = true; in kvm_queue_interrupt()
60 vcpu->arch.interrupt.soft = soft; in kvm_queue_interrupt()
61 vcpu->arch.interrupt.nr = vector; in kvm_queue_interrupt()
64 static inline void kvm_clear_interrupt_queue(struct kvm_vcpu *vcpu) in kvm_clear_interrupt_queue() argument
66 vcpu->arch.interrupt.injected = false; in kvm_clear_interrupt_queue()
69 static inline bool kvm_event_needs_reinjection(struct kvm_vcpu *vcpu) in kvm_event_needs_reinjection() argument
71 return vcpu->arch.exception.injected || vcpu->arch.interrupt.injected || in kvm_event_needs_reinjection()
72 vcpu->arch.nmi_injected; in kvm_event_needs_reinjection()
80 static inline bool is_protmode(struct kvm_vcpu *vcpu) in is_protmode() argument
82 return kvm_read_cr0_bits(vcpu, X86_CR0_PE); in is_protmode()
85 static inline int is_long_mode(struct kvm_vcpu *vcpu) in is_long_mode() argument
88 return vcpu->arch.efer & EFER_LMA; in is_long_mode()
94 static inline bool is_64_bit_mode(struct kvm_vcpu *vcpu) in is_64_bit_mode() argument
98 if (!is_long_mode(vcpu)) in is_64_bit_mode()
100 kvm_x86_ops.get_cs_db_l_bits(vcpu, &cs_db, &cs_l); in is_64_bit_mode()
104 static inline bool is_la57_mode(struct kvm_vcpu *vcpu) in is_la57_mode() argument
107 return (vcpu->arch.efer & EFER_LMA) && in is_la57_mode()
108 kvm_read_cr4_bits(vcpu, X86_CR4_LA57); in is_la57_mode()
123 static inline bool mmu_is_nested(struct kvm_vcpu *vcpu) in mmu_is_nested() argument
125 return vcpu->arch.walk_mmu == &vcpu->arch.nested_mmu; in mmu_is_nested()
128 static inline void kvm_vcpu_flush_tlb_current(struct kvm_vcpu *vcpu) in kvm_vcpu_flush_tlb_current() argument
130 ++vcpu->stat.tlb_flush; in kvm_vcpu_flush_tlb_current()
131 kvm_x86_ops.tlb_flush_current(vcpu); in kvm_vcpu_flush_tlb_current()
134 static inline int is_pae(struct kvm_vcpu *vcpu) in is_pae() argument
136 return kvm_read_cr4_bits(vcpu, X86_CR4_PAE); in is_pae()
139 static inline int is_pse(struct kvm_vcpu *vcpu) in is_pse() argument
141 return kvm_read_cr4_bits(vcpu, X86_CR4_PSE); in is_pse()
144 static inline int is_paging(struct kvm_vcpu *vcpu) in is_paging() argument
146 return likely(kvm_read_cr0_bits(vcpu, X86_CR0_PG)); in is_paging()
149 static inline bool is_pae_paging(struct kvm_vcpu *vcpu) in is_pae_paging() argument
151 return !is_long_mode(vcpu) && is_pae(vcpu) && is_paging(vcpu); in is_pae_paging()
154 static inline u8 vcpu_virt_addr_bits(struct kvm_vcpu *vcpu) in vcpu_virt_addr_bits() argument
156 return kvm_read_cr4_bits(vcpu, X86_CR4_LA57) ? 57 : 48; in vcpu_virt_addr_bits()
159 static inline bool is_noncanonical_address(u64 la, struct kvm_vcpu *vcpu) in is_noncanonical_address() argument
161 return !__is_canonical_address(la, vcpu_virt_addr_bits(vcpu)); in is_noncanonical_address()
164 static inline void vcpu_cache_mmio_info(struct kvm_vcpu *vcpu, in vcpu_cache_mmio_info() argument
167 u64 gen = kvm_memslots(vcpu->kvm)->generation; in vcpu_cache_mmio_info()
176 vcpu->arch.mmio_gva = mmu_is_nested(vcpu) ? 0 : gva & PAGE_MASK; in vcpu_cache_mmio_info()
177 vcpu->arch.mmio_access = access; in vcpu_cache_mmio_info()
178 vcpu->arch.mmio_gfn = gfn; in vcpu_cache_mmio_info()
179 vcpu->arch.mmio_gen = gen; in vcpu_cache_mmio_info()
182 static inline bool vcpu_match_mmio_gen(struct kvm_vcpu *vcpu) in vcpu_match_mmio_gen() argument
184 return vcpu->arch.mmio_gen == kvm_memslots(vcpu->kvm)->generation; in vcpu_match_mmio_gen()
193 static inline void vcpu_clear_mmio_info(struct kvm_vcpu *vcpu, gva_t gva) in vcpu_clear_mmio_info() argument
195 if (gva != MMIO_GVA_ANY && vcpu->arch.mmio_gva != (gva & PAGE_MASK)) in vcpu_clear_mmio_info()
198 vcpu->arch.mmio_gva = 0; in vcpu_clear_mmio_info()
201 static inline bool vcpu_match_mmio_gva(struct kvm_vcpu *vcpu, unsigned long gva) in vcpu_match_mmio_gva() argument
203 if (vcpu_match_mmio_gen(vcpu) && vcpu->arch.mmio_gva && in vcpu_match_mmio_gva()
204 vcpu->arch.mmio_gva == (gva & PAGE_MASK)) in vcpu_match_mmio_gva()
210 static inline bool vcpu_match_mmio_gpa(struct kvm_vcpu *vcpu, gpa_t gpa) in vcpu_match_mmio_gpa() argument
212 if (vcpu_match_mmio_gen(vcpu) && vcpu->arch.mmio_gfn && in vcpu_match_mmio_gpa()
213 vcpu->arch.mmio_gfn == gpa >> PAGE_SHIFT) in vcpu_match_mmio_gpa()
219 static inline unsigned long kvm_register_readl(struct kvm_vcpu *vcpu, int reg) in kvm_register_readl() argument
221 unsigned long val = kvm_register_read(vcpu, reg); in kvm_register_readl()
223 return is_64_bit_mode(vcpu) ? val : (u32)val; in kvm_register_readl()
226 static inline void kvm_register_writel(struct kvm_vcpu *vcpu, in kvm_register_writel() argument
229 if (!is_64_bit_mode(vcpu)) in kvm_register_writel()
231 return kvm_register_write(vcpu, reg, val); in kvm_register_writel()
239 static inline bool kvm_vcpu_latch_init(struct kvm_vcpu *vcpu) in kvm_vcpu_latch_init() argument
241 return is_smm(vcpu) || kvm_x86_ops.apic_init_signal_blocked(vcpu); in kvm_vcpu_latch_init()
244 void kvm_inject_realmode_interrupt(struct kvm_vcpu *vcpu, int irq, int inc_eip);
246 void kvm_write_tsc(struct kvm_vcpu *vcpu, struct msr_data *msr);
249 int kvm_read_guest_virt(struct kvm_vcpu *vcpu,
253 int kvm_write_guest_virt_system(struct kvm_vcpu *vcpu,
257 int handle_ud(struct kvm_vcpu *vcpu);
259 void kvm_deliver_exception_payload(struct kvm_vcpu *vcpu);
261 void kvm_vcpu_mtrr_init(struct kvm_vcpu *vcpu);
262 u8 kvm_mtrr_get_guest_memory_type(struct kvm_vcpu *vcpu, gfn_t gfn);
263 bool kvm_mtrr_valid(struct kvm_vcpu *vcpu, u32 msr, u64 data);
264 int kvm_mtrr_set_msr(struct kvm_vcpu *vcpu, u32 msr, u64 data);
265 int kvm_mtrr_get_msr(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata);
266 bool kvm_mtrr_check_gfn_range_consistency(struct kvm_vcpu *vcpu, gfn_t gfn,
269 void kvm_fixup_and_inject_pf_error(struct kvm_vcpu *vcpu, gva_t gva, u16 error_code);
270 int x86_decode_emulated_instruction(struct kvm_vcpu *vcpu, int emulation_type,
272 int x86_emulate_instruction(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,
274 fastpath_t handle_fastpath_set_msr_irqoff(struct kvm_vcpu *vcpu);
294 static inline u64 nsec_to_cycles(struct kvm_vcpu *vcpu, u64 nsec) in nsec_to_cycles() argument
296 return pvclock_scale_delta(nsec, vcpu->arch.virtual_tsc_mult, in nsec_to_cycles()
297 vcpu->arch.virtual_tsc_shift); in nsec_to_cycles()
336 static inline void kvm_before_interrupt(struct kvm_vcpu *vcpu) in kvm_before_interrupt() argument
338 __this_cpu_write(current_vcpu, vcpu); in kvm_before_interrupt()
341 static inline void kvm_after_interrupt(struct kvm_vcpu *vcpu) in kvm_after_interrupt() argument
366 void kvm_load_guest_xsave_state(struct kvm_vcpu *vcpu);
367 void kvm_load_host_xsave_state(struct kvm_vcpu *vcpu);
369 int kvm_valid_cr4(struct kvm_vcpu *vcpu, unsigned long cr4);
370 bool kvm_vcpu_exit_request(struct kvm_vcpu *vcpu);
371 int kvm_handle_memory_failure(struct kvm_vcpu *vcpu, int r,
373 int kvm_handle_invpcid(struct kvm_vcpu *vcpu, unsigned long type, gva_t gva);
374 bool kvm_msr_allowed(struct kvm_vcpu *vcpu, u32 index, u32 type);