Lines Matching +full:spurious +full:- +full:oc
28 #include "s390x-internal.h"
33 #include "qemu/error-report.h"
36 #include "qemu/main-loop.h"
37 #include "qemu/mmap-alloc.h"
46 #include "hw/s390x/s390-pci-inst.h"
47 #include "hw/s390x/s390-pci-bus.h"
51 #include "hw/s390x/s390-virtio-ccw.h"
52 #include "hw/s390x/s390-hypercall.h"
187 return -E2BIG; in kvm_s390_set_mem_limit()
255 attr, strerror(-ret)); in kvm_s390_set_crypto_attr()
263 if (object_property_get_bool(OBJECT(qdev_get_machine()), "aes-key-wrap", in kvm_s390_init_aes_kw()
277 if (object_property_get_bool(OBJECT(qdev_get_machine()), "dea-key-wrap", in kvm_s390_init_dea_kw()
327 static void ccw_machine_class_foreach(ObjectClass *oc, void *opaque) in ccw_machine_class_foreach() argument
329 MachineClass *mc = MACHINE_CLASS(oc); in ccw_machine_class_foreach()
331 mc->default_cpu_type = S390_CPU_TYPE_NAME("host"); in ccw_machine_class_foreach()
348 error_report("KVM is missing capability #%d - " in kvm_arch_init()
350 return -1; in kvm_arch_init()
358 error_report("KVM is missing capability KVM_CAP_S390_COW - " in kvm_arch_init()
360 return -1; in kvm_arch_init()
404 return cpu->cpu_index; in kvm_arch_vcpu_id()
409 unsigned int max_cpus = MACHINE(qdev_get_machine())->smp.max_cpus; in kvm_arch_init_vcpu()
411 kvm_s390_set_cpu_state(cpu, cpu->env.cpu_state); in kvm_arch_init_vcpu()
412 cpu->irqstate = g_malloc0(VCPU_IRQ_BUF_SIZE(max_cpus)); in kvm_arch_init_vcpu()
420 g_free(cpu->irqstate); in kvm_arch_destroy_vcpu()
421 cpu->irqstate = NULL; in kvm_arch_destroy_vcpu()
431 * The reset call is needed here to reset in-kernel vcpu data that in kvm_s390_reset_vcpu()
435 * (kvm-all). in kvm_s390_reset_vcpu()
439 cs->cpu_index, type); in kvm_s390_reset_vcpu()
466 return (cs->kvm_run->kvm_valid_regs & regs) == regs; in can_sync_regs()
482 cs->kvm_run->psw_addr = env->psw.addr; in kvm_arch_put_registers()
483 cs->kvm_run->psw_mask = env->psw.mask; in kvm_arch_put_registers()
485 memcpy(cs->kvm_run->s.regs.gprs, env->regs, sizeof(cs->kvm_run->s.regs.gprs)); in kvm_arch_put_registers()
486 cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_GPRS; in kvm_arch_put_registers()
490 cs->kvm_run->s.regs.vrs[i][0] = env->vregs[i][0]; in kvm_arch_put_registers()
491 cs->kvm_run->s.regs.vrs[i][1] = env->vregs[i][1]; in kvm_arch_put_registers()
493 cs->kvm_run->s.regs.fpc = env->fpc; in kvm_arch_put_registers()
494 cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_VRS; in kvm_arch_put_registers()
497 cs->kvm_run->s.regs.fprs[i] = *get_freg(env, i); in kvm_arch_put_registers()
499 cs->kvm_run->s.regs.fpc = env->fpc; in kvm_arch_put_registers()
500 cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_FPRS; in kvm_arch_put_registers()
506 fpu.fpc = env->fpc; in kvm_arch_put_registers()
520 * Access registers, control registers and the prefix - these are in kvm_arch_put_registers()
523 memcpy(cs->kvm_run->s.regs.acrs, env->aregs, sizeof(cs->kvm_run->s.regs.acrs)); in kvm_arch_put_registers()
524 memcpy(cs->kvm_run->s.regs.crs, env->cregs, sizeof(cs->kvm_run->s.regs.crs)); in kvm_arch_put_registers()
525 cs->kvm_run->s.regs.prefix = env->psa; in kvm_arch_put_registers()
526 cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_ACRS | KVM_SYNC_CRS | KVM_SYNC_PREFIX; in kvm_arch_put_registers()
529 cs->kvm_run->s.regs.cputm = env->cputm; in kvm_arch_put_registers()
530 cs->kvm_run->s.regs.ckc = env->ckc; in kvm_arch_put_registers()
531 cs->kvm_run->s.regs.todpr = env->todpr; in kvm_arch_put_registers()
532 cs->kvm_run->s.regs.gbea = env->gbea; in kvm_arch_put_registers()
533 cs->kvm_run->s.regs.pp = env->pp; in kvm_arch_put_registers()
534 cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_ARCH0; in kvm_arch_put_registers()
541 kvm_set_one_reg(cs, KVM_REG_S390_CPU_TIMER, &env->cputm); in kvm_arch_put_registers()
542 kvm_set_one_reg(cs, KVM_REG_S390_CLOCK_COMP, &env->ckc); in kvm_arch_put_registers()
543 kvm_set_one_reg(cs, KVM_REG_S390_TODPR, &env->todpr); in kvm_arch_put_registers()
544 kvm_set_one_reg(cs, KVM_REG_S390_GBEA, &env->gbea); in kvm_arch_put_registers()
545 kvm_set_one_reg(cs, KVM_REG_S390_PP, &env->pp); in kvm_arch_put_registers()
549 memcpy(cs->kvm_run->s.regs.riccb, env->riccb, 64); in kvm_arch_put_registers()
550 cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_RICCB; in kvm_arch_put_registers()
555 cs->kvm_run->s.regs.pft = env->pfault_token; in kvm_arch_put_registers()
556 cs->kvm_run->s.regs.pfs = env->pfault_select; in kvm_arch_put_registers()
557 cs->kvm_run->s.regs.pfc = env->pfault_compare; in kvm_arch_put_registers()
558 cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_PFAULT; in kvm_arch_put_registers()
560 r = kvm_set_one_reg(cs, KVM_REG_S390_PFTOKEN, &env->pfault_token); in kvm_arch_put_registers()
564 r = kvm_set_one_reg(cs, KVM_REG_S390_PFCOMPARE, &env->pfault_compare); in kvm_arch_put_registers()
568 r = kvm_set_one_reg(cs, KVM_REG_S390_PFSELECT, &env->pfault_select); in kvm_arch_put_registers()
575 memcpy(cs->kvm_run->s.regs.gscb, env->gscb, 32); in kvm_arch_put_registers()
576 cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_GSCB; in kvm_arch_put_registers()
580 cs->kvm_run->s.regs.bpbc = env->bpbc; in kvm_arch_put_registers()
581 cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_BPBC; in kvm_arch_put_registers()
585 cs->kvm_run->s.regs.etoken = env->etoken; in kvm_arch_put_registers()
586 cs->kvm_run->s.regs.etoken_extension = env->etoken_extension; in kvm_arch_put_registers()
587 cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_ETOKEN; in kvm_arch_put_registers()
591 cs->kvm_run->s.regs.diag318 = env->diag318_info; in kvm_arch_put_registers()
592 cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_DIAG318; in kvm_arch_put_registers()
605 env->psw.addr = cs->kvm_run->psw_addr; in kvm_arch_get_registers()
606 env->psw.mask = cs->kvm_run->psw_mask; in kvm_arch_get_registers()
610 memcpy(env->regs, cs->kvm_run->s.regs.gprs, sizeof(env->regs)); in kvm_arch_get_registers()
611 memcpy(env->aregs, cs->kvm_run->s.regs.acrs, sizeof(env->aregs)); in kvm_arch_get_registers()
612 memcpy(env->cregs, cs->kvm_run->s.regs.crs, sizeof(env->cregs)); in kvm_arch_get_registers()
615 env->psa = cs->kvm_run->s.regs.prefix; in kvm_arch_get_registers()
620 env->vregs[i][0] = cs->kvm_run->s.regs.vrs[i][0]; in kvm_arch_get_registers()
621 env->vregs[i][1] = cs->kvm_run->s.regs.vrs[i][1]; in kvm_arch_get_registers()
623 env->fpc = cs->kvm_run->s.regs.fpc; in kvm_arch_get_registers()
626 *get_freg(env, i) = cs->kvm_run->s.regs.fprs[i]; in kvm_arch_get_registers()
628 env->fpc = cs->kvm_run->s.regs.fpc; in kvm_arch_get_registers()
637 env->fpc = fpu.fpc; in kvm_arch_get_registers()
641 env->cputm = cs->kvm_run->s.regs.cputm; in kvm_arch_get_registers()
642 env->ckc = cs->kvm_run->s.regs.ckc; in kvm_arch_get_registers()
643 env->todpr = cs->kvm_run->s.regs.todpr; in kvm_arch_get_registers()
644 env->gbea = cs->kvm_run->s.regs.gbea; in kvm_arch_get_registers()
645 env->pp = cs->kvm_run->s.regs.pp; in kvm_arch_get_registers()
652 kvm_get_one_reg(cs, KVM_REG_S390_CPU_TIMER, &env->cputm); in kvm_arch_get_registers()
653 kvm_get_one_reg(cs, KVM_REG_S390_CLOCK_COMP, &env->ckc); in kvm_arch_get_registers()
654 kvm_get_one_reg(cs, KVM_REG_S390_TODPR, &env->todpr); in kvm_arch_get_registers()
655 kvm_get_one_reg(cs, KVM_REG_S390_GBEA, &env->gbea); in kvm_arch_get_registers()
656 kvm_get_one_reg(cs, KVM_REG_S390_PP, &env->pp); in kvm_arch_get_registers()
660 memcpy(env->riccb, cs->kvm_run->s.regs.riccb, 64); in kvm_arch_get_registers()
664 memcpy(env->gscb, cs->kvm_run->s.regs.gscb, 32); in kvm_arch_get_registers()
668 env->bpbc = cs->kvm_run->s.regs.bpbc; in kvm_arch_get_registers()
672 env->etoken = cs->kvm_run->s.regs.etoken; in kvm_arch_get_registers()
673 env->etoken_extension = cs->kvm_run->s.regs.etoken_extension; in kvm_arch_get_registers()
678 env->pfault_token = cs->kvm_run->s.regs.pft; in kvm_arch_get_registers()
679 env->pfault_select = cs->kvm_run->s.regs.pfs; in kvm_arch_get_registers()
680 env->pfault_compare = cs->kvm_run->s.regs.pfc; in kvm_arch_get_registers()
682 r = kvm_get_one_reg(cs, KVM_REG_S390_PFTOKEN, &env->pfault_token); in kvm_arch_get_registers()
686 r = kvm_get_one_reg(cs, KVM_REG_S390_PFCOMPARE, &env->pfault_compare); in kvm_arch_get_registers()
690 r = kvm_get_one_reg(cs, KVM_REG_S390_PFSELECT, &env->pfault_select); in kvm_arch_get_registers()
697 env->diag318_info = cs->kvm_run->s.regs.diag318; in kvm_arch_get_registers()
780 * Returns: 0 on success, non-zero if an exception or error occurred
796 .key = (cpu->env.psw.mask & PSW_MASK_KEY) >> PSW_SHIFT_KEY, in kvm_s390_mem_op()
801 return -ENOSYS; in kvm_s390_mem_op()
812 warn_report("KVM_S390_MEM_OP failed: %s", strerror(-ret)); in kvm_s390_mem_op()
830 return -ENOSYS; in kvm_s390_mem_op_pv()
835 error_report("KVM_S390_MEM_OP failed: %s", strerror(-ret)); in kvm_s390_mem_op_pv()
869 if (cpu_memory_rw_debug(cs, bp->pc, (uint8_t *)&bp->saved_insn, in kvm_arch_insert_sw_breakpoint()
871 cpu_memory_rw_debug(cs, bp->pc, (uint8_t *)sw_bp_inst, sw_bp_ilen, 1)) { in kvm_arch_insert_sw_breakpoint()
872 return -EINVAL; in kvm_arch_insert_sw_breakpoint()
881 if (cpu_memory_rw_debug(cs, bp->pc, t, sw_bp_ilen, 0)) { in kvm_arch_remove_sw_breakpoint()
882 return -EINVAL; in kvm_arch_remove_sw_breakpoint()
884 return -EINVAL; in kvm_arch_remove_sw_breakpoint()
885 } else if (cpu_memory_rw_debug(cs, bp->pc, (uint8_t *)&bp->saved_insn, in kvm_arch_remove_sw_breakpoint()
887 return -EINVAL; in kvm_arch_remove_sw_breakpoint()
900 (hw_breakpoints[n].len == len || len == -1)) { in find_hw_breakpoint()
913 return -EEXIST; in insert_hw_breakpoint()
928 return -ENOMEM; in insert_hw_breakpoint()
948 return -EINVAL; in kvm_arch_insert_hw_breakpoint()
953 return -ENOSYS; in kvm_arch_insert_hw_breakpoint()
964 return -ENOENT; in kvm_arch_remove_hw_breakpoint()
967 nb_hw_breakpoints--; in kvm_arch_remove_hw_breakpoint()
971 * be removed - if necessary. in kvm_arch_remove_hw_breakpoint()
999 dbg->arch.nr_hw_bp = nb_hw_breakpoints; in kvm_arch_update_guest_debug()
1000 dbg->arch.hw_bp = hw_breakpoints; in kvm_arch_update_guest_debug()
1006 dbg->control |= KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_HW_BP; in kvm_arch_update_guest_debug()
1008 dbg->arch.nr_hw_bp = 0; in kvm_arch_update_guest_debug()
1009 dbg->arch.hw_bp = NULL; in kvm_arch_update_guest_debug()
1024 return cs->halted; in kvm_arch_process_async_events()
1032 interrupt->type = irq->type; in s390_kvm_irq_to_interrupt()
1033 switch (irq->type) { in s390_kvm_irq_to_interrupt()
1035 interrupt->parm = irq->u.ext.ext_params; in s390_kvm_irq_to_interrupt()
1039 interrupt->parm64 = irq->u.ext.ext_params2; in s390_kvm_irq_to_interrupt()
1042 interrupt->parm = irq->u.pgm.code; in s390_kvm_irq_to_interrupt()
1045 interrupt->parm = irq->u.prefix.address; in s390_kvm_irq_to_interrupt()
1048 interrupt->parm = irq->u.ext.ext_params; in s390_kvm_irq_to_interrupt()
1051 interrupt->parm = irq->u.mchk.cr14; in s390_kvm_irq_to_interrupt()
1052 interrupt->parm64 = irq->u.mchk.mcic; in s390_kvm_irq_to_interrupt()
1055 interrupt->parm = irq->u.extcall.code; in s390_kvm_irq_to_interrupt()
1058 interrupt->parm = irq->u.emerg.code; in s390_kvm_irq_to_interrupt()
1064 interrupt->parm = irq->u.io.subchannel_id << 16; in s390_kvm_irq_to_interrupt()
1065 interrupt->parm |= irq->u.io.subchannel_nr; in s390_kvm_irq_to_interrupt()
1066 interrupt->parm64 = (uint64_t)irq->u.io.io_int_parm << 32; in s390_kvm_irq_to_interrupt()
1067 interrupt->parm64 |= irq->u.io.io_int_word; in s390_kvm_irq_to_interrupt()
1070 r = -EINVAL; in s390_kvm_irq_to_interrupt()
1104 error_report("KVM failed to inject interrupt %llx", irq->type); in kvm_s390_vcpu_interrupt()
1136 cpu->env.psw.addr); in kvm_s390_program_interrupt()
1155 CPUS390XState *env = &cpu->env; in kvm_sclp_service_call()
1160 sccb = env->regs[ipbh0 & 0xf]; in kvm_sclp_service_call()
1161 code = env->regs[(ipbh0 & 0xf0) >> 4]; in kvm_sclp_service_call()
1163 switch (run->s390_sieic.icptcode) { in kvm_sclp_service_call()
1179 kvm_s390_program_interrupt(cpu, -r); in kvm_sclp_service_call()
1188 CPUS390XState *env = &cpu->env; in handle_b2()
1190 uint16_t ipbh0 = (run->s390_sieic.ipb & 0xffff0000) >> 16; in handle_b2()
1194 ioinst_handle_xsch(cpu, env->regs[1], RA_IGNORED); in handle_b2()
1197 ioinst_handle_csch(cpu, env->regs[1], RA_IGNORED); in handle_b2()
1200 ioinst_handle_hsch(cpu, env->regs[1], RA_IGNORED); in handle_b2()
1203 ioinst_handle_msch(cpu, env->regs[1], run->s390_sieic.ipb, RA_IGNORED); in handle_b2()
1206 ioinst_handle_ssch(cpu, env->regs[1], run->s390_sieic.ipb, RA_IGNORED); in handle_b2()
1209 ioinst_handle_stcrw(cpu, run->s390_sieic.ipb, RA_IGNORED); in handle_b2()
1212 ioinst_handle_stsch(cpu, env->regs[1], run->s390_sieic.ipb, RA_IGNORED); in handle_b2()
1216 fprintf(stderr, "Spurious tsch intercept\n"); in handle_b2()
1219 ioinst_handle_chsc(cpu, run->s390_sieic.ipb, RA_IGNORED); in handle_b2()
1223 fprintf(stderr, "Spurious tpi intercept\n"); in handle_b2()
1226 ioinst_handle_schm(cpu, env->regs[1], env->regs[2], in handle_b2()
1227 run->s390_sieic.ipb, RA_IGNORED); in handle_b2()
1230 ioinst_handle_rsch(cpu, env->regs[1], RA_IGNORED); in handle_b2()
1233 ioinst_handle_rchp(cpu, env->regs[1], RA_IGNORED); in handle_b2()
1239 ioinst_handle_sal(cpu, env->regs[1], RA_IGNORED); in handle_b2()
1249 rc = -1; in handle_b2()
1260 CPUS390XState *env = &cpu->env; in get_base_disp_rxy()
1261 uint32_t x2 = (run->s390_sieic.ipa & 0x000f); in get_base_disp_rxy()
1262 uint32_t base2 = run->s390_sieic.ipb >> 28; in get_base_disp_rxy()
1263 uint32_t disp2 = ((run->s390_sieic.ipb & 0x0fff0000) >> 16) + in get_base_disp_rxy()
1264 ((run->s390_sieic.ipb & 0xff00) << 4); in get_base_disp_rxy()
1273 return (base2 ? env->regs[base2] : 0) + in get_base_disp_rxy()
1274 (x2 ? env->regs[x2] : 0) + (long)(int)disp2; in get_base_disp_rxy()
1280 CPUS390XState *env = &cpu->env; in get_base_disp_rsy()
1281 uint32_t base2 = run->s390_sieic.ipb >> 28; in get_base_disp_rsy()
1282 uint32_t disp2 = ((run->s390_sieic.ipb & 0x0fff0000) >> 16) + in get_base_disp_rsy()
1283 ((run->s390_sieic.ipb & 0xff00) << 4); in get_base_disp_rsy()
1292 return (base2 ? env->regs[base2] : 0) + (long)(int)disp2; in get_base_disp_rsy()
1297 uint8_t r2 = (run->s390_sieic.ipb & 0x000f0000) >> 16; in kvm_clp_service_call()
1302 return -1; in kvm_clp_service_call()
1308 uint8_t r1 = (run->s390_sieic.ipb & 0x00f00000) >> 20; in kvm_pcilg_service_call()
1309 uint8_t r2 = (run->s390_sieic.ipb & 0x000f0000) >> 16; in kvm_pcilg_service_call()
1314 return -1; in kvm_pcilg_service_call()
1320 uint8_t r1 = (run->s390_sieic.ipb & 0x00f00000) >> 20; in kvm_pcistg_service_call()
1321 uint8_t r2 = (run->s390_sieic.ipb & 0x000f0000) >> 16; in kvm_pcistg_service_call()
1326 return -1; in kvm_pcistg_service_call()
1332 uint8_t r1 = (run->s390_sieic.ipa & 0x00f0) >> 4; in kvm_stpcifc_service_call()
1341 return -1; in kvm_stpcifc_service_call()
1347 CPUS390XState *env = &cpu->env; in kvm_sic_service_call()
1348 uint8_t r1 = (run->s390_sieic.ipa & 0x00f0) >> 4; in kvm_sic_service_call()
1349 uint8_t r3 = run->s390_sieic.ipa & 0x000f; in kvm_sic_service_call()
1354 mode = env->regs[r1] & 0xffff; in kvm_sic_service_call()
1355 isc = (env->regs[r3] >> 27) & 0x7; in kvm_sic_service_call()
1358 kvm_s390_program_interrupt(cpu, -r); in kvm_sic_service_call()
1366 uint8_t r1 = (run->s390_sieic.ipb & 0x00f00000) >> 20; in kvm_rpcit_service_call()
1367 uint8_t r2 = (run->s390_sieic.ipb & 0x000f0000) >> 16; in kvm_rpcit_service_call()
1372 return -1; in kvm_rpcit_service_call()
1378 uint8_t r1 = (run->s390_sieic.ipa & 0x00f0) >> 4; in kvm_pcistb_service_call()
1379 uint8_t r3 = run->s390_sieic.ipa & 0x000f; in kvm_pcistb_service_call()
1388 return -1; in kvm_pcistb_service_call()
1394 uint8_t r1 = (run->s390_sieic.ipa & 0x00f0) >> 4; in kvm_mpcifc_service_call()
1403 return -1; in kvm_mpcifc_service_call()
1409 uint8_t r1 = (run->s390_sieic.ipb >> 20) & 0x0f; in kvm_handle_ptf()
1436 r = -1; in handle_b9()
1439 r = -1; in handle_b9()
1460 r = -1; in handle_eb()
1463 r = -1; in handle_eb()
1483 r = -1; in handle_e3()
1496 r1 = (run->s390_sieic.ipa & 0x00f0) >> 4; in kvm_handle_diag_288()
1497 r3 = run->s390_sieic.ipa & 0x000f; in kvm_handle_diag_288()
1498 rc = handle_diag_288(&cpu->env, r1, r3); in kvm_handle_diag_288()
1508 r1 = (run->s390_sieic.ipa & 0x00f0) >> 4; in kvm_handle_diag_308()
1509 r3 = run->s390_sieic.ipa & 0x000f; in kvm_handle_diag_308()
1510 handle_diag_308(&cpu->env, r1, r3, RA_IGNORED); in kvm_handle_diag_308()
1515 CPUS390XState *env = &cpu->env; in handle_sw_breakpoint()
1518 pc = env->psw.addr - sw_bp_ilen; in handle_sw_breakpoint()
1520 env->psw.addr = pc; in handle_sw_breakpoint()
1524 return -ENOENT; in handle_sw_breakpoint()
1529 CPUS390XState *env = &S390_CPU(cs)->env; in kvm_s390_set_diag318()
1533 env->diag318_info = diag318_info; in kvm_s390_set_diag318()
1534 cs->kvm_run->s.regs.diag318 = diag318_info; in kvm_s390_set_diag318()
1535 cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_DIAG318; in kvm_s390_set_diag318()
1545 uint64_t reg = (run->s390_sieic.ipa & 0x00f0) >> 4; in handle_diag_318()
1546 uint64_t diag318_info = run->s.regs.gprs[reg]; in handle_diag_318()
1572 * For any diagnose call we support, bits 48-63 of the resulting in handle_diag()
1575 func_code = decode_basedisp_rs(&cpu->env, ipb, NULL) & DIAG_KVM_CODE_MASK; in handle_diag()
1605 CPUS390XState *env = &cpu->env; in kvm_s390_handle_sigp()
1621 unsigned int ipa0 = (run->s390_sieic.ipa & 0xff00); in handle_instruction()
1622 uint8_t ipa1 = run->s390_sieic.ipa & 0x00ff; in handle_instruction()
1623 int r = -1; in handle_instruction()
1625 trace_kvm_insn(run->s390_sieic.ipa, run->s390_sieic.ipb); in handle_instruction()
1634 r = handle_eb(cpu, run, run->s390_sieic.ipb & 0xff); in handle_instruction()
1637 r = handle_e3(cpu, run, run->s390_sieic.ipb & 0xff); in handle_instruction()
1640 r = handle_diag(cpu, run, run->s390_sieic.ipb); in handle_instruction()
1643 r = kvm_s390_handle_sigp(cpu, ipa1, run->s390_sieic.ipb); in handle_instruction()
1661 cpu->env.crash_reason = reason; in unmanageable_intercept()
1671 newpsw.mask = ldq_phys(cs->as, cpu->env.psa + in handle_oper_loop()
1673 newpsw.addr = ldq_phys(cs->as, cpu->env.psa + in handle_oper_loop()
1675 oldpsw.mask = run->psw_mask; in handle_oper_loop()
1676 oldpsw.addr = run->psw_addr; in handle_oper_loop()
1686 if (oldpsw.addr - newpsw.addr <= 6 && in handle_oper_loop()
1701 struct kvm_run *run = cs->kvm_run; in handle_intercept()
1702 int icpt_code = run->s390_sieic.icptcode; in handle_intercept()
1705 trace_kvm_intercept(icpt_code, (long)run->psw_addr); in handle_intercept()
1728 do_stop_interrupt(&cpu->env); in handle_intercept()
1734 if (r == -ENOENT) { in handle_intercept()
1762 struct kvm_run *run = cs->kvm_run; in handle_tsch()
1765 ret = ioinst_handle_tsch(cpu, cpu->env.regs[1], run->s390_tsch.ipb, in handle_tsch()
1772 if (run->s390_tsch.dequeued) { in handle_tsch()
1773 s390_io_interrupt(run->s390_tsch.subchannel_id, in handle_tsch()
1774 run->s390_tsch.subchannel_nr, in handle_tsch()
1775 run->s390_tsch.io_int_parm, in handle_tsch()
1776 run->s390_tsch.io_int_word); in handle_tsch()
1797 sizeof(sysib.ext_names[0]) * (sysib.count - 1)); in insert_stsi_3_2_2()
1808 sizeof(sysib.ext_names[0]) * (sysib.count - del)); in insert_stsi_3_2_2()
1812 for (i = 0; i < ms->possible_cpus->len; i++) { in insert_stsi_3_2_2()
1813 if (ms->possible_cpus->cpus[i].cpu) { in insert_stsi_3_2_2()
1829 sysib.vm[0].ext_name_encoding = 2; /* 2 = UTF-8 */ in insert_stsi_3_2_2()
1852 struct kvm_run *run = cs->kvm_run; in handle_stsi()
1854 switch (run->s390_stsi.fc) { in handle_stsi()
1856 if (run->s390_stsi.sel1 != 2 || run->s390_stsi.sel2 != 2) { in handle_stsi()
1859 insert_stsi_3_2_2(cpu, run->s390_stsi.addr, run->s390_stsi.ar); in handle_stsi()
1862 insert_stsi_15_1_x(cpu, run->s390_stsi.sel2, run->s390_stsi.addr, in handle_stsi()
1863 run->s390_stsi.ar, RA_IGNORED); in handle_stsi()
1873 struct kvm_run *run = cs->kvm_run; in kvm_arch_handle_debug_exit()
1876 struct kvm_debug_exit_arch *arch_info = &run->debug.arch; in kvm_arch_handle_debug_exit()
1878 switch (arch_info->type) { in kvm_arch_handle_debug_exit()
1880 if (find_hw_breakpoint(arch_info->addr, -1, arch_info->type)) { in kvm_arch_handle_debug_exit()
1881 cs->watchpoint_hit = &hw_watchpoint; in kvm_arch_handle_debug_exit()
1882 hw_watchpoint.vaddr = arch_info->addr; in kvm_arch_handle_debug_exit()
1888 if (find_hw_breakpoint(arch_info->addr, -1, arch_info->type)) { in kvm_arch_handle_debug_exit()
1893 if (cs->singlestep_enabled) { in kvm_arch_handle_debug_exit()
1898 ret = -ENOSYS; in kvm_arch_handle_debug_exit()
1913 switch (run->exit_reason) { in kvm_arch_handle_exit()
1930 fprintf(stderr, "Unknown KVM exit: %d\n", run->exit_reason); in kvm_arch_handle_exit()
1959 * are handled in-kernel, it is not true for s390 (yet); therefore, we in kvm_arch_init_irq_routing()
1982 return -ENOSYS; in kvm_s390_assign_subch_ioeventfd()
2006 if (CPU(cpu)->kvm_state == NULL) { in kvm_s390_set_cpu_state()
2031 trace_kvm_failed_cpu_state_set(CPU(cpu)->cpu_index, cpu_state, in kvm_s390_set_cpu_state()
2032 strerror(-ret)); in kvm_s390_set_cpu_state()
2040 unsigned int max_cpus = MACHINE(qdev_get_machine())->smp.max_cpus; in kvm_s390_vcpu_interrupt_pre_save()
2042 .buf = (uint64_t) cpu->irqstate, in kvm_s390_vcpu_interrupt_pre_save()
2054 cpu->irqstate_saved_size = 0; in kvm_s390_vcpu_interrupt_pre_save()
2059 cpu->irqstate_saved_size = bytes; in kvm_s390_vcpu_interrupt_pre_save()
2066 .buf = (uint64_t) cpu->irqstate, in kvm_s390_vcpu_interrupt_post_load()
2067 .len = cpu->irqstate_saved_size, in kvm_s390_vcpu_interrupt_post_load()
2071 if (cpu->irqstate_saved_size == 0) { in kvm_s390_vcpu_interrupt_post_load()
2076 return -ENOSYS; in kvm_s390_vcpu_interrupt_post_load()
2094 return -ENODEV; in kvm_arch_fixup_msi_route()
2097 pbdev = s390_pci_find_dev_by_target(s390_get_phb(), DEVICE(dev)->id); in kvm_arch_fixup_msi_route()
2100 return -ENODEV; in kvm_arch_fixup_msi_route()
2103 route->type = KVM_IRQ_ROUTING_S390_ADAPTER; in kvm_arch_fixup_msi_route()
2104 route->flags = 0; in kvm_arch_fixup_msi_route()
2105 route->u.adapter.summary_addr = pbdev->routes.adapter.summary_addr; in kvm_arch_fixup_msi_route()
2106 route->u.adapter.ind_addr = pbdev->routes.adapter.ind_addr; in kvm_arch_fixup_msi_route()
2107 route->u.adapter.summary_offset = pbdev->routes.adapter.summary_offset; in kvm_arch_fixup_msi_route()
2108 route->u.adapter.ind_offset = pbdev->routes.adapter.ind_offset + vec; in kvm_arch_fixup_msi_route()
2109 route->u.adapter.adapter_id = pbdev->routes.adapter.adapter_id; in kvm_arch_fixup_msi_route()
2392 model->lowest_ibc = lowest_ibc(prop.ibc); in kvm_s390_get_host_cpu_model()
2395 model->cpu_id = cpuid_id(prop.cpuid); in kvm_s390_get_host_cpu_model()
2396 model->cpu_id_format = cpuid_format(prop.cpuid); in kvm_s390_get_host_cpu_model()
2397 model->cpu_ver = 0xff; in kvm_s390_get_host_cpu_model()
2400 s390_add_from_feat_block(model->features, S390_FEAT_TYPE_STFL, in kvm_s390_get_host_cpu_model()
2402 /* dat-enhancement facility 2 has no bit but was introduced with stfle */ in kvm_s390_get_host_cpu_model()
2403 if (test_bit(S390_FEAT_STFLE, model->features)) { in kvm_s390_get_host_cpu_model()
2404 set_bit(S390_FEAT_DAT_ENH_2, model->features); in kvm_s390_get_host_cpu_model()
2407 rc = query_cpu_feat(model->features); in kvm_s390_get_host_cpu_model()
2413 rc = query_cpu_subfunc(model->features); in kvm_s390_get_host_cpu_model()
2420 if (!test_bit(S390_FEAT_MULTIPLE_EPOCH, model->features)) { in kvm_s390_get_host_cpu_model()
2421 clear_bit(S390_FEAT_PTFF_QSIE, model->features); in kvm_s390_get_host_cpu_model()
2422 clear_bit(S390_FEAT_PTFF_QTOUE, model->features); in kvm_s390_get_host_cpu_model()
2423 clear_bit(S390_FEAT_PTFF_STOE, model->features); in kvm_s390_get_host_cpu_model()
2424 clear_bit(S390_FEAT_PTFF_STOUE, model->features); in kvm_s390_get_host_cpu_model()
2429 set_bit(S390_FEAT_CMM, model->features); in kvm_s390_get_host_cpu_model()
2431 /* no cmm -> no cmm nt */ in kvm_s390_get_host_cpu_model()
2432 clear_bit(S390_FEAT_CMM_NT, model->features); in kvm_s390_get_host_cpu_model()
2437 clear_bit(S390_FEAT_BPB, model->features); in kvm_s390_get_host_cpu_model()
2445 set_bit(S390_FEAT_UNPACK, model->features); in kvm_s390_get_host_cpu_model()
2450 * configuration-topology facility. in kvm_s390_get_host_cpu_model()
2453 set_bit(S390_FEAT_CONFIGURATION_TOPOLOGY, model->features); in kvm_s390_get_host_cpu_model()
2457 set_bit(S390_FEAT_ZPCI, model->features); in kvm_s390_get_host_cpu_model()
2458 set_bit(S390_FEAT_ADAPTER_EVENT_NOTIFICATION, model->features); in kvm_s390_get_host_cpu_model()
2462 model->def = s390_find_cpu_def(cpu_type, ibc_gen(unblocked_ibc), in kvm_s390_get_host_cpu_model()
2465 /* model unknown, e.g. too new - search using features */ in kvm_s390_get_host_cpu_model()
2466 model->def = s390_find_cpu_def(0, ibc_gen(unblocked_ibc), in kvm_s390_get_host_cpu_model()
2468 model->features); in kvm_s390_get_host_cpu_model()
2470 if (!model->def) { in kvm_s390_get_host_cpu_model()
2476 set_bit(S390_FEAT_AP, model->features); in kvm_s390_get_host_cpu_model()
2480 * Extended-Length SCCB is handled entirely within QEMU. in kvm_s390_get_host_cpu_model()
2484 set_bit(S390_FEAT_EXTENDED_LENGTH_SCCB, model->features); in kvm_s390_get_host_cpu_model()
2487 set_bit(S390_FEAT_DIAG_318, model->features); in kvm_s390_get_host_cpu_model()
2491 query_uv_feat_guest(model->features); in kvm_s390_get_host_cpu_model()
2494 bitmap_and(model->features, model->features, model->def->full_feat, in kvm_s390_get_host_cpu_model()
2559 s390_fill_feat_block(model->features, S390_FEAT_TYPE_STFL, in kvm_s390_apply_cpu_model()
2567 rc = configure_cpu_feat(model->features); in kvm_s390_apply_cpu_model()
2573 rc = configure_cpu_subfunc(model->features); in kvm_s390_apply_cpu_model()
2579 if (test_bit(S390_FEAT_CMM, model->features)) { in kvm_s390_apply_cpu_model()
2583 if (ap_enabled(model->features)) { in kvm_s390_apply_cpu_model()
2587 /* configure UV-features for the guest indicated via query / test_bit */ in kvm_s390_apply_cpu_model()
2588 rc = configure_uv_feat_guest(model->features); in kvm_s390_apply_cpu_model()
2630 return -ENOTSUP; in kvm_s390_topology_set_mtcr()
2636 void kvm_arch_accel_class_init(ObjectClass *oc) in kvm_arch_accel_class_init() argument