SMP系统,内核选项CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
内核经常在启动过程中挂掉,偶尔能启动到命令行时,查看/proc/interrupt,其中的timer也不会增加。
# cat /proc/interrupts
CPU0 CPU1
57: 6697 0 GIC timer
IPI0: 0 1 CPU wakeup interrupts
IPI1: 0 0 Timer broadcast interrupts
但是在3.4内核上,是正常的:
# cat /proc/interrupts
CPU0 CPU1
57: 8596 0 GIC timer
IPI0: 0 8560 Timer broadcast interrupts
在git记录中找到这个修改,这个修改导致了在3.10中无法使用broadcast。
commit f7db706b132f11c79ae1d74b2382e0926cf31644
Author: Santosh Shilimkar <santosh.shilimkar@ti.com>
Date: Thu Mar 14 10:03:03 2013 +0100
ARM: 7674/1: smp: Avoid dummy clockevent being preferred over real hardware clock-event
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 31644f1..79078ed 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -480,7 +480,7 @@ static void __cpuinit broadcast_timer_setup(struct clock_event_device *evt)
evt->features = CLOCK_EVT_FEAT_ONESHOT |
CLOCK_EVT_FEAT_PERIODIC |
CLOCK_EVT_FEAT_DUMMY;
- evt->rating = 400;
+ evt->rating = 100;
evt->mult = 1;
evt->set_mode = broadcast_timer_set_mode;
所以将这个修改回退就可以了,但是内核maintainer强烈建议使用local timer.