Messages in this thread | | | Subject | Re: [RFC][PATCH 0/5] arch: atomic rework | From | Torvald Riegel <> | Date | Thu, 20 Feb 2014 19:53:41 +0100 |
| |
On Thu, 2014-02-20 at 10:32 -0800, Linus Torvalds wrote: > On Thu, Feb 20, 2014 at 10:11 AM, Paul E. McKenney > <paulmck@linux.vnet.ibm.com> wrote: > > > > You really need that "consume" to be "acquire". > > So I think we now all agree that that is what the standard is saying.
Huh?
The standard says that there are two separate things (among many more): mo_acquire and mo_consume. They both influence happens-before in different (and independent!) ways.
What Paul is saying is that *you* should have used *acquire* in that example.
> And I'm saying that that is wrong, that the standard is badly written, > and should be fixed. > > Because before the standard is fixed, I claim that "consume" is > unusable. We cannot trust it. End of story.
Then we still have all the rest. Let's just ignore mo_consume for now, and look at mo_acquire, I suggest.
> The fact that apparently gcc is currently buggy because it got the > dependency calculations *wrong* just reinforces my point.
Well, I'm pretty sure nobody actually worked on trying to preserve the dependencies at all. IOW, I suspect this fell through the cracks. We can ask the person working on this if you really want to know.
> The gcc bug Torvald pointed at is exactly because the current C > standard is illogical unreadable CRAP.
It's obviously logically consistent to the extent that it can be represented by a formal specification such as the one by the Cambridge group. Makes sense, or not?
> I can guarantee that what > happened is: > > - the compiler saw that the result of the read was used as the left > hand expression of the ternary "? :" operator > > - as a result, the compiler decided that there's no dependency > > - the compiler didn't think about the dependency that comes from the > result of the load *also* being used as the middle part of the ternary > expression, because it had optimized it away, despite the standard not > talking about that at all. > > - so the compiler never saw the dependency that the standard talks about > > BECAUSE THE STANDARD LANGUAGE IS PURE AND UTTER SHIT.
Please, be specific. Right now you're saying that all of it is useless. Which is arguable not true.
> My suggested language never had any of these problems, because *my* > suggested semantics are clear, logical, and don't have these kinds of > idiotic pit-falls.
Have you looked at and understood the semantics of the memory model (e.g. in the formalized form) with mo_consume and related being ignored (ie, just ignore 6.13 and 6.14 in n3132)?
| |