diff options
author | Ingo Molnar <mingo@kernel.org> | 2014-09-07 13:00:10 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2014-09-07 13:00:10 +0200 |
commit | d8a57edba7730131b5ca1688016a6c32ee19f0e6 (patch) | |
tree | bde9768ca80798282079636fb94294f7c4a53d46 | |
parent | c71d4edbfc944dda27ac0449de230a72a3e7216e (diff) | |
parent | 88299c9bdb109e0d95abdca648065631ff91b2cb (diff) | |
download | tip-d8a57edba7730131b5ca1688016a6c32ee19f0e6.tar.gz |
Merge branch 'timers/core'
-rw-r--r-- | fs/timerfd.c | 3 | ||||
-rw-r--r-- | kernel/time/tick-sched.c | 8 |
2 files changed, 9 insertions, 2 deletions
diff --git a/fs/timerfd.c b/fs/timerfd.c index 80c350216ea8e..b46ffa94372a5 100644 --- a/fs/timerfd.c +++ b/fs/timerfd.c @@ -333,8 +333,7 @@ static long timerfd_ioctl(struct file *file, unsigned int cmd, unsigned long arg spin_lock_irq(&ctx->wqh.lock); if (!timerfd_canceled(ctx)) { ctx->ticks = ticks; - if (ticks) - wake_up_locked(&ctx->wqh); + wake_up_locked(&ctx->wqh); } else ret = -ECANCELED; spin_unlock_irq(&ctx->wqh.lock); diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index 99aa6ee3908fb..cc0a5b6f741b6 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c @@ -968,6 +968,10 @@ static void tick_nohz_handler(struct clock_event_device *dev) tick_sched_do_timer(now); tick_sched_handle(ts, regs); + /* No need to reprogram if we are running tickless */ + if (unlikely(ts->tick_stopped)) + return; + while (tick_nohz_reprogram(ts, now)) { now = ktime_get(); tick_do_update_jiffies64(now); @@ -1095,6 +1099,10 @@ static enum hrtimer_restart tick_sched_timer(struct hrtimer *timer) if (regs) tick_sched_handle(ts, regs); + /* No need to reprogram if we are in idle or full dynticks mode */ + if (unlikely(ts->tick_stopped)) + return HRTIMER_NORESTART; + hrtimer_forward(timer, now, tick_period); return HRTIMER_RESTART; |