From: Anders Berg <anders.b...@intel.com> CPU4: Booted secondary processor Kernel panic - not syncing: unexpected prefetch abort in Hyp mode at: 0x921680 unexpected data abort in Hyp mode at: 0xc0916c2c unexpected HVC/SVC trap in Hyp mode at: 0xc0b2d4a0 CPU: 4 PID: 0 Comm: swapper/4 Not tainted 3.10.38-ltsi-00013-g59f309e-dirty #96 [<c0421658>] (unwind_backtrace+0x0/0xf8) from [<c041df54>] (show_stack+0x10/0x14) [<c041df54>] (show_stack+0x10/0x14) from [<c0916cbc>] (panic+0x90/0x1e4) [<c0916cbc>] (panic+0x90/0x1e4) from [<c0413048>] (cpu_init_hyp_mode+0x10/0x6c) [<c0413048>] (cpu_init_hyp_mode+0x10/0x6c) from [<c04130c8>] (hyp_init_cpu_notify+0x24/0x2c) [<c04130c8>] (hyp_init_cpu_notify+0x24/0x2c) from [<c091f744>] (notifier_call_chain+0x44/0x84) [<c091f744>] (notifier_call_chain+0x44/0x84) from [<c04343e8>] (__cpu_notify+0x28/0x44) [<c04343e8>] (__cpu_notify+0x28/0x44) from [<c09148a0>] (secondary_start_kernel+0xd4/0x120) [<c09148a0>] (secondary_start_kernel+0xd4/0x120) from [<c042d4c0>] (axxia_platform_cpu_die+0x54/0xa0)
The fix for this crash was obtained from from upstream kernel.org (relevant parts of): commit 37a34ac1 "arm: kvm: fix CPU hotplug" commit b20c9f29 "arm/arm64: KVM: detect CPU reset on CPU_PM_EXIT" Signed-off-by: Anders Berg <anders.b...@intel.com> --- arch/arm/kvm/arm.c | 3 ++- arch/arm/kvm/interrupts.S | 11 ++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c index ef1703b..34dff05 100644 --- a/arch/arm/kvm/arm.c +++ b/arch/arm/kvm/arm.c @@ -824,7 +824,8 @@ static int hyp_init_cpu_notify(struct notifier_block *self, switch (action) { case CPU_STARTING: case CPU_STARTING_FROZEN: - cpu_init_hyp_mode(NULL); + if (__hyp_get_vectors() == hyp_default_vectors) + cpu_init_hyp_mode(NULL); break; } diff --git a/arch/arm/kvm/interrupts.S b/arch/arm/kvm/interrupts.S index 16cd4ba..723bcef 100644 --- a/arch/arm/kvm/interrupts.S +++ b/arch/arm/kvm/interrupts.S @@ -220,6 +220,10 @@ after_vfp_restore: * in Hyp mode (see init_hyp_mode in arch/arm/kvm/arm.c). Return values are * passed in r0 and r1. * + * A function pointer with a value of 0xffffffff has a special meaning, + * and is used to implement __hyp_get_vectors in the same way as in + * arch/arm/kernel/hyp_stub.S. + * * The calling convention follows the standard AAPCS: * r0 - r3: caller save * r12: caller save @@ -363,6 +367,11 @@ hyp_hvc: host_switch_to_hyp: pop {r0, r1, r2} + /* Check for __hyp_get_vectors */ + cmp r0, #-1 + mrceq p15, 4, r0, c12, c0, 0 @ get HVBAR + beq 1f + push {lr} mrs lr, SPSR push {lr} @@ -378,7 +387,7 @@ THUMB( orr lr, #1) pop {lr} msr SPSR_csxf, lr pop {lr} - eret +1: eret guest_trap: load_vcpu @ Load VCPU pointer to r0 -- 1.8.1.4 -- _______________________________________________ linux-yocto mailing list linux-yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/linux-yocto