summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@home.osdl.org>2003-09-01 10:05:56 -0700
committerLinus Torvalds <torvalds@home.osdl.org>2003-09-01 10:05:56 -0700
commit3d9dd6d278fa333853a06eb37da533a374855dff (patch)
tree5d711984e9f8be03b67f1f4e85326e116525c612 /kernel
parent3581ab9bc0de9a07b576ad3df128f4bbab0b17c6 (diff)
Fix del_timer_sync() SMP memory ordering (from Tejun Huh <tejun@aratech.co.kr>)
From Tejun's posting: > > This patch fixes a race between del_timer_sync and recursive timers. > Current implementation allows the value of timer->base that is used > for timer_pending test to be fetched before finishing running_timer > test, so it's possible for a recursive time to be pending after > del_timer_sync. Adding smp_rmb before timer_pending removes the race.
Diffstat (limited to 'kernel')
-rw-r--r--kernel/timer.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/kernel/timer.c b/kernel/timer.c
index ab083d12eb3a..2c8d770c5876 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -338,6 +338,7 @@ del_again:
break;
}
}
+ smp_rmb();
if (timer_pending(timer))
goto del_again;