aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/timer.c')
-rw-r--r--kernel/timer.c72
1 files changed, 36 insertions, 36 deletions
diff --git a/kernel/timer.c b/kernel/timer.c
index f82f4bfe2d88..45229694dc6a 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -953,6 +953,41 @@ static int cascade(struct tvec_base *base, struct tvec *tv, int index)
953 return index; 953 return index;
954} 954}
955 955
956static void call_timer_fn(struct timer_list *timer, void (*fn)(unsigned long),
957 unsigned long data)
958{
959 int preempt_count = preempt_count();
960
961#ifdef CONFIG_LOCKDEP
962 /*
963 * It is permissible to free the timer from inside the
964 * function that is called from it, this we need to take into
965 * account for lockdep too. To avoid bogus "held lock freed"
966 * warnings as well as problems when looking into
967 * timer->lockdep_map, make a copy and use that here.
968 */
969 struct lockdep_map lockdep_map = timer->lockdep_map;
970#endif
971 /*
972 * Couple the lock chain with the lock chain at
973 * del_timer_sync() by acquiring the lock_map around the fn()
974 * call here and in del_timer_sync().
975 */
976 lock_map_acquire(&lockdep_map);
977
978 trace_timer_expire_entry(timer);
979 fn(data);
980 trace_timer_expire_exit(timer);
981
982 lock_map_release(&lockdep_map);
983
984 if (preempt_count != preempt_count()) {
985 printk(KERN_ERR "timer: %pF preempt leak: %08x -> %08x\n",
986 fn, preempt_count, preempt_count());
987 BUG();
988 }
989}
990
956#define INDEX(N) ((base->timer_jiffies >> (TVR_BITS + (N) * TVN_BITS)) & TVN_MASK) 991#define INDEX(N) ((base->timer_jiffies >> (TVR_BITS + (N) * TVN_BITS)) & TVN_MASK)
957 992
958/** 993/**
@@ -996,42 +1031,7 @@ static inline void __run_timers(struct tvec_base *base)
996 detach_timer(timer, 1); 1031 detach_timer(timer, 1);
997 1032
998 spin_unlock_irq(&base->lock); 1033 spin_unlock_irq(&base->lock);
999 { 1034 call_timer_fn(timer, fn, data);
1000 int preempt_count = preempt_count();
1001
1002#ifdef CONFIG_LOCKDEP
1003 /*
1004 * It is permissible to free the timer from
1005 * inside the function that is called from
1006 * it, this we need to take into account for
1007 * lockdep too. To avoid bogus "held lock
1008 * freed" warnings as well as problems when
1009 * looking into timer->lockdep_map, make a
1010 * copy and use that here.
1011 */
1012 struct lockdep_map lockdep_map =
1013 timer->lockdep_map;
1014#endif
1015 /*
1016 * Couple the lock chain with the lock chain at
1017 * del_timer_sync() by acquiring the lock_map
1018 * around the fn() call here and in
1019 * del_timer_sync().
1020 */
1021 lock_map_acquire(&lockdep_map);
1022
1023 trace_timer_expire_entry(timer);
1024 fn(data);
1025 trace_timer_expire_exit(timer);
1026
1027 lock_map_release(&lockdep_map);
1028
1029 if (preempt_count != preempt_count()) {
1030 printk(KERN_ERR "timer: %pF preempt leak: %08x -> %08x\n",
1031 fn, preempt_count, preempt_count());
1032 BUG();
1033 }
1034 }
1035 spin_lock_irq(&base->lock); 1035 spin_lock_irq(&base->lock);
1036 } 1036 }
1037 } 1037 }