lkml.org 
[lkml]   [2018]   [Jun]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 09/24] x86/fpu: Fix eager-FPU handling on legacy FPU machines
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Borislav Petkov <bp@alien8.de>

    commit 6e6867093de35141f0a76b66ac13f9f2e2c8e77a upstream.

    i486 derived cores like Intel Quark support only the very old,
    legacy x87 FPU (FSAVE/FRSTOR, CPUID bit FXSR is not set), and
    our FPU code wasn't handling the saving and restoring there
    properly in the 'eagerfpu' case.

    So after we made eagerfpu the default for all CPU types:

    58122bf1d856 x86/fpu: Default eagerfpu=on on all CPUs

    these old FPU designs broke. First, Andy Shevchenko reported a splat:

    WARNING: CPU: 0 PID: 823 at arch/x86/include/asm/fpu/internal.h:163 fpu__clear+0x8c/0x160

    which was us trying to execute FXRSTOR on those machines even though
    they don't support it.

    After taking care of that, Bryan O'Donoghue reported that a simple FPU
    test still failed because we weren't initializing the FPU state properly
    on those machines.

    Take care of all that.

    Reported-and-tested-by: Bryan O'Donoghue <pure.logic@nexus-software.ie>
    Reported-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: Fenghua Yu <fenghua.yu@intel.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Quentin Casasnovas <quentin.casasnovas@oracle.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Yu-cheng <yu-cheng.yu@intel.com>
    Link: http://lkml.kernel.org/r/20160311113206.GD4312@pd.tnic
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/x86/kernel/fpu/core.c | 4 +++-
    arch/x86/kernel/fpu/init.c | 2 +-
    2 files changed, 4 insertions(+), 2 deletions(-)

    --- a/arch/x86/kernel/fpu/core.c
    +++ b/arch/x86/kernel/fpu/core.c
    @@ -409,8 +409,10 @@ static inline void copy_init_fpstate_to_
    {
    if (use_xsave())
    copy_kernel_to_xregs(&init_fpstate.xsave, -1);
    - else
    + else if (static_cpu_has(X86_FEATURE_FXSR))
    copy_kernel_to_fxregs(&init_fpstate.fxsave);
    + else
    + copy_kernel_to_fregs(&init_fpstate.fsave);
    }

    /*
    --- a/arch/x86/kernel/fpu/init.c
    +++ b/arch/x86/kernel/fpu/init.c
    @@ -135,7 +135,7 @@ static void __init fpu__init_system_gene
    * Set up the legacy init FPU context. (xstate init might overwrite this
    * with a more modern format, if the CPU supports it.)
    */
    - fpstate_init_fxstate(&init_fpstate.fxsave);
    + fpstate_init(&init_fpstate);

    fpu__init_system_mxcsr();
    }

    \
     
     \ /
      Last update: 2018-06-14 16:16    [W:4.793 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site