]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
i387: make irq_fpu_usable() tests more robust
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 13 Feb 2012 21:56:14 +0000 (13:56 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 27 Feb 2012 18:25:53 +0000 (10:25 -0800)
commit42f2560ed6e9b040ef64e18a5030bf2d2cb05d7f
treeac1dafcd5db18c6236306df45e9cfb0cb29a2344
parent4733009df6d45db10f1f7551e65147576f224a06
i387: make irq_fpu_usable() tests more robust

commit 5b1cbac37798805c1fee18c8cebe5c0a13975b17 upstream.

Some code - especially the crypto layer - wants to use the x86
FP/MMX/AVX register set in what may be interrupt (typically softirq)
context.

That *can* be ok, but the tests for when it was ok were somewhat
suspect.  We cannot touch the thread-specific status bits either, so
we'd better check that we're not going to try to save FP state or
anything like that.

Now, it may be that the TS bit is always cleared *before* we set the
USEDFPU bit (and only set when we had already cleared the USEDFP
before), so the TS bit test may actually have been sufficient, but it
certainly was not obviously so.

So this explicitly verifies that we will not touch the TS_USEDFPU bit,
and adds a few related sanity-checks.  Because it seems that somehow
AES-NI is corrupting user FP state.  The cause is not clear, and this
patch doesn't fix it, but while debugging it I really wanted the code to
be more obviously correct and robust.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/include/asm/i387.h
arch/x86/kernel/traps.c