[PATCH 85/91] i8k: Tell gcc that *regs gets clobbered

From: Willy Tarreau
Date: Sun Feb 05 2012 - 17:33:46 EST

2.6.27-longterm review patch. If anyone has any objections, please let us know.


commit 6b4e81db2552bad04100e7d5ddeed7e848f53b48 upstream.

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

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@xxxxxxxxx>
Cc: Andi Kleen <andi@xxxxxxxxxxxxxx>
Cc: Andreas Schwab <schwab@xxxxxxxxxxxxxx>
Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx>
drivers/char/i8k.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)

Index: longterm-2.6.27/drivers/char/i8k.c
--- longterm-2.6.27.orig/drivers/char/i8k.c 2012-02-05 22:34:32.409914870 +0100
+++ longterm-2.6.27/drivers/char/i8k.c 2012-02-05 22:34:47.002916726 +0100
@@ -141,7 +141,7 @@
"shrl $8,%%eax\n\t"
"andl $1,%%eax\n"
- :"=a"(rc)
+ :"=a"(rc), "+m" (*regs)
: "a"(regs)
: "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");
@@ -166,7 +166,8 @@
"movl %%edx,0(%%eax)\n\t"
"shrl $8,%%eax\n\t"
- "andl $1,%%eax\n":"=a"(rc)
+ "andl $1,%%eax\n"
+ :"=a"(rc), "+m" (*regs)
: "a"(regs)
: "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/