aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/timer.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/kernel/timer.c b/kernel/timer.c
index 45229694dc6a..7e12e7bc7ce6 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -982,9 +982,15 @@ static void call_timer_fn(struct timer_list *timer, void (*fn)(unsigned long),
982 lock_map_release(&lockdep_map); 982 lock_map_release(&lockdep_map);
983 983
984 if (preempt_count != preempt_count()) { 984 if (preempt_count != preempt_count()) {
985 printk(KERN_ERR "timer: %pF preempt leak: %08x -> %08x\n", 985 WARN_ONCE(1, "timer: %pF preempt leak: %08x -> %08x\n",
986 fn, preempt_count, preempt_count()); 986 fn, preempt_count, preempt_count());
987 BUG(); 987 /*
988 * Restore the preempt count. That gives us a decent
989 * chance to survive and extract information. If the
990 * callback kept a lock held, bad luck, but not worse
991 * than the BUG() we had.
992 */
993 preempt_count() = preempt_count;
988 } 994 }
989} 995}
990 996