Thread (7 messages) 7 messages, 3 authors, 2016-02-16

Re: Writes, smp_wmb(), and transitivity?

From: Linus Torvalds <torvalds@linux-foundation.org>
Date: 2016-02-16 18:59:08
Also in: linux-arm-kernel, linux-mips, linuxppc-dev

On Mon, Feb 15, 2016 at 9:58 AM, Paul E. McKenney
[off-list ref] wrote:
Two threads:

        int a, b;

        void thread0(void)
        {
                WRITE_ONCE(a, 1);
                smp_wmb();
                WRITE_ONCE(b, 2);
        }

        void thread1(void)
        {
                WRITE_ONCE(b, 1);
                smp_wmb();
                WRITE_ONCE(a, 2);
        }

        /* After all threads have completed and the dust has settled... */

        BUG_ON(a == 1 && b == 1);
So the more I look at that kind of litmus test, the less I think that
we should care, because I can't come up with a scenario in where that
kind of test makes sense. without even a possibility of any causal
relationship between the two, I can't say why we'd ever care about the
ordering of the (independent) writes to the individual variables.

If somebody can make up a causal chain, things differ. But as long as
all the CPU's are just doing locally ordered writes, I don't think we
need to care about a global store ordering.

              Linus
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help