mirror of https://github.com/torvalds/linux.git
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: Maciej W. Rozycki <macro@linux-mips.org> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/10205/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org> |
||
|---|---|---|
| .. | ||
| Makefile | ||
| ashldi3.c | ||
| ashrdi3.c | ||
| bitops.c | ||
| cmpdi2.c | ||
| csum_partial.S | ||
| delay.c | ||
| dump_tlb.c | ||
| iomap-pci.c | ||
| iomap.c | ||
| libgcc.h | ||
| lshrdi3.c | ||
| memcpy.S | ||
| memset.S | ||
| mips-atomic.c | ||
| r3k_dump_tlb.c | ||
| strlen_user.S | ||
| strncpy_user.S | ||
| strnlen_user.S | ||
| ucmpdi2.c | ||
| uncached.c | ||