Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752635AbcCJPAG (ORCPT ); Thu, 10 Mar 2016 10:00:06 -0500 Received: from mail.skyhub.de ([78.46.96.112]:33330 "EHLO mail.skyhub.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752211AbcCJO76 (ORCPT ); Thu, 10 Mar 2016 09:59:58 -0500 Date: Thu, 10 Mar 2016 15:59:40 +0100 From: Borislav Petkov To: Andy Shevchenko Cc: Ingo Molnar , "linux-kernel@vger.kernel.org" , "x86@kernel.org" , Andy Lutomirski , Fenghua Yu , Linus Torvalds , "H. Peter Anvin" , Thomas Gleixner , Andrew Morton , Dave Hansen , Oleg Nesterov , "Yu, Yu-cheng" Subject: Re: Got FPU related warning on Intel Quark during boot Message-ID: <20160310145940.GB26708@pd.tnic> References: <20160310111935.GB13102@gmail.com> <20160310125610.GA26708@pd.tnic> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1770 Lines: 70 On Thu, Mar 10, 2016 at 03:31:43PM +0200, Andy Shevchenko wrote: > Looks like it lacks that one. > > # grep -i fxsr /proc/cpuinfo; echo $? > 1 Ok, so looking at where the warning comes from: [ 14.714533] WARNING: CPU: 0 PID: 823 at arch/x86/include/asm/fpu/internal.h:163 fpu__clear+0x8c/0x160 static inline void copy_kernel_to_fxregs(struct fxregs_state *fx) { int err; if (config_enabled(CONFIG_X86_32)) { err = check_insn(fxrstor %[fx], "=m" (*fx), [fx] "m" (*fx)); ^^^^^^^^^^^^^^^^^ } else { ... /* Copying from a kernel buffer to FPU registers should never fail: */ WARN_ON_FPU(err); and the stacktrace is pretty clear: flush_thread |-> fpu__clear(&tsk->thread.fpu); |-> we are eager by default here: if (!use_eager_fpu() || !static_cpu_has(X86_FEATURE_FPU)) { /* FPU state will be reallocated lazily at the first use. */ fpu__drop(fpu); } else { --> we're in that branch. copy_init_fpstate_to_fpregs(); |-> copy_kernel_to_fxregs() I think we should use FRSTOR on quark, i.e., copy_kernel_to_fregs(). Does this untested wild guess even work? --- diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c index dea8e76d60c6..bbafe5e8a1a6 100644 --- a/arch/x86/kernel/fpu/core.c +++ b/arch/x86/kernel/fpu/core.c @@ -474,8 +474,11 @@ static inline void copy_init_fpstate_to_fpregs(void) { 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); + } /* -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply.