• Paul Burton's avatar
    MIPS: cmpxchg: Unify R10000_LLSC_WAR & non-R10000_LLSC_WAR cases · 6b1e7629
    Paul Burton authored
    Prior to this patch the xchg & cmpxchg functions have duplicated code
    which is for all intents & purposes identical apart from use of a
    branch-likely instruction in the R10000_LLSC_WAR case & a regular branch
    instruction in the non-R10000_LLSC_WAR case.
    
    This patch removes the duplication, declaring a __scbeqz macro to select
    the branch instruction suitable for use when checking the result of an
    sc instruction & making use of it to unify the 2 cases.
    
    In __xchg_u{32,64}() this means writing the branch in asm, where it was
    previously being done in C as a do...while loop for the
    non-R10000_LLSC_WAR case. As this is a single instruction, and adds
    consistency with the R10000_LLSC_WAR cases & the cmpxchg() code, this
    seems worthwhile.
    Signed-off-by: default avatarPaul Burton <paul.burton@imgtec.com>
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/16348/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    6b1e7629
cmpxchg.h 5 KB