Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755453AbaBTSyT (ORCPT ); Thu, 20 Feb 2014 13:54:19 -0500 Received: from mx1.redhat.com ([209.132.183.28]:53425 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752497AbaBTSyP (ORCPT ); Thu, 20 Feb 2014 13:54:15 -0500 Subject: Re: [RFC][PATCH 0/5] arch: atomic rework From: Torvald Riegel To: Linus Torvalds Cc: Paul McKenney , Will Deacon , Peter Zijlstra , Ramana Radhakrishnan , David Howells , "linux-arch@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "akpm@linux-foundation.org" , "mingo@kernel.org" , "gcc@gcc.gnu.org" In-Reply-To: References: <1392740258.18779.7732.camel@triegel.csb> <1392752867.18779.8120.camel@triegel.csb> <20140220040102.GM4250@linux.vnet.ibm.com> <20140220083032.GN4250@linux.vnet.ibm.com> <20140220181116.GT4250@linux.vnet.ibm.com> Content-Type: text/plain; charset="UTF-8" Date: Thu, 20 Feb 2014 19:53:41 +0100 Message-ID: <1392922421.28840.36.camel@triegel.csb> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 2014-02-20 at 10:32 -0800, Linus Torvalds wrote: > On Thu, Feb 20, 2014 at 10:11 AM, Paul E. McKenney > 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)? -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/