Re: [tip:x86/urgent] x86/fpu: Set the xcomp_bv when we fake up a XSAVES area

From: Yu-cheng Yu
Date: Mon Jan 23 2017 - 16:01:14 EST


On Mon, Jan 23, 2017 at 09:23:06AM -0800, Dave Hansen wrote:
> On 01/23/2017 08:55 AM, Yu-cheng Yu wrote:
> >> The best fix here would be not to paper over the issue in the copy
> >> function but find where it got clobbered, or where some initialization
> >> code failed to set it.
> >
> > Someone else reported different issues from the same bug and a different
> > patch was just tested OK this morning. I think that adding xfeatures bits
> > to xcomp_bv should have been done in fpstate_init().
>
> Right. So where did it get cleared out?

It is not set until a task triggers XSAVES. We did not set it in fpstate_init()
because there is no valid data at the time. The problem happens when Linux
copies data to the XSAVES area, like we see here; the kernel is not expected
to change XSAVES format (xcomp_bv) but xcomp_bv is still blank (except bit 63).

Because XSAVES format is not changed after boot time and xcomp_bv does not affect
INIT optimization, why don't we fix the problem in fpstate_init()?

Yu-cheng