Re: [PATCH 0/24] make atomic_read() behave consistently across all architectures
From: Paul E. McKenney <hidden>
Date: 2007-08-16 02:22:51
Also in:
linux-arch, lkml
On Thu, Aug 16, 2007 at 03:23:28AM +0200, Segher Boessenkool wrote:
quoted
quoted
quoted
quoted
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.I have some patches to use -combine -fwhole-program for Linux. Highly experimental, you need a patched bleeding edge toolchain. If there's interest I'll clean it up and put it online. David Woodhouse had some similar patches about a year ago.Sounds exciting... ;-)Yeah, the breakage is *quite* spectacular :-)
I bet!!! ;-)
quoted
quoted
quoted
quoted
quoted
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.Or the most common thing: if neither the address of the translation- unit local variable nor the address of any function writing to that variable can "escape" from that translation unit, nothing outside the translation unit can write to the variable.But there is usually at least one externally callable function in a .c file.Of course, but often none of those will (indirectly) write a certain static variable.
But there has to be some path to the static functions, assuming that they are not dead code. Yes, there can be cases where the compiler knows enough about the state of the variables to rule out some of code paths to them, but I have no idea how often this happens in kernel code. Thanx, Paul