linux-kernel-test/arch/blackfin/mach-bf561
Yi Li 578d36f5e1 Blackfin: SMP: don't start up core b until its state has been completely onlined
When testing PREEMPT_RT kernel on BF561-EZKit, the kernel blocks while
booting.  When the kernel initializes the ethernet driver, it sleeps and
never wakes up.

The issue happens when the kernel waits for a timer for Core B to timeout
(the timers are per-cpu based: static DEFINE_PER_CPU(struct tvec_base *,
tvec_bases) = &boot_tvec_bases).

However, the ksoftirqd thread for Core B (note, the ksoftirqd thread is
also per-cpu based) cannot work properly, and the timers for Core B never
times out.

When ksoftirqd() for the first time runs on core B, it is possible core A
is still initializing core B (see smp_init() -> cpu_up() -> __cpu_up()).
So the "cpu_is_offline()" check may return true and ksoftirqd moves to
"wait_to_die".

So delay the core b start up until the per-cpu timers have been set up
fully.

Signed-off-by: Yi Li <yi.li@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2009-12-15 00:16:09 -05:00
..
boards Blackfin: add support for the Acvilon BF561 board 2009-12-15 00:15:10 -05:00
include/mach Blackfin: unify DMA masks 2009-12-15 00:14:59 -05:00
atomic.S Blackfin: work around testset anomaly 05000477 2009-11-25 02:35:39 -05:00
coreb.c Blackfin: coreb: switched to unlocked_ioctl 2009-12-15 00:14:21 -05:00
dma.c Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
ints-priority.c Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
Kconfig Blackfin: add support for gptimer0 as a tick source 2009-06-12 06:11:37 -04:00
Makefile Blackfin arch: fix bugs and unify BFIN_KERNEL_CLOCK option 2009-01-07 23:14:39 +08:00
secondary.S Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
smp.c Blackfin: SMP: don't start up core b until its state has been completely onlined 2009-12-15 00:16:09 -05:00