linux/arch/blackfin
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
..
boot Blackfin: add an uncompressed vmImage target 2009-12-15 00:15:08 -05:00
configs Blackfin: add support for the Acvilon BF561 board 2009-12-15 00:15:10 -05:00
include/asm Blackfin: convert to asm-generic pci headers 2009-12-15 00:16:07 -05:00
kernel Blackfin: dma-mapping.h: flesh out missing DMA mapping functions 2009-12-15 00:16:01 -05:00
lib Blackfin: convert to generic checksum code 2009-12-15 00:13:32 -05:00
mach-bf518 Blackfin: push BF5Xx configs down into mach-specific Kconfigs 2009-12-15 00:15:45 -05:00
mach-bf527 Blackfin: push BF5Xx configs down into mach-specific Kconfigs 2009-12-15 00:15:45 -05:00
mach-bf533 Blackfin: unify DMA masks 2009-12-15 00:14:59 -05:00
mach-bf537 Blackfin: unify DMA masks 2009-12-15 00:14:59 -05:00
mach-bf538 Blackfin: unify DMA masks 2009-12-15 00:14:59 -05:00
mach-bf548 Blackfin: push BF5Xx configs down into mach-specific Kconfigs 2009-12-15 00:15:45 -05:00
mach-bf561 Blackfin: SMP: don't start up core b until its state has been completely onlined 2009-12-15 00:16:09 -05:00
mach-common Blackfin: SMP: don't start up core b until its state has been completely onlined 2009-12-15 00:16:09 -05:00
mm Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
oprofile Blackfin arch: remove hardware PM code, oprofile not use it 2009-01-07 23:14:39 +08:00
ADI_BSD.txt Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
Kconfig Blackfin: support smaller uncached DMA chunks for memory constrained systems 2009-12-15 00:15:48 -05:00
Kconfig.debug Blackfin: add some isram-driver self tests 2009-09-16 22:10:36 -04:00
Makefile Blackfin: force BFD target when linking modules 2009-12-15 00:15:25 -05:00