From 819bd3091e986c1b6b10203a7138a53b849a53e0 Mon Sep 17 00:00:00 2001 From: Dominik Dingel Date: Thu, 5 Sep 2013 13:54:39 +0200 Subject: s390x/async_pf: Check for apf extension and enable pfault S390 can also use async page faults, to enhance guest scheduling. In case of live migration we want to disable the feature and let all pending request finish. Signed-off-by: Dominik Dingel Signed-off-by: Jens Freimann Signed-off-by: Christian Borntraeger --- target-s390x/cpu.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'target-s390x/cpu.c') diff --git a/target-s390x/cpu.c b/target-s390x/cpu.c index ff57b806e4..f1319e55a6 100644 --- a/target-s390x/cpu.c +++ b/target-s390x/cpu.c @@ -83,6 +83,7 @@ static void s390_cpu_reset(CPUState *s) S390CPUClass *scc = S390_CPU_GET_CLASS(cpu); CPUS390XState *env = &cpu->env; + env->pfault_token = -1UL; s390_del_running_cpu(cpu); scc->parent_reset(s); #if !defined(CONFIG_USER_ONLY) @@ -105,6 +106,8 @@ static void s390_cpu_initial_reset(CPUState *s) /* architectured initial values for CR 0 and 14 */ env->cregs[0] = CR0_RESET; env->cregs[14] = CR14_RESET; + + env->pfault_token = -1UL; } /* CPUClass:reset() */ @@ -123,6 +126,9 @@ static void s390_cpu_full_reset(CPUState *s) /* architectured initial values for CR 0 and 14 */ env->cregs[0] = CR0_RESET; env->cregs[14] = CR14_RESET; + + env->pfault_token = -1UL; + /* set halted to 1 to make sure we can add the cpu in * s390_ipl_cpu code, where CPUState::halted is set back to 0 * after incrementing the cpu counter */ -- cgit v1.2.3 From 49f5c9e98ab44700b58e23ca8c17e21850328da1 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Wed, 12 Feb 2014 09:56:35 +0100 Subject: s390x/cpu: Use ioctl to reset state in the kernel Some of the state in the kernel can not be reset from QEMU yet. For this we've got to use the KVM_S390_INITIAL_RESET ioctl to make sure that the state in the kernel is set to the right values during initial CPU reset, too. Signed-off-by: Thomas Huth Acked-by: Cornelia Huck Signed-off-by: Christian Borntraeger --- target-s390x/cpu.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'target-s390x/cpu.c') diff --git a/target-s390x/cpu.c b/target-s390x/cpu.c index f1319e55a6..1a8c1cc39f 100644 --- a/target-s390x/cpu.c +++ b/target-s390x/cpu.c @@ -108,6 +108,15 @@ static void s390_cpu_initial_reset(CPUState *s) 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 } /* CPUClass:reset() */ -- cgit v1.2.3