diff mbox

[v3] target-arm: Fix segfault on startup when KVM enabled

Message ID 1401194263-13010-1-git-send-email-christoffer.dall@linaro.org
State Accepted
Commit 00d0f7cb6617f50be90e7dbb90a83d87b33f7695
Headers show

Commit Message

Christoffer Dall May 27, 2014, 12:37 p.m. UTC
Commit 50a2c6e55fa introduced a bug where QEMU would segfault on startup
when using KVM on ARM hosts, because kvm_arm_reset_cpu() accesses
cpu->cpreg_reset_values, which is not allocated before
kvm_arch_init_vcpu(). Fix this by not calling cpu_reset() until after
qemu_init_vcpu().

Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Andreas Faerber <afaerber@suse.de>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
---
Changes since v2:
 - Changed subject line which I forgot in v2
Changes since v1:
 - Updated commit message (current version by Peter Maydell)

 target-arm/cpu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Peter Maydell May 27, 2014, 1:43 p.m. UTC | #1
On 27 May 2014 13:37, Christoffer Dall <christoffer.dall@linaro.org> wrote:
> Commit 50a2c6e55fa introduced a bug where QEMU would segfault on startup
> when using KVM on ARM hosts, because kvm_arm_reset_cpu() accesses
> cpu->cpreg_reset_values, which is not allocated before
> kvm_arch_init_vcpu(). Fix this by not calling cpu_reset() until after
> qemu_init_vcpu().
>
> Acked-by: Paolo Bonzini <pbonzini@redhat.com>
> Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
> Reviewed-by: Andreas Faerber <afaerber@suse.de>
> Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
> ---
> Changes since v2:
>  - Changed subject line which I forgot in v2
> Changes since v1:
>  - Updated commit message (current version by Peter Maydell)

Applied, thanks.

-- PMM
diff mbox

Patch

diff --git a/target-arm/cpu.c b/target-arm/cpu.c
index 6c6f2b3..794dcb9 100644
--- a/target-arm/cpu.c
+++ b/target-arm/cpu.c
@@ -370,8 +370,8 @@  static void arm_cpu_realizefn(DeviceState *dev, Error **errp)
 
     init_cpreg_list(cpu);
 
-    cpu_reset(cs);
     qemu_init_vcpu(cs);
+    cpu_reset(cs);
 
     acc->parent_realize(dev, errp);
 }