aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/i8k.c
diff options
context:
space:
mode:
authorJim Bos <jim876@xs4all.nl>2010-11-13 06:13:53 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2010-11-13 12:54:43 -0500
commit6b4e81db2552bad04100e7d5ddeed7e848f53b48 (patch)
tree7a4775df2a486914cd421dca6434f44ee8148383 /drivers/char/i8k.c
parented3aada1bf34c5a9e98af167f125f8a740fc726a (diff)
i8k: Tell gcc that *regs gets clobbered
More recent GCC caused the i8k driver to stop working, on Slackware compiler was upgraded from gcc-4.4.4 to gcc-4.5.1 after which it didn't work anymore, meaning the driver didn't load or gave total nonsensical output. As it turned out the asm(..) statement forgot to mention it modifies the *regs variable. Credits to Andi Kleen and Andreas Schwab for providing the fix. Signed-off-by: Jim Bos <jim876@xs4all.nl> Cc: Andi Kleen <andi@firstfloor.org> Cc: Andreas Schwab <schwab@linux-m68k.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/char/i8k.c')
-rw-r--r--drivers/char/i8k.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/char/i8k.c b/drivers/char/i8k.c
index 3bc0eef88717..f0863bec186f 100644
--- a/drivers/char/i8k.c
+++ b/drivers/char/i8k.c
@@ -142,7 +142,7 @@ static int i8k_smm(struct smm_regs *regs)
142 "lahf\n\t" 142 "lahf\n\t"
143 "shrl $8,%%eax\n\t" 143 "shrl $8,%%eax\n\t"
144 "andl $1,%%eax\n" 144 "andl $1,%%eax\n"
145 :"=a"(rc) 145 :"=a"(rc), "+m" (*regs)
146 : "a"(regs) 146 : "a"(regs)
147 : "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory"); 147 : "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");
148#else 148#else
@@ -167,7 +167,8 @@ static int i8k_smm(struct smm_regs *regs)
167 "movl %%edx,0(%%eax)\n\t" 167 "movl %%edx,0(%%eax)\n\t"
168 "lahf\n\t" 168 "lahf\n\t"
169 "shrl $8,%%eax\n\t" 169 "shrl $8,%%eax\n\t"
170 "andl $1,%%eax\n":"=a"(rc) 170 "andl $1,%%eax\n"
171 :"=a"(rc), "+m" (*regs)
171 : "a"(regs) 172 : "a"(regs)
172 : "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory"); 173 : "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");
173#endif 174#endif