summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYunhong Jiang <yunhong.jiang@intel.com>2015-08-18 11:23:10 -0700
committerYunhong Jiang <yunhong.jiang@linux.intel.com>2016-07-21 17:49:30 -0700
commitfafab8722263f4ab08894e35f4385febbce09dd1 (patch)
tree018aafc8ddc8b37a6b7fedbea1086f0531fba090
parentef4e798bc8761c401451649ed17a52e3e1c638e8 (diff)
Restore the non_hz_full
Please refer to http://comments.gmane.org/gmane.linux.kernel/1891417, the last two mails on this discussion. The non_hz_full is important for RT, so take it back temporarily. Unluckily I didn't find the corresponding reverting patch on the RT tree. Upstream status: pending Change-Id: I2748a8f9b7a98ef2185a1da60089984432393eff Signed-off-by: Yunhong Jiang <yunhong.jiang@linux.intel.com>
-rw-r--r--kernel/kernel/time/timer.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/kernel/kernel/time/timer.c b/kernel/kernel/time/timer.c
index 76a301b24..016a0bf52 100644
--- a/kernel/kernel/time/timer.c
+++ b/kernel/kernel/time/timer.c
@@ -1453,9 +1453,11 @@ u64 get_next_timer_interrupt(unsigned long basej, u64 basem)
* the base lock to check when the next timer is pending and so
* we assume the next jiffy.
*/
- return basem + TICK_NSEC;
-#endif
+ if (!spin_do_trylock(&base->lock))
+ return basem + TICK_NSEC;
+#else
spin_lock(&base->lock);
+#endif
if (base->active_timers) {
if (time_before_eq(base->next_timer, base->timer_jiffies))
base->next_timer = __next_timer_interrupt(base);
@@ -1465,7 +1467,11 @@ u64 get_next_timer_interrupt(unsigned long basej, u64 basem)
else
expires = basem + (nextevt - basej) * TICK_NSEC;
}
+#ifdef CONFIG_PREEMPT_RT_FULL
+ rt_spin_unlock(&base->lock);
+#else
spin_unlock(&base->lock);
+#endif
return cmp_next_hrtimer_event(basem, expires);
}