• Linus Torvalds's avatar
    i387: make irq_fpu_usable() tests more robust · 5b1cbac3
    Linus Torvalds authored
    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: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    5b1cbac3
i387.h 11.9 KB