578d36f5e1
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> |
||
---|---|---|
.. | ||
boot | ||
configs | ||
include/asm | ||
kernel | ||
lib | ||
mach-bf518 | ||
mach-bf527 | ||
mach-bf533 | ||
mach-bf537 | ||
mach-bf538 | ||
mach-bf548 | ||
mach-bf561 | ||
mach-common | ||
mm | ||
oprofile | ||
ADI_BSD.txt | ||
Kconfig | ||
Kconfig.debug | ||
Makefile |