• Ingo Molnar's avatar
    x86/fpu: Optimize fpu_copy() some more on lazy switching systems · b1652900
    Ingo Molnar authored
    The current fpu_copy() code on lazy switching CPUs always saves
    into the current fpstate and then copies it over into the child
    context:
    
    		preempt_disable();
    		if (!copy_fpregs_to_fpstate(src_fpu))
    			fpregs_deactivate(src_fpu);
    		preempt_enable();
    		memcpy(&dst_fpu->state, &src_fpu->state, xstate_size);
    
    That memcpy() can be avoided on all lazy switching setups except
    really old FNSAVE-only systems: change fpu_copy() to directly save
    into the child context, for both the lazy and the eager context
    switching case.
    
    Note that we still have to do a memcpy() back into the parent
    context in the FNSAVE case, but this won't be executed on the
    majority of x86 systems that got built in the last 10 years or so.
    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>
    b1652900
core.c 17.2 KB