summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorCon Kolivas <kernel@kolivas.org>2016-10-31 11:11:32 +1100
committerCon Kolivas <kernel@kolivas.org>2016-10-31 11:26:58 +1100
commitd2a88342b9d69e550ae21d5d1fdd7a15fe039159 (patch)
tree1f8188170c98bad85124044de335a1b6c7f4ee61 /kernel
parent6d6ea6a24879ed0f5c99d64d3d621d2007c699a3 (diff)
Unset base is idle in next_timer_event based on hrtimers as well.
Diffstat (limited to 'kernel')
-rw-r--r--kernel/time/timer.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/kernel/time/timer.c b/kernel/time/timer.c
index 32bf6f75a8fe..f0be61c19bfb 100644
--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -1454,7 +1454,7 @@ static unsigned long __next_timer_interrupt(struct timer_base *base)
* Check, if the next hrtimer event is before the next timer wheel
* event:
*/
-static u64 cmp_next_hrtimer_event(u64 basem, u64 expires)
+static u64 cmp_next_hrtimer_event(struct timer_base *base, u64 basem, u64 expires)
{
u64 nextevt = hrtimer_get_next_event();
@@ -1472,6 +1472,9 @@ static u64 cmp_next_hrtimer_event(u64 basem, u64 expires)
if (nextevt <= basem)
return basem;
+ if (nextevt < expires && nextevt - basem <= TICK_NSEC)
+ base->is_idle = false;
+
/*
* Round up to the next jiffie. High resolution timers are
* off, so the hrtimers are expired in the tick and we need to
@@ -1531,7 +1534,7 @@ u64 get_next_timer_interrupt(unsigned long basej, u64 basem)
}
spin_unlock(&base->lock);
- return cmp_next_hrtimer_event(basem, expires);
+ return cmp_next_hrtimer_event(base, basem, expires);
}
/**