• Vincent Palatin's avatar
    x86, fpu: Avoid FPU lazy restore after suspend · 644c1541
    Vincent Palatin authored
    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.
    
    Cc: Duncan Laurie <dlaurie@chromium.org>
    Cc: Olof Johansson <olofj@chromium.org>
    Cc: <stable@kernel.org> v3.4+ # for 3.4 need to replace this_cpu_write by percpu_write
    Signed-off-by: default avatarVincent Palatin <vpalatin@chromium.org>
    Link: http://lkml.kernel.org/r/1354306532-1014-1-git-send-email-vpalatin@chromium.orgSigned-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
    644c1541
fpu-internal.h 15.5 KB