/* S390CPUClass::initial_reset() */ static void s390_cpu_initial_reset(CPUState *s) { S390CPU *cpu = S390_CPU(s); CPUS390XState *env = &cpu->env; int i; s390_cpu_reset(s); /* initial reset does not touch regs,fregs and aregs */ memset(&env->fpc, 0, offsetof(CPUS390XState, cpu_num) - offsetof(CPUS390XState, fpc)); /* architectured initial values for CR 0 and 14 */ env->cregs[0] = CR0_RESET; env->cregs[14] = CR14_RESET; /* architectured initial value for Breaking-Event-Address register */ env->gbea = 1; env->pfault_token = -1UL; env->ext_index = -1; for (i = 0; i < ARRAY_SIZE(env->io_index); i++) { env->io_index[i] = -1; } /* tininess for underflow is detected before rounding */ set_float_detect_tininess(float_tininess_before_rounding, &env->fpu_status); /* Reset state inside the kernel that we cannot access yet from QEMU. */ if (kvm_enabled()) { kvm_s390_reset_vcpu(cpu); } tlb_flush(s, 1); }
/* S390CPUClass::initial_reset() */ static void s390_cpu_initial_reset(CPUState *s) { S390CPU *cpu = S390_CPU(s); CPUS390XState *env = &cpu->env; s390_cpu_reset(s); /* initial reset does not touch regs,fregs and aregs */ memset(&env->fpc, 0, offsetof(CPUS390XState, cpu_num) - offsetof(CPUS390XState, fpc)); /* architectured initial values for CR 0 and 14 */ env->cregs[0] = CR0_RESET; env->cregs[14] = CR14_RESET; env->pfault_token = -1UL; #if defined(CONFIG_KVM) /* Reset state inside the kernel that we cannot access yet from QEMU. */ if (kvm_enabled()) { if (kvm_vcpu_ioctl(s, KVM_S390_INITIAL_RESET, NULL)) { perror("Initial CPU reset failed"); } } #endif }
/*-------------------------------------------------------------------*/ int cpu_reset (REGS *regs) { switch(sysblk.arch_mode) { #if defined(_370) case ARCH_370: return s370_cpu_reset (regs); #endif #if defined(_390) case ARCH_390: return s390_cpu_reset (regs); #endif #if defined(_900) case ARCH_900: /* z/Arch always starts out in ESA390 mode */ return s390_cpu_reset (regs); #endif } return -1; }