• Tom Lane's avatar
    Fix spinlock assembly code for MIPS so it works on MIPS r6. · 1323bfce
    Tom Lane authored
    Original MIPS-I processors didn't have the LL/SC instructions (nor any
    other userland synchronization primitive).  If the build toolchain
    targets that ISA variant by default, as an astonishingly large fraction
    of MIPS platforms still do, the assembler won't take LL/SC without
    coercion in the form of a ".set mips2" instruction.  But we issued that
    unconditionally, making it an ISA downgrade for chips later than MIPS2.
    That breaks things for the latest MIPS r6 ISA, which encodes these
    instructions differently.  Adjust the code so we don't change ISA level
    if it's >= 2.
    
    Note that this patch doesn't change what happens on an actual MIPS-I
    processor: either the kernel will emulate these instructions
    transparently, or you'll get a SIGILL failure.  That tradeoff seemed
    fine in 2002 when this code was added (cf 3cbe6b24), and it's even
    more so today when MIPS-I is basically extinct.  But let's add a
    comment about that.
    
    YunQiang Su (with cosmetic adjustments by me).  Back-patch to all
    supported branches.
    
    Discussion: https://postgr.es/m/15844-8f62fe7e163939b3@postgresql.org
    1323bfce
s_lock.h 28.9 KB