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
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