Thread (274 messages) 274 messages, 15 authors, 2014-03-07

Re: [RFC][PATCH 0/5] arch: atomic rework

From: Linus Torvalds <torvalds@linux-foundation.org>
Date: 2014-02-18 17:44:51
Also in: lkml

On Tue, Feb 18, 2014 at 8:17 AM, Torvald Riegel [off-list ref] wrote:
quoted
  "Consume operation: no reads in the current thread dependent on the
value currently loaded can be reordered before this load"
I can't remember seeing that language in the standard (ie, C or C++).
Where is this from?
That's just for googling for explanations. I do have some old standard
draft, but that doesn't have any concise definitions anywhere that I
could find.
quoted
and it could make a compiler writer say that value speculation is
still valid, if you do it like this (with "ptr" being the atomic
variable):

  value = ptr->val;
I assume the load from ptr has mo_consume ordering?
Yes.
quoted
into

  tmp = ptr;
  value = speculated.value;
  if (unlikely(tmp != &speculated))
    value = tmp->value;

which is still bogus. The load of "ptr" does happen before the load of
"value = speculated->value" in the instruction stream, but it would
still result in the CPU possibly moving the value read before the
pointer read at least on ARM and power.
And surprise, in the C/C++ model the load from ptr is sequenced-before
the load from speculated, but there's no ordering constraint on the
reads-from relation for the value load if you use mo_consume on the ptr
load.  Thus, the transformed code has less ordering constraints than the
original code, and we arrive at the same outcome.
Ok, good.
The standard is clear on what's required.  I strongly suggest reading
the formalization of the memory model by Batty et al.
Can you point to it? Because I can find a draft standard, and it sure
as hell does *not* contain any clarity of the model. It has a *lot* of
verbiage, but it's pretty much impossible to actually understand, even
for somebody who really understands memory 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