linux/arch
Vincent Palatin 1b9dd61a10 x86, fpu: Avoid FPU lazy restore after suspend
commit 644c154186 upstream.

When a cpu enters S3 state, the FPU state is lost.
After resuming for S3, if we try to lazy restore the FPU for a process running
on the same CPU, this will result in a corrupted FPU context.

Ensure that "fpu_owner_task" is properly invalided when (re-)initializing a CPU,
so nobody will try to lazy restore a state which doesn't exist in the hardware.

Tested with a 64-bit kernel on a 4-core Ivybridge CPU with eagerfpu=off,
by doing thousands of suspend/resume cycles with 4 processes doing FPU
operations running. Without the patch, a process is killed after a
few hundreds cycles by a SIGFPE.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
Cc: Duncan Laurie <dlaurie@chromium.org>
Cc: Olof Johansson <olofj@chromium.org>
Link: http://lkml.kernel.org/r/1354306532-1014-1-git-send-email-vpalatin@chromium.org
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-12-10 10:59:39 -08:00
..
alpha alpha: Add missing RCU idle APIs on idle loop 2012-10-13 05:38:54 +09:00
arm ARM: Kirkwood: Update PCI-E fixup 2012-12-10 10:59:39 -08:00
avr32 avr32: fix nop compile fails from system.h split up 2012-04-04 08:23:44 -07:00
blackfin blackfin: fix ifdef fustercluck in mach-bf538/boards/ezkit.c 2012-04-26 14:46:51 -04:00
c6x irq: Kill pointless irqd_to_hw export 2012-04-10 22:39:17 -06:00
cris cris: Add missing RCU idle APIs on idle loop 2012-10-13 05:38:54 +09:00
frv frv: Add missing RCU idle APIs on idle loop 2012-10-13 05:38:54 +09:00
h8300 h8300: Add missing RCU idle APIs on idle loop 2012-10-13 05:38:53 +09:00
hexagon hexagon: add missing cpu.h include 2012-04-23 12:57:24 -05:00
ia64 ia64: Add missing RCU idle APIs on idle loop 2012-10-13 05:38:53 +09:00
m32r m32r: Add missing RCU idle APIs on idle loop 2012-10-13 05:38:55 +09:00
m68k m68k: fix sigset_t accessor functions 2012-11-26 11:37:46 -08:00
microblaze microblaze: Do not select GENERIC_GPIO by default 2012-06-10 00:36:05 +09:00
mips mips,kgdb: fix recursive page fault with CONFIG_KPROBES 2012-10-21 09:27:57 -07:00
mn10300 mn10300: Add missing RCU idle APIs on idle loop 2012-10-13 05:38:54 +09:00
openrisc Disintegrate and delete asm/system.h 2012-03-28 15:58:21 -07:00
parisc PARISC: fix user-triggerable panic on parisc 2012-12-03 11:47:05 -08:00
powerpc powerpc/eeh: Lock module while handling EEH event 2012-12-03 11:47:23 -08:00
s390 s390/signal: set correct address space control 2012-11-26 11:38:01 -08:00
score score: Add missing RCU idle APIs on idle loop 2012-10-13 05:38:55 +09:00
sh sh: Fix up tracepoint build fallout from static key introduction. 2012-04-27 11:12:38 +09:30
sparc sparc64: not any error from do_sigaltstack() should fail rt_sigreturn() 2012-12-03 11:47:10 -08:00
tile arch/tile: avoid generating .eh_frame information in modules 2012-10-28 10:14:12 -07:00
um um: Implement a custom pte_same() function 2012-06-01 15:18:18 +08:00
unicore32 Merge branch 'for-linus' of git://git.linaro.org/people/mszyprowski/linux-dma-mapping 2012-04-04 17:13:43 -07:00
x86 x86, fpu: Avoid FPU lazy restore after suspend 2012-12-10 10:59:39 -08:00
xtensa xtensa: Add missing RCU idle APIs on idle loop 2012-10-13 05:38:54 +09:00
.gitignore
Kconfig Merge git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile 2012-03-29 14:49:45 -07:00