Patchwork [3/3] sparc32: Correct the return value of memcpy.

login
register
mail settings
Submitter David Miller
Date Oct. 19, 2011, 10:44 p.m.
Message ID <20111019.184425.145807140541223467.davem@davemloft.net>
Download mbox | patch
Permalink /patch/120705/
State Accepted
Delegated to: David Miller
Headers show

Comments

David Miller - Oct. 19, 2011, 10:44 p.m.
Properly return the original destination buffer pointer.

Signed-off-by: David S. Miller <davem@davemloft.net>
---
 arch/sparc/lib/memcpy.S |   22 +++++++---------------
 1 files changed, 7 insertions(+), 15 deletions(-)
oftedal - Oct. 20, 2011, 9:02 p.m.
On Wed, 19 Oct 2011, David Miller wrote:

> 
> Properly return the original destination buffer pointer.
> 
> Signed-off-by: David S. Miller <davem@davemloft.net>
>

Works great on my test systems. Thanks.

Tested-by: Kjetil Oftedal <oftedal@gmail.com> 
--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller - Oct. 20, 2011, 10:23 p.m.
From: Kjetil Oftedal <oftedal@gmail.com>
Date: Thu, 20 Oct 2011 23:02:14 +0200 (CEST)

> On Wed, 19 Oct 2011, David Miller wrote:
> 
>> 
>> Properly return the original destination buffer pointer.
>> 
>> Signed-off-by: David S. Miller <davem@davemloft.net>
>>
> 
> Works great on my test systems. Thanks.
> 
> Tested-by: Kjetil Oftedal <oftedal@gmail.com> 

Thanks for testing.
--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/arch/sparc/lib/memcpy.S b/arch/sparc/lib/memcpy.S
index 90a5988..4d8c497 100644
--- a/arch/sparc/lib/memcpy.S
+++ b/arch/sparc/lib/memcpy.S
@@ -13,14 +13,6 @@ 
 	.align	4;		\
 x:
 
-
-/* In kernel these functions don't return a value.
- * One should use macros in asm/string.h for that purpose.
- * We return 0, so that bugs are more apparent.
- */
-#define SETUP_RETL
-#define RETL_INSN	clr	%o0
-
 /* Both these macros have to start with exactly the same insn */
 #define MOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7) \
 	ldd	[%src + (offset) + 0x00], %t0; \
@@ -154,7 +146,7 @@  FUNC(__memmove)
 #endif
 FUNC(memmove)
 	cmp		%o0, %o1
-	SETUP_RETL
+	mov		%o0, %g7
 	bleu		9f
 	 sub		%o0, %o1, %o4
 
@@ -178,7 +170,7 @@  FUNC(memmove)
 	 sub		%o0, 1, %o0
 
 	retl
-	 RETL_INSN
+	 mov		%g7, %o0
 
 /* NOTE: This code is executed just for the cases,
          where %src (=%o1) & 3 is != 0.
@@ -212,7 +204,7 @@  FUNC(memmove)
 FUNC(memcpy)	/* %o0=dst %o1=src %o2=len */
 
 	sub		%o0, %o1, %o4
-	SETUP_RETL
+	mov		%o0, %g7
 9:
 	andcc		%o4, 3, %o5
 0:
@@ -308,7 +300,7 @@  FUNC(memcpy)	/* %o0=dst %o1=src %o2=len */
 	stb		%g2, [%o0]
 1:
 	retl
- 	 RETL_INSN
+	 mov		%g7, %o0
 
 82:	/* ldd_std */
 	MOVE_BIGALIGNCHUNK(o1, o0, 0x00, o2, o3, o4, o5, g2, g3, g4, g5)
@@ -373,7 +365,7 @@  FUNC(memcpy)	/* %o0=dst %o1=src %o2=len */
 	stb		%g2, [%o0]
 1:
 	retl
- 	 RETL_INSN
+	 mov		%g7, %o0
 
 86:	/* non_aligned */
 	cmp		%o2, 6
@@ -498,7 +490,7 @@  FUNC(memcpy)	/* %o0=dst %o1=src %o2=len */
 	stb		%g2, [%i0 + 4]
 1:
 	ret
-	 restore	%g0, %g0, %o0
+	 restore	%g7, %g0, %o0
 
 88:	/* short_end */
 
@@ -529,7 +521,7 @@  FUNC(memcpy)	/* %o0=dst %o1=src %o2=len */
 	stb		%g2, [%o0]
 1:
 	retl
- 	 RETL_INSN
+	 mov		%g7, %o0
 
 90:	/* short_aligned_end */
 	bne		88b