The inactive timer could not be raised casued by this patch: https://lkml.org/lkml/2014/2/28/230 This makes the system using deferred timer like CPUfreq not working. Signed-off-by: Jia Hongtao <hongtao.jia@xxxxxxxxxxxxx> --- kernel/timer.c | 44 -------------------------------------------- 1 file changed, 44 deletions(-) diff --git a/kernel/timer.c b/kernel/timer.c index 8f1687a..59b4dd5 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -1452,52 +1452,8 @@ static void run_timer_softirq(struct softirq_action *h) */ void run_local_timers(void) { - struct tvec_base *base = __this_cpu_read(tvec_bases); - hrtimer_run_queues(); - /* - * We can access this lockless as we are in the timer - * interrupt. If there are no timers queued, nothing to do in - * the timer softirq. - */ -#ifdef CONFIG_PREEMPT_RT_FULL - -#ifndef CONFIG_SMP - /* - * The spin_do_trylock() later may fail as the lock may be hold before - * the interrupt arrived. The spin-lock debugging code will raise a - * warning if the try_lock fails on UP. Since this is only an - * optimization for the FULL_NO_HZ case (not to run the timer softirq on - * an nohz_full CPU) we don't really care and shedule the softirq. - */ raise_softirq(TIMER_SOFTIRQ); - return; -#endif - - /* On RT, irq work runs from softirq */ - if (irq_work_needs_cpu()) { - raise_softirq(TIMER_SOFTIRQ); - return; - } - - if (!spin_do_trylock(&base->lock)) { - raise_softirq(TIMER_SOFTIRQ); - return; - } -#endif - - if (!base->active_timers) - goto out; - - /* Check whether the next pending timer has expired */ - if (time_before_eq(base->next_timer, jiffies)) - raise_softirq(TIMER_SOFTIRQ); -out: -#ifdef CONFIG_PREEMPT_RT_FULL - rt_spin_unlock_after_trylock_in_irq(&base->lock); -#endif - /* The ; ensures that gcc won't complain in the !RT case */ - ; } #ifdef __ARCH_WANT_SYS_ALARM -- 2.1.0.27.g96db324 -- To unsubscribe from this list: send the line "unsubscribe stable-rt" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html