https://github.com/torvalds/linux
Revision 22d3243de86bc92d874abb7c5b185d5c47aba323 authored by Jim Bos on 15 November 2010, 20:22:37 UTC, committed by Linus Torvalds on 15 November 2010, 21:27:06 UTC
The fix in commit 6b4e81db2552 ("i8k: Tell gcc that *regs gets clobbered") to work around the gcc miscompiling i8k.c to add "+m (*regs)" caused register pressure problems and a build failure. Changing the 'asm' statement to 'asm volatile' instead should prevent that and works around the gcc bug as well, so we can remove the "+m". [ Background on the gcc bug: a memory clobber fails to mark the function the asm resides in as non-pure (aka "__attribute__((const))"), so if the function does nothing else that triggers the non-pure logic, gcc will think that that function has no side effects at all. As a result, callers will be mis-compiled. Adding the "+m" made gcc see that it's not a pure function, and so does "asm volatile". The problem was never really the need to mark "*regs" as changed, since the memory clobber did that part - the problem was just a bug in the gcc "pure" function analysis - Linus ] Signed-off-by: Jim Bos <jim876@xs4all.nl> Acked-by: Jakub Jelinek <jakub@redhat.com> Cc: Andi Kleen <andi@firstfloor.org> Cc: Andreas Schwab <schwab@linux-m68k.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 620751a
Tip revision: 22d3243de86bc92d874abb7c5b185d5c47aba323 authored by Jim Bos on 15 November 2010, 20:22:37 UTC
Fix gcc 4.5.1 miscompiling drivers/char/i8k.c (again)
Fix gcc 4.5.1 miscompiling drivers/char/i8k.c (again)
Tip revision: 22d3243
File | Mode | Size |
---|---|---|
basic | ||
coccinelle | ||
dtc | ||
genksyms | ||
kconfig | ||
ksymoops | ||
mod | ||
package | ||
rt-tester | ||
selinux | ||
tracing | ||
.gitignore | -rw-r--r-- | 75 bytes |
Kbuild.include | -rw-r--r-- | 9.5 KB |
Lindent | -rwxr-xr-x | 460 bytes |
Makefile | -rw-r--r-- | 984 bytes |
Makefile.build | -rw-r--r-- | 12.5 KB |
Makefile.clean | -rw-r--r-- | 3.2 KB |
Makefile.fwinst | -rw-r--r-- | 2.0 KB |
Makefile.headersinst | -rw-r--r-- | 3.2 KB |
Makefile.help | -rw-r--r-- | 68 bytes |
Makefile.host | -rw-r--r-- | 6.5 KB |
Makefile.lib | -rw-r--r-- | 9.0 KB |
Makefile.modbuiltin | -rw-r--r-- | 1.8 KB |
Makefile.modinst | -rw-r--r-- | 1.0 KB |
Makefile.modpost | -rw-r--r-- | 5.1 KB |
bin2c.c | -rw-r--r-- | 702 bytes |
bloat-o-meter | -rwxr-xr-x | 1.7 KB |
bootgraph.pl | -rw-r--r-- | 5.6 KB |
checkincludes.pl | -rwxr-xr-x | 1.8 KB |
checkkconfigsymbols.sh | -rwxr-xr-x | 1.8 KB |
checkpatch.pl | -rwxr-xr-x | 78.4 KB |
checkstack.pl | -rwxr-xr-x | 5.2 KB |
checksyscalls.sh | -rwxr-xr-x | 5.5 KB |
checkversion.pl | -rwxr-xr-x | 1.8 KB |
cleanfile | -rwxr-xr-x | 3.4 KB |
cleanpatch | -rwxr-xr-x | 5.0 KB |
coccicheck | -rwxr-xr-x | 2.9 KB |
config | -rwxr-xr-x | 2.6 KB |
conmakehash.c | -rw-r--r-- | 6.0 KB |
decodecode | -rwxr-xr-x | 1.9 KB |
diffconfig | -rwxr-xr-x | 3.6 KB |
export_report.pl | -rw-r--r-- | 4.2 KB |
extract-ikconfig | -rwxr-xr-x | 1.6 KB |
gcc-goto.sh | -rw-r--r-- | 223 bytes |
gcc-version.sh | -rw-r--r-- | 819 bytes |
gcc-x86_32-has-stack-protector.sh | -rw-r--r-- | 183 bytes |
gcc-x86_64-has-stack-protector.sh | -rw-r--r-- | 199 bytes |
gen_initramfs_list.sh | -rw-r--r-- | 7.1 KB |
get_maintainer.pl | -rwxr-xr-x | 52.8 KB |
gfp-translate | -rw-r--r-- | 1.5 KB |
headerdep.pl | -rwxr-xr-x | 3.5 KB |
headers.sh | -rwxr-xr-x | 512 bytes |
headers_check.pl | -rw-r--r-- | 2.7 KB |
headers_install.pl | -rw-r--r-- | 1.5 KB |
kallsyms.c | -rw-r--r-- | 15.2 KB |
kernel-doc | -rwxr-xr-x | 62.1 KB |
makelst | -rwxr-xr-x | 773 bytes |
markup_oops.pl | -rw-r--r-- | 8.1 KB |
mkcompile_h | -rwxr-xr-x | 2.5 KB |
mkmakefile | -rw-r--r-- | 1.1 KB |
mksysmap | -rw-r--r-- | 1.3 KB |
mkuboot.sh | -rwxr-xr-x | 379 bytes |
mkversion | -rw-r--r-- | 74 bytes |
module-common.lds | -rw-r--r-- | 210 bytes |
namespace.pl | -rwxr-xr-x | 13.0 KB |
patch-kernel | -rwxr-xr-x | 9.8 KB |
pnmtologo.c | -rw-r--r-- | 11.7 KB |
profile2linkerlist.pl | -rw-r--r-- | 375 bytes |
recordmcount.c | -rw-r--r-- | 10.7 KB |
recordmcount.h | -rw-r--r-- | 13.2 KB |
recordmcount.pl | -rwxr-xr-x | 17.3 KB |
setlocalversion | -rwxr-xr-x | 3.7 KB |
show_delta | -rwxr-xr-x | 3.0 KB |
tags.sh | -rwxr-xr-x | 4.6 KB |
unifdef.c | -rw-r--r-- | 31.6 KB |
ver_linux | -rwxr-xr-x | 3.1 KB |
Computing file changes ...