[PATCH 2/3] MIPS: __strncpy_from_user_asm CPU_DADDI_WORKAROUNDS bug fix

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This corrects assembler warnings and broken code generated in 
__strncpy_from_user_asm:

arch/mips/lib/strncpy_user.S: Assembler messages:
arch/mips/lib/strncpy_user.S:47: Warning: Macro instruction expanded into 
multiple instructions in a branch delay slot

with the CPU_DADDI_WORKAROUNDS option set.  The function schedules delay 
slots manually where there is really no need to as GAS is happy to do it 
all itself, so undo it all and remove `.set noreorder'.

Signed-off-by: Maciej W. Rozycki <macro@xxxxxxxxxxxxxx>
---
linux-mips-strncpy-user-nodaddi-fix.patch
Index: linux-20140329-4maxp64/arch/mips/lib/strncpy_user.S
===================================================================
--- linux-20140329-4maxp64.orig/arch/mips/lib/strncpy_user.S
+++ linux-20140329-4maxp64/arch/mips/lib/strncpy_user.S
@@ -34,27 +34,26 @@ LEAF(__strncpy_from_user_asm)
 	bnez		v0, .Lfault
 
 FEXPORT(__strncpy_from_user_nocheck_asm)
-	.set		noreorder
 	move		t0, zero
 	move		v1, a1
 1:	EX(lbu, v0, (v1), .Lfault)
 	PTR_ADDIU	v1, 1
 	R10KCBARRIER(0(ra))
+	sb		v0, (a0)
 	beqz		v0, 2f
-	 sb		v0, (a0)
 	PTR_ADDIU	t0, 1
+	PTR_ADDIU	a0, 1
 	bne		t0, a2, 1b
-	 PTR_ADDIU	a0, 1
 2:	PTR_ADDU	v0, a1, t0
 	xor		v0, a1
 	bltz		v0, .Lfault
-	 nop
+	move		v0, t0
 	jr		ra			# return n
-	 move		v0, t0
 	END(__strncpy_from_user_asm)
 
-.Lfault: jr		ra
-	  li		v0, -EFAULT
+.Lfault:
+	li		v0, -EFAULT
+	jr		ra
 
 	.section	__ex_table,"a"
 	PTR		1b, .Lfault


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux