From: Borislav Petkov <bp@alien8.de>
To: Ingo Molnar <mingo@kernel.org>
Cc: Andy Lutomirski <luto@amacapital.net>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
X86 ML <x86@kernel.org>
Subject: Re: WARNING: CPU: 0 PID: 3031 at ./arch/x86/include/asm/fpu/internal.h:530 fpu__restore+0x90/0x130()
Date: Wed, 17 Feb 2016 10:29:11 +0100 [thread overview]
Message-ID: <20160217092911.GA2023@pd.tnic> (raw)
In-Reply-To: <20160217081646.GA32354@gmail.com>
On Wed, Feb 17, 2016 at 09:16:46AM +0100, Ingo Molnar wrote:
> So I'm wondering why this started triggering only now. Is this a pre-existing bug
> that somehow got triggered via:
>
> 58122bf1d856 x86/fpu: Default eagerfpu=on on all CPUs
>
> ?
Well, that's an interesting question. See, the thing is, I triggered
this only *once* by accident and I haven't seen it ever since.
The "reliable" "reproducer" I used to debug this was Andy's suggestion
to stick a schedule() in __fpu__restore_sig().
So the answer to that question is not easy.
BUT(!), regardless, the bug still needs to be fixed because my tracing
here
https://lkml.kernel.org/r/20160215191422.GB32716@pd.tnic
showed that getting preempted after setting
fpu->fpstate_active = 1;
leads to the WARN. Because - and please doublecheck me on that - when
we're in __switch_to() and the task which already has ->fpstate_active
set and it is the next task to which we're going to switch to, when it
enters switch_fpu_prepare(), it does:
fpu.preload = static_cpu_has(X86_FEATURE_FPU) &&
new_fpu->fpstate_active &&
^^^^^^^^^^^^^^^^^^^^^^^
so that fpu.preload is set now.
A bit later in that same function:
/* Don't change CR0.TS if we just switch! */
if (fpu.preload) {
new_fpu->counter++;
__fpregs_activate(new_fpu);
^^^^^^^^^^^^^^^^^
->fpregs_active gets set here and when the task returns to
__fpu__restore_sig(), fpu__restore() sets it again, leading to the WARN.
Mind you, this happens on 32-bit only because there we sigreturn with
irqs enabled. Look at the call trace.
> If yes then we need a plausible theory of how that never triggered on
> modern Intel CPUs that had eagerfpu enabled for years.
AFAICT, it triggers - and the window is very small at that - only on
32-bit. If at all.
> Or perhaps was it caused by one of the other changes in tip:x86/fpu:
>
> c6ab109f7e0e x86/fpu: Speed up lazy FPU restores slightly
> a20d7297045f x86/fpu: Fold fpu_copy() into fpu__copy()
> 5ed73f40735c x86/fpu: Fix FNSAVE usage in eagerfpu mode
> 4ecd16ec7059 x86/fpu: Fix math emulation in eager fpu mode
>
> ?
I can certainly try to test all those but I don't have a reliable
reproducer. The only thing I could do is check out each of those commits
and stick a schedule() in __fpu__restore_sig() and see what happens.
But if my analysis above is right, none of those would matter because of
the mechanism of how the warn happens...
--
Regards/Gruss,
Boris.
ECO tip #101: Trim your mails when you reply.
next prev parent reply other threads:[~2016-02-17 9:29 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-11 19:27 WARNING: CPU: 0 PID: 3031 at ./arch/x86/include/asm/fpu/internal.h:530 fpu__restore+0x90/0x130() Borislav Petkov
2016-02-11 23:47 ` Andy Lutomirski
2016-02-12 1:16 ` Andy Lutomirski
2016-02-12 17:00 ` Borislav Petkov
2016-02-15 19:14 ` Borislav Petkov
2016-02-16 2:25 ` Andy Lutomirski
2016-02-17 8:16 ` Ingo Molnar
2016-02-17 9:29 ` Borislav Petkov [this message]
2016-02-17 9:35 ` Ingo Molnar
2016-02-17 10:31 ` Borislav Petkov
2016-02-17 11:06 ` Ingo Molnar
2016-02-17 11:41 ` Borislav Petkov
2016-02-17 17:52 ` Andy Lutomirski
2016-02-15 19:05 ` Borislav Petkov
2016-02-12 11:17 ` Borislav Petkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160217092911.GA2023@pd.tnic \
--to=bp@alien8.de \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=mingo@kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.