• Ingo Molnar's avatar
    x86/fpu: Optimize fpu__save() · 48c4717f
    Ingo Molnar authored
    So fpu__save() does this currently:
    
    		copy_fpregs_to_fpstate(fpu);
    		if (!use_eager_fpu())
    			fpregs_deactivate(fpu);
    
    ... which deactivates the FPU on lazy switching systems unconditionally.
    
    Both usecases of fpu__save() use this function to save the
    FPU state into a fpstate: fork()/clone() and math error signal handling.
    
    The unconditional disabling of FPU registers in the lazy switching
    case is probably a mistaken conversion of old FNSAVE code (that had
    to disable FPU registers).
    
    So speed up this code by only disabling FPU registers when absolutely
    necessary: when indicated by the copy_fpregs_to_fpstate() return
    code:
    
    		if (!copy_fpregs_to_fpstate(fpu))
    			fpregs_deactivate(fpu);
    Reviewed-by: default avatarBorislav Petkov <bp@alien8.de>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Fenghua Yu <fenghua.yu@intel.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    48c4717f
core.c 16.5 KB