Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935209AbXHOS5x (ORCPT ); Wed, 15 Aug 2007 14:57:53 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S933399AbXHOS5b (ORCPT ); Wed, 15 Aug 2007 14:57:31 -0400 Received: from e1.ny.us.ibm.com ([32.97.182.141]:57105 "EHLO e1.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933392AbXHOS52 (ORCPT ); Wed, 15 Aug 2007 14:57:28 -0400 Date: Wed, 15 Aug 2007 11:57:24 -0700 From: "Paul E. McKenney" To: Segher Boessenkool Cc: horms@verge.net.au, Stefan Richter , Satyam Sharma , Linux Kernel Mailing List , rpjday@mindspring.com, netdev@vger.kernel.org, ak@suse.de, cfriesen@nortel.com, Heiko Carstens , jesper.juhl@gmail.com, linux-arch@vger.kernel.org, Andrew Morton , zlynx@acm.org, clameter@sgi.com, schwidefsky@de.ibm.com, Chris Snook , Herbert Xu , davem@davemloft.net, Linus Torvalds , wensong@linux-vs.org, wjiang@resilience.com Subject: Re: [PATCH 0/24] make atomic_read() behave consistently across all architectures Message-ID: <20070815185724.GH9645@linux.vnet.ibm.com> Reply-To: paulmck@linux.vnet.ibm.com References: <46C2350A.1010807@redhat.com> <20070815081841.GA16551@osiris.boeblingen.de.ibm.com> <46C30540.2070603@s5r6.in-berlin.de> <20070815145207.GA23106@gondor.apana.org.au> <46C3253F.5090707@s5r6.in-berlin.de> <20070815162722.GD9645@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.13 (2006-08-11) Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1616 Lines: 38 On Wed, Aug 15, 2007 at 08:31:25PM +0200, Segher Boessenkool wrote: > >>How does the compiler know that msleep() has got barrier()s? > > > >Because msleep_interruptible() is in a separate compilation unit, > >the compiler has to assume that it might modify any arbitrary global. > > No; compilation units have nothing to do with it, GCC can optimise > across compilation unit boundaries just fine, if you tell it to > compile more than one compilation unit at once. Last I checked, the Linux kernel build system did compile each .c file as a separate compilation unit. > What you probably mean is that the compiler has to assume any code > it cannot currently see can do anything (insofar as allowed by the > relevant standards etc.) Indeed. > >In many cases, the compiler also has to assume that > >msleep_interruptible() > >might call back into a function in the current compilation unit, thus > >possibly modifying global static variables. > > It most often is smart enough to see what compilation-unit-local > variables might be modified that way, though :-) Yep. For example, if it knows the current value of a given such local variable, and if all code paths that would change some other variable cannot be reached given that current value of the first variable. At least given that gcc doesn't know about multiple threads of execution! Thanx, Paul - 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/