• M
    MIPS: strnlen_user.S: Fix a CPU_DADDI_WORKAROUNDS regression · c4fca4fd
    Maciej W. Rozycki 提交于
    Correct a regression introduced with 8453eebd [MIPS: Fix strnlen_user()
    return value in case of overlong strings.] causing assembler warnings
    and broken code generated in __strnlen_kernel_nocheck_asm:
    
    arch/mips/lib/strnlen_user.S: Assembler messages:
    arch/mips/lib/strnlen_user.S:64: Warning: Macro instruction expanded into multiple instructions in a branch delay slot
    
    with the CPU_DADDI_WORKAROUNDS option set, resulting in the function
    looping indefinitely upon mounting NFS root.
    
    Use conditional assembly to avoid a microMIPS code size regression.
    Using $at unconditionally would cause such a regression as there are no
    16-bit instruction encodings available for ALU operations using this
    register.  Using $v1 unconditionally would produce short microMIPS
    encodings, but would prevent this register from being used across calls
    to this function.
    
    The extra LI operation introduced is free, replacing a NOP originally
    scheduled into the delay slot of the branch that follows.
    Signed-off-by: NMaciej W. Rozycki <macro@linux-mips.org>
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/10205/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
    c4fca4fd
strnlen_user.S 1.8 KB