On 23/02/2008, Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> 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 - To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html