summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandrew <andrew@FreeBSD.org>2016-06-14 16:41:39 +0000
committerandrew <andrew@FreeBSD.org>2016-06-14 16:41:39 +0000
commitfca40282bdcb0e3e93b17942f42fb76c7ace4c1e (patch)
tree28afbcc0d518cd24c42b0ee9c17b754ffa5ac805
parent107ea631d3524a5b7c33054071b7d31b92cbed07 (diff)
downloadFreeBSD-src-fca40282bdcb0e3e93b17942f42fb76c7ace4c1e.zip
FreeBSD-src-fca40282bdcb0e3e93b17942f42fb76c7ace4c1e.tar.gz
Move the arm call to intr_pic_init_secondary earlier in the secondary CPU
initialisation. This ensures it will complete before signalling to the boot CPU it has booted. This fixes a race with the GIC where the arm_gic_map may not be populated before it is used to bind interrupts leading to some interrupts becoming bound to no CPUs. Approved by: re (kib) Sponsored by: ABT Systems Ltd
-rw-r--r--sys/arm/arm/mp_machdep.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/arm/arm/mp_machdep.c b/sys/arm/arm/mp_machdep.c
index 24b5679..312ee58 100644
--- a/sys/arm/arm/mp_machdep.c
+++ b/sys/arm/arm/mp_machdep.c
@@ -199,6 +199,9 @@ init_secondary(int cpu)
vfp_init();
#endif
+ /* Configure the interrupt controller */
+ intr_pic_init_secondary();
+
mtx_lock_spin(&ap_boot_mtx);
atomic_add_rel_32(&smp_cpus, 1);
@@ -237,7 +240,6 @@ init_secondary(int cpu)
cpu_initclocks_ap();
CTR0(KTR_SMP, "go into scheduler");
- intr_pic_init_secondary();
/* Enter the scheduler */
sched_throw(NULL);
OpenPOWER on IntegriCloud