Re: gcc 4.5.1 / as 2.20.51.0.11 miscompiling drivers/char/i8k.c?

From: Jeff Law
Date: Mon Nov 15 2010 - 13:43:51 EST


On 11/07/10 15:41, Andreas Schwab wrote:
Andi Kleen<andi@xxxxxxxxxxxxxx> writes:

Jim<jim876@xxxxxxxxx> writes:

After upgrading my Dell laptop, both OS+kernel the i8k interface was giving
nonsensical output. As it turned out it's not the kernel but compiler
upgrade which broke this.

Guys at Archlinux have found the underlying cause (but don't seem to have
submitted a patch yet):
https://bbs.archlinux.org/viewtopic.php?pid=780692#p780692
gcc seems to optimize the assembly statements away.

And indeed, applying this patch makes the i8k interface work again,
i.e. replacing the asm(..) construct by asm volatile(..)
The compiler really should not optimize the asm away, because
it has both input and output arguments which are later used.
"asm volatile" normally just means "don't move significantly"
The asm fails to mention that it modifies *regs.
But there's a memory clobber, that should be sufficient to indicate *regs is modified.

jeff

--
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/