summaryrefslogtreecommitdiffstats
path: root/kernel/time/timer.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2016-07-04 09:50:15 +0000
committerIngo Molnar <mingo@kernel.org>2016-07-07 10:25:13 +0200
commite675447bda51c1ea72d1ac9132ce3bed974f1da3 (patch)
treeaef8e5126c916001475178e9e4fafcad78bdc6f5 /kernel/time/timer.c
parenta99cde438de0c4c0cecc1d1af1a55a75b10bfdef (diff)
downloadlinux-e675447bda51c1ea72d1ac9132ce3bed974f1da3.tar.gz
linux-e675447bda51c1ea72d1ac9132ce3bed974f1da3.tar.bz2
linux-e675447bda51c1ea72d1ac9132ce3bed974f1da3.zip
timers: Make 'pinned' a timer property
We want to move the timer migration logic from a 'push' to a 'pull' model. Under the current 'push' model pinned timers are handled via a runtime API variant: mod_timer_pinned(). The 'pull' model requires us to store the pinned attribute of a timer in the timer_list structure itself, as a new TIMER_PINNED bit in timer->flags. This flag must be set at initialization time and the timer APIs recognize the flag. This patch: - Implements the new flag and associated new-style initialization methods - makes mod_timer() recognize new-style pinned timers, - and adds some migration helper facility to allow step by step conversion of old-style to new-style pinned timers. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Arjan van de Ven <arjan@infradead.org> Cc: Chris Mason <clm@fb.com> Cc: Eric Dumazet <edumazet@google.com> Cc: George Spelvin <linux@sciencehorizons.net> Cc: Josh Triplett <josh@joshtriplett.org> Cc: Len Brown <lenb@kernel.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Rik van Riel <riel@redhat.com> Cc: rt@linutronix.de Link: http://lkml.kernel.org/r/20160704094341.049338558@linutronix.de Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/time/timer.c')
-rw-r--r--kernel/time/timer.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/kernel/time/timer.c b/kernel/time/timer.c
index 3a95f9728778..693f6d14058e 100644
--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -782,7 +782,7 @@ __mod_timer(struct timer_list *timer, unsigned long expires,
debug_activate(timer, expires);
- new_base = get_target_base(base, pinned);
+ new_base = get_target_base(base, pinned || timer->flags & TIMER_PINNED);
if (base != new_base) {
/*
@@ -825,7 +825,7 @@ out_unlock:
*/
int mod_timer_pending(struct timer_list *timer, unsigned long expires)
{
- return __mod_timer(timer, expires, true, TIMER_NOT_PINNED);
+ return __mod_timer(timer, expires, true, MOD_TIMER_NOT_PINNED);
}
EXPORT_SYMBOL(mod_timer_pending);
@@ -900,7 +900,7 @@ int mod_timer(struct timer_list *timer, unsigned long expires)
if (timer_pending(timer) && timer->expires == expires)
return 1;
- return __mod_timer(timer, expires, false, TIMER_NOT_PINNED);
+ return __mod_timer(timer, expires, false, MOD_TIMER_NOT_PINNED);
}
EXPORT_SYMBOL(mod_timer);
@@ -928,7 +928,7 @@ int mod_timer_pinned(struct timer_list *timer, unsigned long expires)
if (timer->expires == expires && timer_pending(timer))
return 1;
- return __mod_timer(timer, expires, false, TIMER_PINNED);
+ return __mod_timer(timer, expires, false, MOD_TIMER_PINNED);
}
EXPORT_SYMBOL(mod_timer_pinned);
@@ -1512,7 +1512,7 @@ signed long __sched schedule_timeout(signed long timeout)
expire = timeout + jiffies;
setup_timer_on_stack(&timer, process_timeout, (unsigned long)current);
- __mod_timer(&timer, expire, false, TIMER_NOT_PINNED);
+ __mod_timer(&timer, expire, false, MOD_TIMER_NOT_PINNED);
schedule();
del_singleshot_timer_sync(&timer);