diff options
author | andrew <andrew@FreeBSD.org> | 2016-06-14 16:41:39 +0000 |
---|---|---|
committer | andrew <andrew@FreeBSD.org> | 2016-06-14 16:41:39 +0000 |
commit | fca40282bdcb0e3e93b17942f42fb76c7ace4c1e (patch) | |
tree | 28afbcc0d518cd24c42b0ee9c17b754ffa5ac805 | |
parent | 107ea631d3524a5b7c33054071b7d31b92cbed07 (diff) | |
download | FreeBSD-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.c | 4 |
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); |