linux/arch
Suresh Siddha c9ac6a9e84 x86, cpuid: Add "volatile" to asm in native_cpuid()
commit 45a94d7cd4 upstream.

xsave_cntxt_init() does something like:

	cpuid(0xd, ..);	// find out what features FP/SSE/.. etc are supported

	xsetbv();	// enable the features known to OS

	cpuid(0xd, ..);	// find out the size of the context for features enabled

Depending on what features get enabled in xsetbv(), value of the
cpuid.eax=0xd.ecx=0.ebx changes correspondingly (representing the
size of the context that is enabled).

As we don't have volatile keyword for native_cpuid(), gcc 4.1.2
optimizes away the second cpuid and the kernel continues to use
the cpuid information obtained before xsetbv(), ultimately leading to kernel
crash on processors supporting more state than the legacy FP/SSE.

Add "volatile" for native_cpuid().

Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
LKML-Reference: <1261009542.2745.55.camel@sbs-t61.sc.intel.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-01-06 15:03:19 -08:00
..
alpha alpha: Fixup last users of irq_chip->typename 2009-11-30 22:51:31 -05:00
arm pxa/em-x270: fix usb hub power up/reset sequence 2009-12-18 14:04:06 -08:00
avr32 at91: at91sam9g45 family: identify several chip versions 2009-11-03 18:42:31 +01:00
blackfin Blackfin: fix SMP build error in start_thread() 2009-11-25 02:38:01 -05:00
cris const: constify remaining file_operations 2009-10-01 16:11:11 -07:00
frv frv: fix check on unsigned in do_signal() 2009-10-29 07:39:32 -07:00
h8300 h8300: Cleanup linker script using new linker script macros. 2009-09-24 17:16:22 -07:00
ia64 implement early_io{re,un}map for ia64 2009-12-18 14:06:02 -08:00
m32r m32r: fix arch/m32r/boot/compressed/Makefile 2009-11-09 09:00:50 +09:00
m68k tty: Mark generic_serial users as BROKEN 2009-10-30 14:43:12 -07:00
m68knommu m68knommu: fix rename of pt_regs offset defines breakage 2009-09-30 10:06:07 +10:00
microblaze microblaze: Clear sticky FSR register after saving it to func parametr 2009-10-05 11:37:47 +02:00
mips MIPS: RB532: Fix devices.c compilation. 2009-12-02 18:09:51 +00:00
mn10300 mn10300: fix kernel build failures when using gcc-4.x 2009-10-01 16:11:12 -07:00
parisc parisc: fix unwind with recent gcc versions 2009-11-30 08:20:24 -08:00
powerpc powerpc: Fix usage of 64-bit instruction in 32-bit altivec code 2009-12-18 14:04:35 -08:00
s390 s390: clear high-order bits of registers after sam64 2009-12-18 14:03:51 -08:00
score Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-next 2009-09-23 15:37:02 -07:00
sh sh: Fixup last users of irq_chip->typename 2009-11-18 10:50:22 +09:00
sparc sparc: Set UTS_MACHINE correctly. 2009-12-18 14:05:15 -08:00
um headers: remove sched.h from interrupt.h 2009-10-11 11:20:58 -07:00
x86 x86, cpuid: Add "volatile" to asm in native_cpuid() 2010-01-06 15:03:19 -08:00
xtensa headers: remove sched.h from interrupt.h 2009-10-11 11:20:58 -07:00
.gitignore
Kconfig oprofile: fix oprofile regression: select RING_BUFFER_ALLOW_SWAP 2009-09-17 15:53:42 -04:00