• Cyril Bur's avatar
    powerpc: Always restore FPU/VEC/VSX if hardware transactional memory in use · 613036d9
    Cyril Bur authored
    commit dc16b553 upstream.
    
    Comment from arch/powerpc/kernel/process.c:967:
     If userspace is inside a transaction (whether active or
     suspended) and FP/VMX/VSX instructions have ever been enabled
     inside that transaction, then we have to keep them enabled
     and keep the FP/VMX/VSX state loaded while ever the transaction
     continues.  The reason is that if we didn't, and subsequently
     got a FP/VMX/VSX unavailable interrupt inside a transaction,
     we don't know whether it's the same transaction, and thus we
     don't know which of the checkpointed state and the ransactional
     state to use.
    
    restore_math() restore_fp() and restore_altivec() currently may not
    restore the registers. It doesn't appear that this is more serious
    than a performance penalty. If the math registers aren't restored the
    userspace thread will still be run with the facility disabled.
    Userspace will not be able to read invalid values. On the first access
    it will take an facility unavailable exception and the kernel will
    detected an active transaction, at which point it will abort the
    transaction. There is the possibility for a pathological case
    preventing any progress by transactions, however, transactions
    are never guaranteed to make progress.
    
    Fixes: 70fe3d98 ("powerpc: Restore FPU/VEC/VSX if previously used")
    Signed-off-by: default avatarCyril Bur <cyrilbur@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    613036d9
process.c 49.3 KB