Lines Matching refs:vcpu
40 static int kvm_trap_emul_handle_cop_unusable(struct kvm_vcpu *vcpu) in kvm_trap_emul_handle_cop_unusable() argument
42 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_trap_emul_handle_cop_unusable()
43 struct kvm_run *run = vcpu->run; in kvm_trap_emul_handle_cop_unusable()
44 uint32_t __user *opc = (uint32_t __user *) vcpu->arch.pc; in kvm_trap_emul_handle_cop_unusable()
45 unsigned long cause = vcpu->arch.host_cp0_cause; in kvm_trap_emul_handle_cop_unusable()
51 if (!kvm_mips_guest_has_fpu(&vcpu->arch) || in kvm_trap_emul_handle_cop_unusable()
57 er = kvm_mips_emulate_fpu_exc(cause, opc, run, vcpu); in kvm_trap_emul_handle_cop_unusable()
60 kvm_own_fpu(vcpu); in kvm_trap_emul_handle_cop_unusable()
64 er = kvm_mips_emulate_inst(cause, opc, run, vcpu); in kvm_trap_emul_handle_cop_unusable()
88 static int kvm_trap_emul_handle_tlb_mod(struct kvm_vcpu *vcpu) in kvm_trap_emul_handle_tlb_mod() argument
90 struct kvm_run *run = vcpu->run; in kvm_trap_emul_handle_tlb_mod()
91 uint32_t __user *opc = (uint32_t __user *) vcpu->arch.pc; in kvm_trap_emul_handle_tlb_mod()
92 unsigned long badvaddr = vcpu->arch.host_cp0_badvaddr; in kvm_trap_emul_handle_tlb_mod()
93 unsigned long cause = vcpu->arch.host_cp0_cause; in kvm_trap_emul_handle_tlb_mod()
101 er = kvm_mips_handle_tlbmod(cause, opc, run, vcpu); in kvm_trap_emul_handle_tlb_mod()
118 kvm_arch_vcpu_dump_regs(vcpu); in kvm_trap_emul_handle_tlb_mod()
125 kvm_arch_vcpu_dump_regs(vcpu); in kvm_trap_emul_handle_tlb_mod()
132 static int kvm_trap_emul_handle_tlb_st_miss(struct kvm_vcpu *vcpu) in kvm_trap_emul_handle_tlb_st_miss() argument
134 struct kvm_run *run = vcpu->run; in kvm_trap_emul_handle_tlb_st_miss()
135 uint32_t __user *opc = (uint32_t __user *) vcpu->arch.pc; in kvm_trap_emul_handle_tlb_st_miss()
136 unsigned long badvaddr = vcpu->arch.host_cp0_badvaddr; in kvm_trap_emul_handle_tlb_st_miss()
137 unsigned long cause = vcpu->arch.host_cp0_cause; in kvm_trap_emul_handle_tlb_st_miss()
142 && KVM_GUEST_KERNEL_MODE(vcpu)) { in kvm_trap_emul_handle_tlb_st_miss()
143 if (kvm_mips_handle_commpage_tlb_fault(badvaddr, vcpu) < 0) { in kvm_trap_emul_handle_tlb_st_miss()
151 er = kvm_mips_handle_tlbmiss(cause, opc, run, vcpu); in kvm_trap_emul_handle_tlb_st_miss()
164 (vcpu->arch.host_cp0_badvaddr, vcpu) < 0) { in kvm_trap_emul_handle_tlb_st_miss()
172 kvm_arch_vcpu_dump_regs(vcpu); in kvm_trap_emul_handle_tlb_st_miss()
179 static int kvm_trap_emul_handle_tlb_ld_miss(struct kvm_vcpu *vcpu) in kvm_trap_emul_handle_tlb_ld_miss() argument
181 struct kvm_run *run = vcpu->run; in kvm_trap_emul_handle_tlb_ld_miss()
182 uint32_t __user *opc = (uint32_t __user *) vcpu->arch.pc; in kvm_trap_emul_handle_tlb_ld_miss()
183 unsigned long badvaddr = vcpu->arch.host_cp0_badvaddr; in kvm_trap_emul_handle_tlb_ld_miss()
184 unsigned long cause = vcpu->arch.host_cp0_cause; in kvm_trap_emul_handle_tlb_ld_miss()
189 && KVM_GUEST_KERNEL_MODE(vcpu)) { in kvm_trap_emul_handle_tlb_ld_miss()
190 if (kvm_mips_handle_commpage_tlb_fault(badvaddr, vcpu) < 0) { in kvm_trap_emul_handle_tlb_ld_miss()
197 vcpu->arch.pc, badvaddr); in kvm_trap_emul_handle_tlb_ld_miss()
209 er = kvm_mips_handle_tlbmiss(cause, opc, run, vcpu); in kvm_trap_emul_handle_tlb_ld_miss()
218 (vcpu->arch.host_cp0_badvaddr, vcpu) < 0) { in kvm_trap_emul_handle_tlb_ld_miss()
226 kvm_arch_vcpu_dump_regs(vcpu); in kvm_trap_emul_handle_tlb_ld_miss()
233 static int kvm_trap_emul_handle_addr_err_st(struct kvm_vcpu *vcpu) in kvm_trap_emul_handle_addr_err_st() argument
235 struct kvm_run *run = vcpu->run; in kvm_trap_emul_handle_addr_err_st()
236 uint32_t __user *opc = (uint32_t __user *) vcpu->arch.pc; in kvm_trap_emul_handle_addr_err_st()
237 unsigned long badvaddr = vcpu->arch.host_cp0_badvaddr; in kvm_trap_emul_handle_addr_err_st()
238 unsigned long cause = vcpu->arch.host_cp0_cause; in kvm_trap_emul_handle_addr_err_st()
242 if (KVM_GUEST_KERNEL_MODE(vcpu) in kvm_trap_emul_handle_addr_err_st()
245 er = kvm_mips_emulate_inst(cause, opc, run, vcpu); in kvm_trap_emul_handle_addr_err_st()
263 static int kvm_trap_emul_handle_addr_err_ld(struct kvm_vcpu *vcpu) in kvm_trap_emul_handle_addr_err_ld() argument
265 struct kvm_run *run = vcpu->run; in kvm_trap_emul_handle_addr_err_ld()
266 uint32_t __user *opc = (uint32_t __user *) vcpu->arch.pc; in kvm_trap_emul_handle_addr_err_ld()
267 unsigned long badvaddr = vcpu->arch.host_cp0_badvaddr; in kvm_trap_emul_handle_addr_err_ld()
268 unsigned long cause = vcpu->arch.host_cp0_cause; in kvm_trap_emul_handle_addr_err_ld()
274 er = kvm_mips_emulate_inst(cause, opc, run, vcpu); in kvm_trap_emul_handle_addr_err_ld()
293 static int kvm_trap_emul_handle_syscall(struct kvm_vcpu *vcpu) in kvm_trap_emul_handle_syscall() argument
295 struct kvm_run *run = vcpu->run; in kvm_trap_emul_handle_syscall()
296 uint32_t __user *opc = (uint32_t __user *) vcpu->arch.pc; in kvm_trap_emul_handle_syscall()
297 unsigned long cause = vcpu->arch.host_cp0_cause; in kvm_trap_emul_handle_syscall()
301 er = kvm_mips_emulate_syscall(cause, opc, run, vcpu); in kvm_trap_emul_handle_syscall()
311 static int kvm_trap_emul_handle_res_inst(struct kvm_vcpu *vcpu) in kvm_trap_emul_handle_res_inst() argument
313 struct kvm_run *run = vcpu->run; in kvm_trap_emul_handle_res_inst()
314 uint32_t __user *opc = (uint32_t __user *) vcpu->arch.pc; in kvm_trap_emul_handle_res_inst()
315 unsigned long cause = vcpu->arch.host_cp0_cause; in kvm_trap_emul_handle_res_inst()
319 er = kvm_mips_handle_ri(cause, opc, run, vcpu); in kvm_trap_emul_handle_res_inst()
329 static int kvm_trap_emul_handle_break(struct kvm_vcpu *vcpu) in kvm_trap_emul_handle_break() argument
331 struct kvm_run *run = vcpu->run; in kvm_trap_emul_handle_break()
332 uint32_t __user *opc = (uint32_t __user *) vcpu->arch.pc; in kvm_trap_emul_handle_break()
333 unsigned long cause = vcpu->arch.host_cp0_cause; in kvm_trap_emul_handle_break()
337 er = kvm_mips_emulate_bp_exc(cause, opc, run, vcpu); in kvm_trap_emul_handle_break()
347 static int kvm_trap_emul_handle_trap(struct kvm_vcpu *vcpu) in kvm_trap_emul_handle_trap() argument
349 struct kvm_run *run = vcpu->run; in kvm_trap_emul_handle_trap()
350 uint32_t __user *opc = (uint32_t __user *)vcpu->arch.pc; in kvm_trap_emul_handle_trap()
351 unsigned long cause = vcpu->arch.host_cp0_cause; in kvm_trap_emul_handle_trap()
355 er = kvm_mips_emulate_trap_exc(cause, opc, run, vcpu); in kvm_trap_emul_handle_trap()
365 static int kvm_trap_emul_handle_msa_fpe(struct kvm_vcpu *vcpu) in kvm_trap_emul_handle_msa_fpe() argument
367 struct kvm_run *run = vcpu->run; in kvm_trap_emul_handle_msa_fpe()
368 uint32_t __user *opc = (uint32_t __user *)vcpu->arch.pc; in kvm_trap_emul_handle_msa_fpe()
369 unsigned long cause = vcpu->arch.host_cp0_cause; in kvm_trap_emul_handle_msa_fpe()
373 er = kvm_mips_emulate_msafpe_exc(cause, opc, run, vcpu); in kvm_trap_emul_handle_msa_fpe()
383 static int kvm_trap_emul_handle_fpe(struct kvm_vcpu *vcpu) in kvm_trap_emul_handle_fpe() argument
385 struct kvm_run *run = vcpu->run; in kvm_trap_emul_handle_fpe()
386 uint32_t __user *opc = (uint32_t __user *)vcpu->arch.pc; in kvm_trap_emul_handle_fpe()
387 unsigned long cause = vcpu->arch.host_cp0_cause; in kvm_trap_emul_handle_fpe()
391 er = kvm_mips_emulate_fpe_exc(cause, opc, run, vcpu); in kvm_trap_emul_handle_fpe()
407 static int kvm_trap_emul_handle_msa_disabled(struct kvm_vcpu *vcpu) in kvm_trap_emul_handle_msa_disabled() argument
409 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_trap_emul_handle_msa_disabled()
410 struct kvm_run *run = vcpu->run; in kvm_trap_emul_handle_msa_disabled()
411 uint32_t __user *opc = (uint32_t __user *) vcpu->arch.pc; in kvm_trap_emul_handle_msa_disabled()
412 unsigned long cause = vcpu->arch.host_cp0_cause; in kvm_trap_emul_handle_msa_disabled()
416 if (!kvm_mips_guest_has_msa(&vcpu->arch) || in kvm_trap_emul_handle_msa_disabled()
422 er = kvm_mips_emulate_ri_exc(cause, opc, run, vcpu); in kvm_trap_emul_handle_msa_disabled()
425 er = kvm_mips_emulate_msadis_exc(cause, opc, run, vcpu); in kvm_trap_emul_handle_msa_disabled()
428 kvm_own_msa(vcpu); in kvm_trap_emul_handle_msa_disabled()
453 static int kvm_trap_emul_vcpu_init(struct kvm_vcpu *vcpu) in kvm_trap_emul_vcpu_init() argument
458 static int kvm_trap_emul_vcpu_setup(struct kvm_vcpu *vcpu) in kvm_trap_emul_vcpu_setup() argument
460 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_trap_emul_vcpu_setup()
462 int vcpu_id = vcpu->vcpu_id; in kvm_trap_emul_vcpu_setup()
514 static int kvm_trap_emul_get_one_reg(struct kvm_vcpu *vcpu, in kvm_trap_emul_get_one_reg() argument
520 *v = kvm_mips_read_count(vcpu); in kvm_trap_emul_get_one_reg()
523 *v = vcpu->arch.count_ctl; in kvm_trap_emul_get_one_reg()
526 *v = ktime_to_ns(vcpu->arch.count_resume); in kvm_trap_emul_get_one_reg()
529 *v = vcpu->arch.count_hz; in kvm_trap_emul_get_one_reg()
537 static int kvm_trap_emul_set_one_reg(struct kvm_vcpu *vcpu, in kvm_trap_emul_set_one_reg() argument
541 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_trap_emul_set_one_reg()
547 kvm_mips_write_count(vcpu, v); in kvm_trap_emul_set_one_reg()
550 kvm_mips_write_compare(vcpu, v, false); in kvm_trap_emul_set_one_reg()
561 kvm_mips_count_disable_cause(vcpu); in kvm_trap_emul_set_one_reg()
566 kvm_mips_count_enable_cause(vcpu); in kvm_trap_emul_set_one_reg()
577 change = (cur ^ v) & kvm_mips_config1_wrmask(vcpu); in kvm_trap_emul_set_one_reg()
588 change = (cur ^ v) & kvm_mips_config3_wrmask(vcpu); in kvm_trap_emul_set_one_reg()
596 change = (cur ^ v) & kvm_mips_config4_wrmask(vcpu); in kvm_trap_emul_set_one_reg()
604 change = (cur ^ v) & kvm_mips_config5_wrmask(vcpu); in kvm_trap_emul_set_one_reg()
611 ret = kvm_mips_set_count_ctl(vcpu, v); in kvm_trap_emul_set_one_reg()
614 ret = kvm_mips_set_count_resume(vcpu, v); in kvm_trap_emul_set_one_reg()
617 ret = kvm_mips_set_count_hz(vcpu, v); in kvm_trap_emul_set_one_reg()
625 static int kvm_trap_emul_vcpu_get_regs(struct kvm_vcpu *vcpu) in kvm_trap_emul_vcpu_get_regs() argument
627 kvm_lose_fpu(vcpu); in kvm_trap_emul_vcpu_get_regs()
632 static int kvm_trap_emul_vcpu_set_regs(struct kvm_vcpu *vcpu) in kvm_trap_emul_vcpu_set_regs() argument