On Tue, Jan 19, 2021 at 09:39:00AM -0800, Andy Lutomirski wrote: > The default kernel_fpu_begin() doesn't work on systems that support XMM but > haven't yet enabled CR4.OSFXSR. This causes crashes when _mmx_memcpy() is > called too early because LDMXCSR generates #UD when the aforementioned bit > is clear. > > Fix it by using kernel_fpu_begin_mask(KFPU_387) explicitly. > > Fixes: 7ad816762f9b ("x86/fpu: Reset MXCSR to default in kernel_fpu_begin()") > Reported-by: Krzysztof Mazur <krzys...@podlesie.net> > Signed-off-by: Andy Lutomirski <l...@kernel.org>
Cc: <sta...@vger.kernel.org> I guess. > --- > arch/x86/lib/mmx_32.c | 20 +++++++++++++++----- > 1 file changed, 15 insertions(+), 5 deletions(-) > > diff --git a/arch/x86/lib/mmx_32.c b/arch/x86/lib/mmx_32.c > index 4321fa02e18d..2a6ad7aa148a 100644 > --- a/arch/x86/lib/mmx_32.c > +++ b/arch/x86/lib/mmx_32.c > @@ -26,6 +26,16 @@ > #include <asm/fpu/api.h> > #include <asm/asm.h> > > +/* > + * For MMX, we use KFPU_387. MMX instructions are not affected by MXCSR, > + * but both AMD and Intel documentation states that even integer MMX > + * operations will result in #MF if an exception is pending in FCW. > + * > + * We don't need EMMS afterwards because, after we call kernel_fpu_end(), > + * any subsequent user of the 387 stack will reinitialize it using > + * KFPU_387. Please use passive voice and convert the "we" to something impersonal. For example: "Use KFPU_387 for MMX. MMX instructions are not affected by MXCSR, but both AMD and Intel documentation states that even integer MMX operations will result in #MF if an exception is pending in FCW. EMMS afterwards is not needed because, after kernel_fpu_end(), any subsequent user of the 387 stack will reinitialize it using KFPU_387." Voila, de-we-fied! :-) -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette