Messages in this thread Patch in this message | | | From | Ingo Molnar <> | Subject | [PATCH 143/208] x86/fpu: Simplify __save_fpu() | Date | Tue, 5 May 2015 19:50:35 +0200 |
| |
__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 <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: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@kernel.org> --- arch/x86/include/asm/fpu/xsave.h | 2 ++ arch/x86/kernel/fpu/core.c | 5 +---- 2 files changed, 3 insertions(+), 4 deletions(-)
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 43689660d71c..a0e2b65745da 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); } -- 2.1.0
| |