On Tue, 22 Apr 2014 13:48:02 -0400 Steven Rostedt <rostedt@xxxxxxxxxxx> wrote: > I need to take a deeper look into the actual code. But as trylocks on > UP are nops (always succeed), and if it expects to be able to do > something in a critical section that is protected by spinlocks (again > nops on UP), this would be broken for UP. Reading the code, I see it's broken. We should add something like this: Signed-off-by: Steven Rostedt <rostedt@xxxxxxxxxxx> --- diff --git a/kernel/timer.c b/kernel/timer.c index cc34e42..a03164a 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -1447,6 +1447,12 @@ static void run_timer_softirq(struct softirq_action *h) __run_timers(base); } +#ifdef CONFIG_SMP +#define timer_should_raise_softirq(lock) !spin_do_trylock(lock) +#else +#define timer_should_raise_softirq(lock) 1 +#endif + /* * Called by the local, per-CPU timer interrupt on SMP. */ @@ -1467,7 +1473,7 @@ void run_local_timers(void) return; } - if (!spin_do_trylock(&base->lock)) { + if (timer_should_raise_softirq(&base->lock)) { raise_softirq(TIMER_SOFTIRQ); return; } -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html