Lines Matching refs:vcpu
40 static int kvm_compute_return_epc(struct kvm_vcpu *vcpu, unsigned long instpc, in kvm_compute_return_epc() argument
45 struct kvm_vcpu_arch *arch = &vcpu->arch; in kvm_compute_return_epc()
56 err = kvm_get_badinstrp((u32 *)epc, vcpu, &insn.word); in kvm_compute_return_epc()
243 enum emulation_result update_pc(struct kvm_vcpu *vcpu, u32 cause) in update_pc() argument
248 err = kvm_compute_return_epc(vcpu, vcpu->arch.pc, in update_pc()
249 &vcpu->arch.pc); in update_pc()
253 vcpu->arch.pc += 4; in update_pc()
256 kvm_debug("update_pc(): New PC: %#lx\n", vcpu->arch.pc); in update_pc()
272 int kvm_get_badinstr(u32 *opc, struct kvm_vcpu *vcpu, u32 *out) in kvm_get_badinstr() argument
275 *out = vcpu->arch.host_cp0_badinstr; in kvm_get_badinstr()
294 int kvm_get_badinstrp(u32 *opc, struct kvm_vcpu *vcpu, u32 *out) in kvm_get_badinstrp() argument
297 *out = vcpu->arch.host_cp0_badinstrp; in kvm_get_badinstrp()
313 int kvm_mips_count_disabled(struct kvm_vcpu *vcpu) in kvm_mips_count_disabled() argument
315 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_mips_count_disabled()
317 return (vcpu->arch.count_ctl & KVM_REG_MIPS_COUNT_CTL_DC) || in kvm_mips_count_disabled()
328 static u32 kvm_mips_ktime_to_count(struct kvm_vcpu *vcpu, ktime_t now) in kvm_mips_ktime_to_count() argument
334 delta = now_ns + vcpu->arch.count_dyn_bias; in kvm_mips_ktime_to_count()
336 if (delta >= vcpu->arch.count_period) { in kvm_mips_ktime_to_count()
338 periods = div64_s64(now_ns, vcpu->arch.count_period); in kvm_mips_ktime_to_count()
339 vcpu->arch.count_dyn_bias = -periods * vcpu->arch.count_period; in kvm_mips_ktime_to_count()
341 delta = now_ns + vcpu->arch.count_dyn_bias; in kvm_mips_ktime_to_count()
354 return div_u64(delta * vcpu->arch.count_hz, NSEC_PER_SEC); in kvm_mips_ktime_to_count()
367 static inline ktime_t kvm_mips_count_time(struct kvm_vcpu *vcpu) in kvm_mips_count_time() argument
369 if (unlikely(vcpu->arch.count_ctl & KVM_REG_MIPS_COUNT_CTL_DC)) in kvm_mips_count_time()
370 return vcpu->arch.count_resume; in kvm_mips_count_time()
385 static u32 kvm_mips_read_count_running(struct kvm_vcpu *vcpu, ktime_t now) in kvm_mips_read_count_running() argument
387 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_mips_read_count_running()
393 count = vcpu->arch.count_bias + kvm_mips_ktime_to_count(vcpu, now); in kvm_mips_read_count_running()
409 expires = hrtimer_get_expires(&vcpu->arch.comparecount_timer); in kvm_mips_read_count_running()
410 threshold = ktime_add_ns(now, vcpu->arch.count_period / 4); in kvm_mips_read_count_running()
416 running = hrtimer_cancel(&vcpu->arch.comparecount_timer); in kvm_mips_read_count_running()
419 kvm_mips_callbacks->queue_timer_int(vcpu); in kvm_mips_read_count_running()
427 vcpu->arch.count_period); in kvm_mips_read_count_running()
428 hrtimer_start(&vcpu->arch.comparecount_timer, expires, in kvm_mips_read_count_running()
445 u32 kvm_mips_read_count(struct kvm_vcpu *vcpu) in kvm_mips_read_count() argument
447 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_mips_read_count()
450 if (kvm_mips_count_disabled(vcpu)) in kvm_mips_read_count()
453 return kvm_mips_read_count_running(vcpu, ktime_get()); in kvm_mips_read_count()
472 ktime_t kvm_mips_freeze_hrtimer(struct kvm_vcpu *vcpu, u32 *count) in kvm_mips_freeze_hrtimer() argument
477 hrtimer_cancel(&vcpu->arch.comparecount_timer); in kvm_mips_freeze_hrtimer()
481 *count = kvm_mips_read_count_running(vcpu, now); in kvm_mips_freeze_hrtimer()
502 static void kvm_mips_resume_hrtimer(struct kvm_vcpu *vcpu, in kvm_mips_resume_hrtimer() argument
505 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_mips_resume_hrtimer()
513 delta = div_u64(delta * NSEC_PER_SEC, vcpu->arch.count_hz); in kvm_mips_resume_hrtimer()
517 hrtimer_cancel(&vcpu->arch.comparecount_timer); in kvm_mips_resume_hrtimer()
518 hrtimer_start(&vcpu->arch.comparecount_timer, expire, HRTIMER_MODE_ABS); in kvm_mips_resume_hrtimer()
543 int kvm_mips_restore_hrtimer(struct kvm_vcpu *vcpu, ktime_t before, in kvm_mips_restore_hrtimer() argument
552 before_count = vcpu->arch.count_bias + in kvm_mips_restore_hrtimer()
553 kvm_mips_ktime_to_count(vcpu, before); in kvm_mips_restore_hrtimer()
565 vcpu->arch.count_bias += drift; in kvm_mips_restore_hrtimer()
572 now_count = vcpu->arch.count_bias + kvm_mips_ktime_to_count(vcpu, now); in kvm_mips_restore_hrtimer()
581 vcpu->arch.count_bias += drift; in kvm_mips_restore_hrtimer()
588 delta = div_u64(delta * NSEC_PER_SEC, vcpu->arch.count_hz); in kvm_mips_restore_hrtimer()
593 kvm_mips_resume_hrtimer(vcpu, count_time, count); in kvm_mips_restore_hrtimer()
604 void kvm_mips_write_count(struct kvm_vcpu *vcpu, u32 count) in kvm_mips_write_count() argument
606 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_mips_write_count()
610 now = kvm_mips_count_time(vcpu); in kvm_mips_write_count()
611 vcpu->arch.count_bias = count - kvm_mips_ktime_to_count(vcpu, now); in kvm_mips_write_count()
613 if (kvm_mips_count_disabled(vcpu)) in kvm_mips_write_count()
618 kvm_mips_resume_hrtimer(vcpu, now, count); in kvm_mips_write_count()
629 void kvm_mips_init_count(struct kvm_vcpu *vcpu, unsigned long count_hz) in kvm_mips_init_count() argument
631 vcpu->arch.count_hz = count_hz; in kvm_mips_init_count()
632 vcpu->arch.count_period = div_u64((u64)NSEC_PER_SEC << 32, count_hz); in kvm_mips_init_count()
633 vcpu->arch.count_dyn_bias = 0; in kvm_mips_init_count()
636 kvm_mips_write_count(vcpu, 0); in kvm_mips_init_count()
650 int kvm_mips_set_count_hz(struct kvm_vcpu *vcpu, s64 count_hz) in kvm_mips_set_count_hz() argument
652 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_mips_set_count_hz()
661 if (vcpu->arch.count_hz == count_hz) in kvm_mips_set_count_hz()
665 dc = kvm_mips_count_disabled(vcpu); in kvm_mips_set_count_hz()
667 now = kvm_mips_count_time(vcpu); in kvm_mips_set_count_hz()
670 now = kvm_mips_freeze_hrtimer(vcpu, &count); in kvm_mips_set_count_hz()
674 vcpu->arch.count_hz = count_hz; in kvm_mips_set_count_hz()
675 vcpu->arch.count_period = div_u64((u64)NSEC_PER_SEC << 32, count_hz); in kvm_mips_set_count_hz()
676 vcpu->arch.count_dyn_bias = 0; in kvm_mips_set_count_hz()
679 vcpu->arch.count_bias = count - kvm_mips_ktime_to_count(vcpu, now); in kvm_mips_set_count_hz()
683 kvm_mips_resume_hrtimer(vcpu, now, count); in kvm_mips_set_count_hz()
697 void kvm_mips_write_compare(struct kvm_vcpu *vcpu, u32 compare, bool ack) in kvm_mips_write_compare() argument
699 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_mips_write_compare()
711 kvm_mips_callbacks->dequeue_timer_int(vcpu); in kvm_mips_write_compare()
732 dc = kvm_mips_count_disabled(vcpu); in kvm_mips_write_compare()
734 now = kvm_mips_freeze_hrtimer(vcpu, &count); in kvm_mips_write_compare()
737 kvm_mips_callbacks->dequeue_timer_int(vcpu); in kvm_mips_write_compare()
757 kvm_mips_resume_hrtimer(vcpu, now, count); in kvm_mips_write_compare()
780 static ktime_t kvm_mips_count_disable(struct kvm_vcpu *vcpu) in kvm_mips_count_disable() argument
782 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_mips_count_disable()
787 hrtimer_cancel(&vcpu->arch.comparecount_timer); in kvm_mips_count_disable()
791 count = kvm_mips_read_count_running(vcpu, now); in kvm_mips_count_disable()
807 void kvm_mips_count_disable_cause(struct kvm_vcpu *vcpu) in kvm_mips_count_disable_cause() argument
809 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_mips_count_disable_cause()
812 if (!(vcpu->arch.count_ctl & KVM_REG_MIPS_COUNT_CTL_DC)) in kvm_mips_count_disable_cause()
813 kvm_mips_count_disable(vcpu); in kvm_mips_count_disable_cause()
827 void kvm_mips_count_enable_cause(struct kvm_vcpu *vcpu) in kvm_mips_count_enable_cause() argument
829 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_mips_count_enable_cause()
840 kvm_mips_write_count(vcpu, count); in kvm_mips_count_enable_cause()
853 int kvm_mips_set_count_ctl(struct kvm_vcpu *vcpu, s64 count_ctl) in kvm_mips_set_count_ctl() argument
855 struct mips_coproc *cop0 = vcpu->arch.cop0; in kvm_mips_set_count_ctl()
856 s64 changed = count_ctl ^ vcpu->arch.count_ctl; in kvm_mips_set_count_ctl()
866 vcpu->arch.count_ctl = count_ctl; in kvm_mips_set_count_ctl()
874 vcpu->arch.count_resume = ktime_get(); in kvm_mips_set_count_ctl()
877 vcpu->arch.count_resume = kvm_mips_count_disable(vcpu); in kvm_mips_set_count_ctl()
887 vcpu->arch.count_hz); in kvm_mips_set_count_ctl()
888 expire = ktime_add_ns(vcpu->arch.count_resume, delta); in kvm_mips_set_count_ctl()
894 kvm_mips_callbacks->queue_timer_int(vcpu); in kvm_mips_set_count_ctl()
897 count = kvm_mips_read_count_running(vcpu, now); in kvm_mips_set_count_ctl()
898 kvm_mips_resume_hrtimer(vcpu, now, count); in kvm_mips_set_count_ctl()
915 int kvm_mips_set_count_resume(struct kvm_vcpu *vcpu, s64 count_resume) in kvm_mips_set_count_resume() argument
925 vcpu->arch.count_resume = ns_to_ktime(count_resume); in kvm_mips_set_count_resume()
937 enum hrtimer_restart kvm_mips_count_timeout(struct kvm_vcpu *vcpu) in kvm_mips_count_timeout() argument
940 hrtimer_add_expires_ns(&vcpu->arch.comparecount_timer, in kvm_mips_count_timeout()
941 vcpu->arch.count_period); in kvm_mips_count_timeout()
945 enum emulation_result kvm_mips_emul_wait(struct kvm_vcpu *vcpu) in kvm_mips_emul_wait() argument
947 kvm_debug("[%#lx] !!!WAIT!!! (%#lx)\n", vcpu->arch.pc, in kvm_mips_emul_wait()
948 vcpu->arch.pending_exceptions); in kvm_mips_emul_wait()
950 ++vcpu->stat.wait_exits; in kvm_mips_emul_wait()
951 trace_kvm_exit(vcpu, KVM_TRACE_EXIT_WAIT); in kvm_mips_emul_wait()
952 if (!vcpu->arch.pending_exceptions) { in kvm_mips_emul_wait()
953 kvm_vz_lose_htimer(vcpu); in kvm_mips_emul_wait()
954 vcpu->arch.wait = 1; in kvm_mips_emul_wait()
955 kvm_vcpu_block(vcpu); in kvm_mips_emul_wait()
961 if (kvm_check_request(KVM_REQ_UNHALT, vcpu)) { in kvm_mips_emul_wait()
962 kvm_clear_request(KVM_REQ_UNHALT, vcpu); in kvm_mips_emul_wait()
963 vcpu->run->exit_reason = KVM_EXIT_IRQ_WINDOW_OPEN; in kvm_mips_emul_wait()
972 struct kvm_vcpu *vcpu) in kvm_mips_emulate_store() argument
977 struct kvm_run *run = vcpu->run; in kvm_mips_emulate_store()
986 curr_pc = vcpu->arch.pc; in kvm_mips_emulate_store()
987 er = update_pc(vcpu, cause); in kvm_mips_emulate_store()
994 vcpu->arch.host_cp0_badvaddr); in kvm_mips_emulate_store()
1002 *(u64 *)data = vcpu->arch.gprs[rt]; in kvm_mips_emulate_store()
1005 vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, in kvm_mips_emulate_store()
1006 vcpu->arch.gprs[rt], *(u64 *)data); in kvm_mips_emulate_store()
1012 *(u32 *)data = vcpu->arch.gprs[rt]; in kvm_mips_emulate_store()
1015 vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, in kvm_mips_emulate_store()
1016 vcpu->arch.gprs[rt], *(u32 *)data); in kvm_mips_emulate_store()
1021 *(u16 *)data = vcpu->arch.gprs[rt]; in kvm_mips_emulate_store()
1024 vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, in kvm_mips_emulate_store()
1025 vcpu->arch.gprs[rt], *(u16 *)data); in kvm_mips_emulate_store()
1030 *(u8 *)data = vcpu->arch.gprs[rt]; in kvm_mips_emulate_store()
1033 vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, in kvm_mips_emulate_store()
1034 vcpu->arch.gprs[rt], *(u8 *)data); in kvm_mips_emulate_store()
1039 vcpu->arch.host_cp0_badvaddr) & (~0x3); in kvm_mips_emulate_store()
1041 imme = vcpu->arch.host_cp0_badvaddr & 0x3; in kvm_mips_emulate_store()
1045 (vcpu->arch.gprs[rt] >> 24); in kvm_mips_emulate_store()
1049 (vcpu->arch.gprs[rt] >> 16); in kvm_mips_emulate_store()
1053 (vcpu->arch.gprs[rt] >> 8); in kvm_mips_emulate_store()
1056 *(u32 *)data = vcpu->arch.gprs[rt]; in kvm_mips_emulate_store()
1063 vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, in kvm_mips_emulate_store()
1064 vcpu->arch.gprs[rt], *(u32 *)data); in kvm_mips_emulate_store()
1069 vcpu->arch.host_cp0_badvaddr) & (~0x3); in kvm_mips_emulate_store()
1071 imme = vcpu->arch.host_cp0_badvaddr & 0x3; in kvm_mips_emulate_store()
1074 *(u32 *)data = vcpu->arch.gprs[rt]; in kvm_mips_emulate_store()
1078 (vcpu->arch.gprs[rt] << 8); in kvm_mips_emulate_store()
1082 (vcpu->arch.gprs[rt] << 16); in kvm_mips_emulate_store()
1086 (vcpu->arch.gprs[rt] << 24); in kvm_mips_emulate_store()
1093 vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, in kvm_mips_emulate_store()
1094 vcpu->arch.gprs[rt], *(u32 *)data); in kvm_mips_emulate_store()
1100 vcpu->arch.host_cp0_badvaddr) & (~0x7); in kvm_mips_emulate_store()
1103 imme = vcpu->arch.host_cp0_badvaddr & 0x7; in kvm_mips_emulate_store()
1107 ((vcpu->arch.gprs[rt] >> 56) & 0xff); in kvm_mips_emulate_store()
1111 ((vcpu->arch.gprs[rt] >> 48) & 0xffff); in kvm_mips_emulate_store()
1115 ((vcpu->arch.gprs[rt] >> 40) & 0xffffff); in kvm_mips_emulate_store()
1119 ((vcpu->arch.gprs[rt] >> 32) & 0xffffffff); in kvm_mips_emulate_store()
1123 ((vcpu->arch.gprs[rt] >> 24) & 0xffffffffff); in kvm_mips_emulate_store()
1127 ((vcpu->arch.gprs[rt] >> 16) & 0xffffffffffff); in kvm_mips_emulate_store()
1131 ((vcpu->arch.gprs[rt] >> 8) & 0xffffffffffffff); in kvm_mips_emulate_store()
1134 *(u64 *)data = vcpu->arch.gprs[rt]; in kvm_mips_emulate_store()
1141 vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, in kvm_mips_emulate_store()
1142 vcpu->arch.gprs[rt], *(u64 *)data); in kvm_mips_emulate_store()
1147 vcpu->arch.host_cp0_badvaddr) & (~0x7); in kvm_mips_emulate_store()
1150 imme = vcpu->arch.host_cp0_badvaddr & 0x7; in kvm_mips_emulate_store()
1153 *(u64 *)data = vcpu->arch.gprs[rt]; in kvm_mips_emulate_store()
1157 (vcpu->arch.gprs[rt] << 8); in kvm_mips_emulate_store()
1161 (vcpu->arch.gprs[rt] << 16); in kvm_mips_emulate_store()
1165 (vcpu->arch.gprs[rt] << 24); in kvm_mips_emulate_store()
1169 (vcpu->arch.gprs[rt] << 32); in kvm_mips_emulate_store()
1173 (vcpu->arch.gprs[rt] << 40); in kvm_mips_emulate_store()
1177 (vcpu->arch.gprs[rt] << 48); in kvm_mips_emulate_store()
1181 (vcpu->arch.gprs[rt] << 56); in kvm_mips_emulate_store()
1188 vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, in kvm_mips_emulate_store()
1189 vcpu->arch.gprs[rt], *(u64 *)data); in kvm_mips_emulate_store()
1207 *(u8 *)data = vcpu->arch.gprs[rt]; in kvm_mips_emulate_store()
1210 vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, in kvm_mips_emulate_store()
1211 vcpu->arch.gprs[rt], *(u8 *)data); in kvm_mips_emulate_store()
1215 *(u16 *)data = vcpu->arch.gprs[rt]; in kvm_mips_emulate_store()
1218 vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, in kvm_mips_emulate_store()
1219 vcpu->arch.gprs[rt], *(u16 *)data); in kvm_mips_emulate_store()
1223 *(u32 *)data = vcpu->arch.gprs[rt]; in kvm_mips_emulate_store()
1226 vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, in kvm_mips_emulate_store()
1227 vcpu->arch.gprs[rt], *(u32 *)data); in kvm_mips_emulate_store()
1231 *(u64 *)data = vcpu->arch.gprs[rt]; in kvm_mips_emulate_store()
1234 vcpu->arch.pc, vcpu->arch.host_cp0_badvaddr, in kvm_mips_emulate_store()
1235 vcpu->arch.gprs[rt], *(u64 *)data); in kvm_mips_emulate_store()
1250 vcpu->mmio_needed = 1; in kvm_mips_emulate_store()
1252 vcpu->mmio_is_write = 1; in kvm_mips_emulate_store()
1254 r = kvm_io_bus_write(vcpu, KVM_MMIO_BUS, in kvm_mips_emulate_store()
1258 vcpu->mmio_needed = 0; in kvm_mips_emulate_store()
1266 vcpu->arch.pc = curr_pc; in kvm_mips_emulate_store()
1271 u32 cause, struct kvm_vcpu *vcpu) in kvm_mips_emulate_load() argument
1273 struct kvm_run *run = vcpu->run; in kvm_mips_emulate_load()
1288 curr_pc = vcpu->arch.pc; in kvm_mips_emulate_load()
1289 er = update_pc(vcpu, cause); in kvm_mips_emulate_load()
1292 vcpu->arch.io_pc = vcpu->arch.pc; in kvm_mips_emulate_load()
1293 vcpu->arch.pc = curr_pc; in kvm_mips_emulate_load()
1295 vcpu->arch.io_gpr = rt; in kvm_mips_emulate_load()
1298 vcpu->arch.host_cp0_badvaddr); in kvm_mips_emulate_load()
1302 vcpu->mmio_needed = 2; /* signed */ in kvm_mips_emulate_load()
1310 vcpu->mmio_needed = 1; /* unsigned */ in kvm_mips_emulate_load()
1318 vcpu->mmio_needed = 1; /* unsigned */ in kvm_mips_emulate_load()
1325 vcpu->mmio_needed = 1; /* unsigned */ in kvm_mips_emulate_load()
1333 vcpu->arch.host_cp0_badvaddr) & (~0x3); in kvm_mips_emulate_load()
1336 imme = vcpu->arch.host_cp0_badvaddr & 0x3; in kvm_mips_emulate_load()
1339 vcpu->mmio_needed = 3; /* 1 byte */ in kvm_mips_emulate_load()
1342 vcpu->mmio_needed = 4; /* 2 bytes */ in kvm_mips_emulate_load()
1345 vcpu->mmio_needed = 5; /* 3 bytes */ in kvm_mips_emulate_load()
1348 vcpu->mmio_needed = 6; /* 4 bytes */ in kvm_mips_emulate_load()
1357 vcpu->arch.host_cp0_badvaddr) & (~0x3); in kvm_mips_emulate_load()
1360 imme = vcpu->arch.host_cp0_badvaddr & 0x3; in kvm_mips_emulate_load()
1363 vcpu->mmio_needed = 7; /* 4 bytes */ in kvm_mips_emulate_load()
1366 vcpu->mmio_needed = 8; /* 3 bytes */ in kvm_mips_emulate_load()
1369 vcpu->mmio_needed = 9; /* 2 bytes */ in kvm_mips_emulate_load()
1372 vcpu->mmio_needed = 10; /* 1 byte */ in kvm_mips_emulate_load()
1382 vcpu->arch.host_cp0_badvaddr) & (~0x7); in kvm_mips_emulate_load()
1385 imme = vcpu->arch.host_cp0_badvaddr & 0x7; in kvm_mips_emulate_load()
1388 vcpu->mmio_needed = 11; /* 1 byte */ in kvm_mips_emulate_load()
1391 vcpu->mmio_needed = 12; /* 2 bytes */ in kvm_mips_emulate_load()
1394 vcpu->mmio_needed = 13; /* 3 bytes */ in kvm_mips_emulate_load()
1397 vcpu->mmio_needed = 14; /* 4 bytes */ in kvm_mips_emulate_load()
1400 vcpu->mmio_needed = 15; /* 5 bytes */ in kvm_mips_emulate_load()
1403 vcpu->mmio_needed = 16; /* 6 bytes */ in kvm_mips_emulate_load()
1406 vcpu->mmio_needed = 17; /* 7 bytes */ in kvm_mips_emulate_load()
1409 vcpu->mmio_needed = 18; /* 8 bytes */ in kvm_mips_emulate_load()
1418 vcpu->arch.host_cp0_badvaddr) & (~0x7); in kvm_mips_emulate_load()
1421 imme = vcpu->arch.host_cp0_badvaddr & 0x7; in kvm_mips_emulate_load()
1424 vcpu->mmio_needed = 19; /* 8 bytes */ in kvm_mips_emulate_load()
1427 vcpu->mmio_needed = 20; /* 7 bytes */ in kvm_mips_emulate_load()
1430 vcpu->mmio_needed = 21; /* 6 bytes */ in kvm_mips_emulate_load()
1433 vcpu->mmio_needed = 22; /* 5 bytes */ in kvm_mips_emulate_load()
1436 vcpu->mmio_needed = 23; /* 4 bytes */ in kvm_mips_emulate_load()
1439 vcpu->mmio_needed = 24; /* 3 bytes */ in kvm_mips_emulate_load()
1442 vcpu->mmio_needed = 25; /* 2 bytes */ in kvm_mips_emulate_load()
1445 vcpu->mmio_needed = 26; /* 1 byte */ in kvm_mips_emulate_load()
1467 vcpu->mmio_needed = 27; /* signed */ in kvm_mips_emulate_load()
1471 vcpu->mmio_needed = 28; /* signed */ in kvm_mips_emulate_load()
1475 vcpu->mmio_needed = 29; /* signed */ in kvm_mips_emulate_load()
1479 vcpu->mmio_needed = 30; /* signed */ in kvm_mips_emulate_load()
1492 vcpu->mmio_needed = 0; in kvm_mips_emulate_load()
1497 vcpu->mmio_is_write = 0; in kvm_mips_emulate_load()
1499 r = kvm_io_bus_read(vcpu, KVM_MMIO_BUS, in kvm_mips_emulate_load()
1503 kvm_mips_complete_mmio_load(vcpu); in kvm_mips_emulate_load()
1504 vcpu->mmio_needed = 0; in kvm_mips_emulate_load()
1511 enum emulation_result kvm_mips_complete_mmio_load(struct kvm_vcpu *vcpu) in kvm_mips_complete_mmio_load() argument
1513 struct kvm_run *run = vcpu->run; in kvm_mips_complete_mmio_load()
1514 unsigned long *gpr = &vcpu->arch.gprs[vcpu->arch.io_gpr]; in kvm_mips_complete_mmio_load()
1524 vcpu->arch.pc = vcpu->arch.io_pc; in kvm_mips_complete_mmio_load()
1528 switch (vcpu->mmio_needed) { in kvm_mips_complete_mmio_load()
1530 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffffffffff) | in kvm_mips_complete_mmio_load()
1534 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffffffff) | in kvm_mips_complete_mmio_load()
1538 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffffff) | in kvm_mips_complete_mmio_load()
1542 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffff) | in kvm_mips_complete_mmio_load()
1546 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffff) | in kvm_mips_complete_mmio_load()
1550 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffff) | in kvm_mips_complete_mmio_load()
1554 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xff) | in kvm_mips_complete_mmio_load()
1562 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xff00000000000000) | in kvm_mips_complete_mmio_load()
1566 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffff000000000000) | in kvm_mips_complete_mmio_load()
1570 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffff0000000000) | in kvm_mips_complete_mmio_load()
1574 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffff00000000) | in kvm_mips_complete_mmio_load()
1578 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffffff000000) | in kvm_mips_complete_mmio_load()
1582 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffffffff0000) | in kvm_mips_complete_mmio_load()
1586 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffffffffffff00) | in kvm_mips_complete_mmio_load()
1595 switch (vcpu->mmio_needed) { in kvm_mips_complete_mmio_load()
1603 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffff) | in kvm_mips_complete_mmio_load()
1607 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffff) | in kvm_mips_complete_mmio_load()
1611 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xff) | in kvm_mips_complete_mmio_load()
1619 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xff000000) | in kvm_mips_complete_mmio_load()
1623 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffff0000) | in kvm_mips_complete_mmio_load()
1627 *gpr = (vcpu->arch.gprs[vcpu->arch.io_gpr] & 0xffffff00) | in kvm_mips_complete_mmio_load()
1636 if (vcpu->mmio_needed == 1) in kvm_mips_complete_mmio_load()
1643 if (vcpu->mmio_needed == 1) in kvm_mips_complete_mmio_load()