From: Ingo Molnar Date: Mon, 27 Apr 2015 07:23:43 +0000 (+0200) Subject: x86/fpu: Simplify __save_fpu() X-Git-Tag: firefly_0821_release~176^2~1627^2~109 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=72ee6f87adcb7b7bdb71cc81c22858811ee1a069;p=firefly-linux-kernel-4.4.55.git x86/fpu: Simplify __save_fpu() __save_fpu() has this pattern: if (unlikely(system_state == SYSTEM_BOOTING)) xsave_state_booting(&fpu->state.xsave); else xsave_state(&fpu->state.xsave); ... but it does not actually get called during system bootup. So remove the complication and always call xsave_state(). To make sure this assumption is correct, add a WARN_ONCE() debug check to xsave_state(). Reviewed-by: Borislav Petkov Cc: Andy Lutomirski Cc: Dave Hansen Cc: Fenghua Yu Cc: H. Peter Anvin Cc: Linus Torvalds Cc: Oleg Nesterov Cc: Peter Zijlstra Cc: Thomas Gleixner Signed-off-by: Ingo Molnar --- diff --git a/arch/x86/include/asm/fpu/xsave.h b/arch/x86/include/asm/fpu/xsave.h index a10e66582c1b..2f2ed322263f 100644 --- a/arch/x86/include/asm/fpu/xsave.h +++ b/arch/x86/include/asm/fpu/xsave.h @@ -133,6 +133,8 @@ static inline int xsave_state(struct xsave_struct *fx) u32 hmask = mask >> 32; int err = 0; + WARN_ON(system_state == SYSTEM_BOOTING); + /* * If xsaves is enabled, xsaves replaces xsaveopt because * it supports compact format and supervisor states in addition to diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c index a617aac1cf81..79a0b99d53b6 100644 --- a/arch/x86/kernel/fpu/core.c +++ b/arch/x86/kernel/fpu/core.c @@ -172,10 +172,7 @@ EXPORT_SYMBOL_GPL(irq_ts_restore); static void __save_fpu(struct fpu *fpu) { if (use_xsave()) { - if (unlikely(system_state == SYSTEM_BOOTING)) - xsave_state_booting(&fpu->state.xsave); - else - xsave_state(&fpu->state.xsave); + xsave_state(&fpu->state.xsave); } else { fpu_fxsave(fpu); }