Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752073AbbETCKQ (ORCPT ); Tue, 19 May 2015 22:10:16 -0400 Received: from mail-ie0-f175.google.com ([209.85.223.175]:35456 "EHLO mail-ie0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751619AbbETCKN (ORCPT ); Tue, 19 May 2015 22:10:13 -0400 MIME-Version: 1.0 In-Reply-To: References: <20150520005510.GA23559@linux.vnet.ibm.com> Date: Tue, 19 May 2015 19:10:12 -0700 X-Google-Sender-Auth: FUDNas7kgyuf2SuI07e_UYnICzA Message-ID: Subject: Re: Compilers and RCU readers: Once more unto the breach! From: Linus Torvalds To: Paul McKenney Cc: Linux Kernel Mailing List , c++std-parallel@accu.org, "linux-arch@vger.kernel.org" , "gcc@gcc.gnu.org" , p796231 , "mark.batty@cl.cam.ac.uk" , Peter Zijlstra , Will Deacon , Ramana Radhakrishnan , David Howells , Andrew Morton , Ingo Molnar , michaelw@ca.ibm.com Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1686 Lines: 36 On Tue, May 19, 2015 at 6:57 PM, Linus Torvalds wrote: > > - the "you can add/subtract integral values" still opens you up to > language lawyers claiming "(char *)ptr - (intptr_t)ptr" preserving the > dependency, which it clearly doesn't. But language-lawyering it does, > since all those operations (cast to pointer, cast to integer, > subtracting an integer) claim to be dependency-preserving operations. > > So I think you want to limit the logical operators to things that > don't mask off too many bits, and you should probably limit the > add/subtract operations some way (maybe specify that the integer value > you add/subtract cannot be related to the pointer). Actually, "not related" doesn't work. For some buddy allocator thing, you very much might want some of the bits to be related. So I think you're better off just saying that operations designed to drop significant bits break the dependency chain, and give things like "& 1" and "(char *)ptr-(uintptr_t)ptr" as examples of such. Making that just an extension of your existing "& 0" language would seem to be natural. Humans will understand, and compiler writers won't care. They will either depend on hardware semantics anyway (and argue that your language is tight enough that they don't need to do anything special) or they will turn the consume into an acquire (on platforms that have too weak hardware). Linus -- 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/