diff options
| author | Linus Torvalds <torvalds@home.osdl.org> | 2003-09-01 10:05:56 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.osdl.org> | 2003-09-01 10:05:56 -0700 |
| commit | 3d9dd6d278fa333853a06eb37da533a374855dff (patch) | |
| tree | 5d711984e9f8be03b67f1f4e85326e116525c612 /kernel | |
| parent | 3581ab9bc0de9a07b576ad3df128f4bbab0b17c6 (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.c | 1 |
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; |
