From 5b84ad196f0d40a604c95cb74ccffcd6721d0fb2 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Mon, 13 Oct 2003 07:50:54 -0700 Subject: Mark timer as running in the timer base _before_ we clear the pending flag (and order it on SMP), so that del_timer_sync() always sees the timer either pending or running if it is active. --- kernel/timer.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'kernel') diff --git a/kernel/timer.c b/kernel/timer.c index 176d2c3215b4..1c513bd0b1e0 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -418,8 +418,9 @@ repeat: data = timer->data; list_del(&timer->entry); - timer->base = NULL; set_running_timer(base, timer); + smp_wmb(); + timer->base = NULL; spin_unlock_irq(&base->lock); fn(data); spin_lock_irq(&base->lock); -- cgit v1.2.3