Lines Matching refs:vcpu
32 static void kvm_handle_guest_serror(struct kvm_vcpu *vcpu, u64 esr) in kvm_handle_guest_serror() argument
35 kvm_inject_serror(vcpu); in kvm_handle_guest_serror()
38 static int handle_hvc(struct kvm_vcpu *vcpu) in handle_hvc() argument
40 trace_kvm_hvc_arm64(*vcpu_pc(vcpu), vcpu_get_reg(vcpu, 0), in handle_hvc()
41 kvm_vcpu_hvc_get_imm(vcpu)); in handle_hvc()
42 vcpu->stat.hvc_exit_stat++; in handle_hvc()
45 if (vcpu_has_nv(vcpu)) { in handle_hvc()
46 if (vcpu_read_sys_reg(vcpu, HCR_EL2) & HCR_HCD) in handle_hvc()
47 kvm_inject_undefined(vcpu); in handle_hvc()
49 kvm_inject_nested_sync(vcpu, kvm_vcpu_get_esr(vcpu)); in handle_hvc()
54 return kvm_smccc_call_handler(vcpu); in handle_hvc()
57 static int handle_smc(struct kvm_vcpu *vcpu) in handle_smc() argument
63 if (forward_smc_trap(vcpu)) in handle_smc()
76 kvm_incr_pc(vcpu); in handle_smc()
82 if (kvm_vcpu_hvc_get_imm(vcpu)) { in handle_smc()
83 vcpu_set_reg(vcpu, 0, ~0UL); in handle_smc()
94 return kvm_smccc_call_handler(vcpu); in handle_smc()
105 static int kvm_handle_fpasimd(struct kvm_vcpu *vcpu) in kvm_handle_fpasimd() argument
107 if (guest_hyp_fpsimd_traps_enabled(vcpu)) in kvm_handle_fpasimd()
108 return kvm_inject_nested_sync(vcpu, kvm_vcpu_get_esr(vcpu)); in kvm_handle_fpasimd()
111 kvm_inject_undefined(vcpu); in kvm_handle_fpasimd()
130 static int kvm_handle_wfx(struct kvm_vcpu *vcpu) in kvm_handle_wfx() argument
132 u64 esr = kvm_vcpu_get_esr(vcpu); in kvm_handle_wfx()
135 if (guest_hyp_wfx_traps_enabled(vcpu)) in kvm_handle_wfx()
136 return kvm_inject_nested_sync(vcpu, kvm_vcpu_get_esr(vcpu)); in kvm_handle_wfx()
139 trace_kvm_wfx_arm64(*vcpu_pc(vcpu), true); in kvm_handle_wfx()
140 vcpu->stat.wfe_exit_stat++; in kvm_handle_wfx()
142 trace_kvm_wfx_arm64(*vcpu_pc(vcpu), false); in kvm_handle_wfx()
143 vcpu->stat.wfi_exit_stat++; in kvm_handle_wfx()
150 now = kvm_arm_timer_get_reg(vcpu, KVM_REG_ARM_TIMER_CNT); in kvm_handle_wfx()
151 val = vcpu_get_reg(vcpu, kvm_vcpu_sys_get_rt(vcpu)); in kvm_handle_wfx()
162 kvm_vcpu_on_spin(vcpu, vcpu_mode_priv(vcpu)); in kvm_handle_wfx()
165 vcpu_set_flag(vcpu, IN_WFIT); in kvm_handle_wfx()
167 kvm_vcpu_wfi(vcpu); in kvm_handle_wfx()
170 kvm_incr_pc(vcpu); in kvm_handle_wfx()
186 static int kvm_handle_guest_debug(struct kvm_vcpu *vcpu) in kvm_handle_guest_debug() argument
188 struct kvm_run *run = vcpu->run; in kvm_handle_guest_debug()
189 u64 esr = kvm_vcpu_get_esr(vcpu); in kvm_handle_guest_debug()
191 if (!vcpu->guest_debug && forward_debug_exception(vcpu)) in kvm_handle_guest_debug()
201 run->debug.arch.far = vcpu->arch.fault.far_el2; in kvm_handle_guest_debug()
204 *vcpu_cpsr(vcpu) |= DBG_SPSR_SS; in kvm_handle_guest_debug()
211 static int kvm_handle_unknown_ec(struct kvm_vcpu *vcpu) in kvm_handle_unknown_ec() argument
213 u64 esr = kvm_vcpu_get_esr(vcpu); in kvm_handle_unknown_ec()
218 kvm_inject_undefined(vcpu); in kvm_handle_unknown_ec()
226 static int handle_sve(struct kvm_vcpu *vcpu) in handle_sve() argument
228 if (guest_hyp_sve_traps_enabled(vcpu)) in handle_sve()
229 return kvm_inject_nested_sync(vcpu, kvm_vcpu_get_esr(vcpu)); in handle_sve()
231 kvm_inject_undefined(vcpu); in handle_sve()
248 static int kvm_handle_ptrauth(struct kvm_vcpu *vcpu) in kvm_handle_ptrauth() argument
250 if (!vcpu_has_ptrauth(vcpu)) { in kvm_handle_ptrauth()
251 kvm_inject_undefined(vcpu); in kvm_handle_ptrauth()
255 if (is_nested_ctxt(vcpu)) { in kvm_handle_ptrauth()
256 kvm_inject_nested_sync(vcpu, kvm_vcpu_get_esr(vcpu)); in kvm_handle_ptrauth()
262 kvm_inject_undefined(vcpu); in kvm_handle_ptrauth()
266 static int kvm_handle_eret(struct kvm_vcpu *vcpu) in kvm_handle_eret() argument
268 if (esr_iss_is_eretax(kvm_vcpu_get_esr(vcpu)) && in kvm_handle_eret()
269 !vcpu_has_ptrauth(vcpu)) in kvm_handle_eret()
270 return kvm_handle_ptrauth(vcpu); in kvm_handle_eret()
283 if (is_hyp_ctxt(vcpu)) in kvm_handle_eret()
284 kvm_emulate_nested_eret(vcpu); in kvm_handle_eret()
286 kvm_inject_nested_sync(vcpu, kvm_vcpu_get_esr(vcpu)); in kvm_handle_eret()
291 static int handle_svc(struct kvm_vcpu *vcpu) in handle_svc() argument
298 kvm_inject_nested_sync(vcpu, kvm_vcpu_get_esr(vcpu)); in handle_svc()
302 static int kvm_handle_gcs(struct kvm_vcpu *vcpu) in kvm_handle_gcs() argument
305 if (kvm_has_feat(vcpu->kvm, ID_AA64PFR1_EL1, GCS, IMP)) in kvm_handle_gcs()
308 kvm_inject_undefined(vcpu); in kvm_handle_gcs()
312 static int handle_other(struct kvm_vcpu *vcpu) in handle_other() argument
314 bool allowed, fwd = is_nested_ctxt(vcpu); in handle_other()
315 u64 hcrx = __vcpu_sys_reg(vcpu, HCRX_EL2); in handle_other()
316 u64 esr = kvm_vcpu_get_esr(vcpu); in handle_other()
318 struct kvm *kvm = vcpu->kvm; in handle_other()
349 fwd &= (__vcpu_sys_reg(vcpu, HFGITR2_EL2) & HFGITR2_EL2_TSBCSYNC); in handle_other()
353 fwd &= (__vcpu_sys_reg(vcpu, HFGITR_EL2) & HFGITR_EL2_PSBCSYNC); in handle_other()
364 kvm_inject_nested_sync(vcpu, esr); in handle_other()
366 kvm_inject_undefined(vcpu); in handle_other()
402 static exit_handle_fn kvm_get_exit_handler(struct kvm_vcpu *vcpu) in kvm_get_exit_handler() argument
404 u64 esr = kvm_vcpu_get_esr(vcpu); in kvm_get_exit_handler()
416 static int handle_trap_exceptions(struct kvm_vcpu *vcpu) in handle_trap_exceptions() argument
424 if (!kvm_condition_valid(vcpu)) { in handle_trap_exceptions()
425 kvm_incr_pc(vcpu); in handle_trap_exceptions()
430 exit_handler = kvm_get_exit_handler(vcpu); in handle_trap_exceptions()
431 handled = exit_handler(vcpu); in handle_trap_exceptions()
441 int handle_exit(struct kvm_vcpu *vcpu, int exception_index) in handle_exit() argument
443 struct kvm_run *run = vcpu->run; in handle_exit()
461 return handle_trap_exceptions(vcpu); in handle_exit()
485 void handle_exit_early(struct kvm_vcpu *vcpu, int exception_index) in handle_exit_early() argument
489 u64 disr = kvm_vcpu_get_disr(vcpu); in handle_exit_early()
491 kvm_handle_guest_serror(vcpu, disr_to_esr(disr)); in handle_exit_early()
493 kvm_inject_serror(vcpu); in handle_exit_early()
502 kvm_handle_guest_serror(vcpu, kvm_vcpu_get_esr(vcpu)); in handle_exit_early()
521 u64 par, uintptr_t vcpu, in nvhe_hyp_panic_handler() argument
571 spsr, elr_virt, esr, far, hpfar, par, vcpu); in nvhe_hyp_panic_handler()