Lines Matching refs:run
157 int kvm_emu_iocsr(larch_inst inst, struct kvm_run *run, struct kvm_vcpu *vcpu) in kvm_emu_iocsr() argument
170 run->iocsr_io.phys_addr = addr; in kvm_emu_iocsr()
171 run->iocsr_io.is_write = 0; in kvm_emu_iocsr()
177 run->iocsr_io.len = 1; in kvm_emu_iocsr()
180 run->iocsr_io.len = 2; in kvm_emu_iocsr()
183 run->iocsr_io.len = 4; in kvm_emu_iocsr()
186 run->iocsr_io.len = 8; in kvm_emu_iocsr()
189 run->iocsr_io.len = 1; in kvm_emu_iocsr()
190 run->iocsr_io.is_write = 1; in kvm_emu_iocsr()
193 run->iocsr_io.len = 2; in kvm_emu_iocsr()
194 run->iocsr_io.is_write = 1; in kvm_emu_iocsr()
197 run->iocsr_io.len = 4; in kvm_emu_iocsr()
198 run->iocsr_io.is_write = 1; in kvm_emu_iocsr()
201 run->iocsr_io.len = 8; in kvm_emu_iocsr()
202 run->iocsr_io.is_write = 1; in kvm_emu_iocsr()
208 if (run->iocsr_io.is_write) { in kvm_emu_iocsr()
210 ret = kvm_io_bus_write(vcpu, KVM_IOCSR_BUS, addr, run->iocsr_io.len, val); in kvm_emu_iocsr()
217 memcpy(run->iocsr_io.data, val, run->iocsr_io.len); in kvm_emu_iocsr()
219 trace_kvm_iocsr(KVM_TRACE_IOCSR_WRITE, run->iocsr_io.len, addr, val); in kvm_emu_iocsr()
224 run->iocsr_io.len, run->iocsr_io.data); in kvm_emu_iocsr()
227 kvm_complete_iocsr_read(vcpu, run); in kvm_emu_iocsr()
231 trace_kvm_iocsr(KVM_TRACE_IOCSR_READ, run->iocsr_io.len, addr, NULL); in kvm_emu_iocsr()
237 int kvm_complete_iocsr_read(struct kvm_vcpu *vcpu, struct kvm_run *run) in kvm_complete_iocsr_read() argument
242 switch (run->iocsr_io.len) { in kvm_complete_iocsr_read()
244 *gpr = *(s8 *)run->iocsr_io.data; in kvm_complete_iocsr_read()
247 *gpr = *(s16 *)run->iocsr_io.data; in kvm_complete_iocsr_read()
250 *gpr = *(s32 *)run->iocsr_io.data; in kvm_complete_iocsr_read()
253 *gpr = *(s64 *)run->iocsr_io.data; in kvm_complete_iocsr_read()
257 run->iocsr_io.len, vcpu->arch.badv); in kvm_complete_iocsr_read()
281 struct kvm_run *run = vcpu->run; in kvm_trap_handle_gspr() local
308 er = kvm_emu_iocsr(inst, run, vcpu); in kvm_trap_handle_gspr()
356 vcpu->run->exit_reason = KVM_EXIT_MMIO; in kvm_handle_gspr()
359 vcpu->run->exit_reason = KVM_EXIT_LOONGARCH_IOCSR; in kvm_handle_gspr()
373 struct kvm_run *run = vcpu->run; in kvm_emu_mmio_read() local
375 run->mmio.phys_addr = vcpu->arch.badv; in kvm_emu_mmio_read()
387 run->mmio.len = 4; in kvm_emu_mmio_read()
390 run->mmio.len = 8; in kvm_emu_mmio_read()
403 run->mmio.len = 1; in kvm_emu_mmio_read()
407 run->mmio.len = 1; in kvm_emu_mmio_read()
410 run->mmio.len = 2; in kvm_emu_mmio_read()
414 run->mmio.len = 2; in kvm_emu_mmio_read()
417 run->mmio.len = 4; in kvm_emu_mmio_read()
421 run->mmio.len = 4; in kvm_emu_mmio_read()
424 run->mmio.len = 8; in kvm_emu_mmio_read()
437 run->mmio.len = 1; in kvm_emu_mmio_read()
440 run->mmio.len = 1; in kvm_emu_mmio_read()
444 run->mmio.len = 2; in kvm_emu_mmio_read()
447 run->mmio.len = 2; in kvm_emu_mmio_read()
451 run->mmio.len = 4; in kvm_emu_mmio_read()
454 run->mmio.len = 4; in kvm_emu_mmio_read()
458 run->mmio.len = 8; in kvm_emu_mmio_read()
470 trace_kvm_mmio(KVM_TRACE_MMIO_READ, run->mmio.len, run->mmio.phys_addr, NULL); in kvm_emu_mmio_read()
481 run->mmio.len, run->mmio.data); in kvm_emu_mmio_read()
484 kvm_complete_mmio_read(vcpu, run); in kvm_emu_mmio_read()
490 run->mmio.is_write = 0; in kvm_emu_mmio_read()
503 int kvm_complete_mmio_read(struct kvm_vcpu *vcpu, struct kvm_run *run) in kvm_complete_mmio_read() argument
510 switch (run->mmio.len) { in kvm_complete_mmio_read()
513 *gpr = *(s8 *)run->mmio.data; in kvm_complete_mmio_read()
515 *gpr = *(u8 *)run->mmio.data; in kvm_complete_mmio_read()
519 *gpr = *(s16 *)run->mmio.data; in kvm_complete_mmio_read()
521 *gpr = *(u16 *)run->mmio.data; in kvm_complete_mmio_read()
525 *gpr = *(s32 *)run->mmio.data; in kvm_complete_mmio_read()
527 *gpr = *(u32 *)run->mmio.data; in kvm_complete_mmio_read()
530 *gpr = *(s64 *)run->mmio.data; in kvm_complete_mmio_read()
534 run->mmio.len, vcpu->arch.badv); in kvm_complete_mmio_read()
539 trace_kvm_mmio(KVM_TRACE_MMIO_READ, run->mmio.len, in kvm_complete_mmio_read()
540 run->mmio.phys_addr, run->mmio.data); in kvm_complete_mmio_read()
550 struct kvm_run *run = vcpu->run; in kvm_emu_mmio_write() local
551 void *data = run->mmio.data; in kvm_emu_mmio_write()
561 run->mmio.phys_addr = vcpu->arch.badv; in kvm_emu_mmio_write()
570 run->mmio.len = 4; in kvm_emu_mmio_write()
574 run->mmio.len = 8; in kvm_emu_mmio_write()
589 run->mmio.len = 1; in kvm_emu_mmio_write()
593 run->mmio.len = 2; in kvm_emu_mmio_write()
597 run->mmio.len = 4; in kvm_emu_mmio_write()
601 run->mmio.len = 8; in kvm_emu_mmio_write()
615 run->mmio.len = 1; in kvm_emu_mmio_write()
619 run->mmio.len = 2; in kvm_emu_mmio_write()
623 run->mmio.len = 4; in kvm_emu_mmio_write()
627 run->mmio.len = 8; in kvm_emu_mmio_write()
640 trace_kvm_mmio(KVM_TRACE_MMIO_WRITE, run->mmio.len, run->mmio.phys_addr, data); in kvm_emu_mmio_write()
648 ret = kvm_io_bus_write(vcpu, KVM_MMIO_BUS, vcpu->arch.badv, run->mmio.len, data); in kvm_emu_mmio_write()
653 run->mmio.is_write = 1; in kvm_emu_mmio_write()
673 struct kvm_run *run = vcpu->run; in kvm_handle_rdwr_fault() local
702 run->exit_reason = KVM_EXIT_MMIO; in kvm_handle_rdwr_fault()
722 int kvm_complete_user_service(struct kvm_vcpu *vcpu, struct kvm_run *run) in kvm_complete_user_service() argument
725 kvm_write_reg(vcpu, LOONGARCH_GPR_A0, run->hypercall.ret); in kvm_complete_user_service()
740 struct kvm_run *run = vcpu->run; in kvm_handle_fpu_disabled() local
754 run->exit_reason = KVM_EXIT_INTERNAL_ERROR; in kvm_handle_fpu_disabled()
908 vcpu->run->exit_reason = KVM_EXIT_HYPERCALL; in kvm_handle_hypercall()
909 vcpu->run->hypercall.nr = KVM_HCALL_USER_SERVICE; in kvm_handle_hypercall()
910 vcpu->run->hypercall.args[0] = kvm_read_reg(vcpu, LOONGARCH_GPR_A0); in kvm_handle_hypercall()
911 vcpu->run->hypercall.args[1] = kvm_read_reg(vcpu, LOONGARCH_GPR_A1); in kvm_handle_hypercall()
912 vcpu->run->hypercall.args[2] = kvm_read_reg(vcpu, LOONGARCH_GPR_A2); in kvm_handle_hypercall()
913 vcpu->run->hypercall.args[3] = kvm_read_reg(vcpu, LOONGARCH_GPR_A3); in kvm_handle_hypercall()
914 vcpu->run->hypercall.args[4] = kvm_read_reg(vcpu, LOONGARCH_GPR_A4); in kvm_handle_hypercall()
915 vcpu->run->hypercall.args[5] = kvm_read_reg(vcpu, LOONGARCH_GPR_A5); in kvm_handle_hypercall()
916 vcpu->run->hypercall.flags = 0; in kvm_handle_hypercall()
920 vcpu->run->hypercall.ret = KVM_HCALL_INVALID_CODE; in kvm_handle_hypercall()
926 vcpu->run->exit_reason = KVM_EXIT_DEBUG; in kvm_handle_hypercall()