diff options
author | Mark Johnston <markj@FreeBSD.org> | 2020-01-23 16:07:27 +0000 |
---|---|---|
committer | Mark Johnston <markj@FreeBSD.org> | 2020-01-23 16:07:27 +0000 |
commit | 32a1f92f2c33002f1b6b89d3a7195563e812cb84 (patch) | |
tree | 45746ae6e2b70de824d37cd16f8eebb78d7e608d /sys/arm64/arm64/mp_machdep.c | |
parent | af6fbe519c93135f820b55e2fb1f1c9076c7cddd (diff) | |
download | src-32a1f92f2c33002f1b6b89d3a7195563e812cb84.tar.gz src-32a1f92f2c33002f1b6b89d3a7195563e812cb84.zip |
arm64: Don't enable interrupts in init_secondary().
Doing so can cause deadlocks or panics during boot, if an interrupt
handler accesses uninitialized per-CPU scheduler structures. This seems
to occur frequently when running under QEMU or AWS. The idle threads
are set up to release a spinlock section and enable interrupts in
fork_exit(), so there is no need to enable interrupts earlier.
Reviewed by: kib
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D23328
Notes
Notes:
svn path=/head/; revision=357048
Diffstat (limited to 'sys/arm64/arm64/mp_machdep.c')
-rw-r--r-- | sys/arm64/arm64/mp_machdep.c | 6 |
1 files changed, 0 insertions, 6 deletions
diff --git a/sys/arm64/arm64/mp_machdep.c b/sys/arm64/arm64/mp_machdep.c index bbda274bb226..e16a1f416c93 100644 --- a/sys/arm64/arm64/mp_machdep.c +++ b/sys/arm64/arm64/mp_machdep.c @@ -240,18 +240,12 @@ init_secondary(uint64_t cpu) dbg_init(); pan_enable(); - /* Enable interrupts */ - intr_enable(); - mtx_lock_spin(&ap_boot_mtx); - atomic_add_rel_32(&smp_cpus, 1); - if (smp_cpus == mp_ncpus) { /* enable IPI's, tlb shootdown, freezes etc */ atomic_store_rel_int(&smp_started, 1); } - mtx_unlock_spin(&ap_boot_mtx); kcsan_cpu_init(cpu); |