Messages in this thread | | | Date | Sat, 23 Feb 2008 20:51:23 +0100 | From | "Dmitry Adamushko" <> | Subject | Re: + kthread-add-a-missing-memory-barrier-to-kthread_stop.patch added to -mm tree |
| |
On 23/02/2008, Linus Torvalds <torvalds@linux-foundation.org> wrote: > > > On Sat, 23 Feb 2008, Oleg Nesterov wrote: > > > > > Yes, but still I suspect wmb() is not enough. Note that try_to_wake_up() > > first checks (reads) the task->state, > > > > if (!(old_state & state)) > > goto out; > > > > without the full mb() it is (in theory) possible that try_to_wake_up() > > first reads TASK_RUNNING and only then sets CONDITION. IOW, STORE and > > LOAD could be re-ordered. > > > No. The spinlock can have preceding stores (and loads, for that matter) > percolate *into* the locked region, but a spinlock can *not* have loads > (and stores) escape *out* of the region withou being totally broken.
it's not a LOAD that escapes *out* of the region. It's a MODIFY that gets *in*:
(1)
MODIFY(a);
LOCK
LOAD(b);
UNLOCK
can become:
(2)
LOCK
MOFIDY(a) LOAD(b);
UNLOCK
and (reordered)
(3)
LOCK
LOAD(a) MODIFY(b)
UNLOCK
and this last one is a problem. No?
> > Linus >
-- Best regards, Dmitry Adamushko
| |