• Brian Gerst's avatar
    x86-64, fpu: Disable preemption when using TS_USEDFPU · a4d4fbc7
    Brian Gerst authored
    Consolidates code and fixes the below race for 64-bit.
    
    commit 9fa2f37bfeb798728241cc4a19578ce6e4258f25
    Author: torvalds <torvalds>
    Date:   Tue Sep 2 07:37:25 2003 +0000
    
        Be a lot more careful about TS_USEDFPU and preemption
    
        We had some races where we testecd (or set) TS_USEDFPU together
        with sequences that depended on the setting (like clearing or
        setting the TS flag in %cr0) and we could be preempted in between,
        which screws up the FPU state, since preemption will itself change
        USEDFPU and the TS flag.
    
        This makes it a lot more explicit: the "internal" low-level FPU
        functions ("__xxxx_fpu()") all require preemption to be disabled,
        and the exported "real" functions will make sure that is the case.
    
        One case - in __switch_to() - was switched to the non-preempt-safe
        internal version, since the scheduler itself has already disabled
        preemption.
    
        BKrev: 3f5448b5WRiQuyzAlbajs3qoQjSobw
    Signed-off-by: default avatarBrian Gerst <brgerst@gmail.com>
    Acked-by: default avatarPekka Enberg <penberg@kernel.org>
    Cc: Suresh Siddha <suresh.b.siddha@intel.com>
    LKML-Reference: <1283563039-3466-6-git-send-email-brgerst@gmail.com>
    Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
    a4d4fbc7
i387.h 11.6 KB