Commit 0d4bc95b authored by David S. Miller's avatar David S. Miller
Browse files

[SPARC64]: Fix some Niagara memcpy() bugs.



We need to restore the %asi register properly.
For the kernel this means get_fs(), for user this
means ASI_PNF.

Also, NGcopy_to_user.S was including U3memcpy.S instead
of NGmemcpy.S, oops :-)

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e92b9257
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -37,4 +37,4 @@
	 nop
#endif

#include "U3memcpy.S"
#include "NGmemcpy.S"
+7 −3
Original line number Diff line number Diff line
@@ -5,11 +5,15 @@

#ifdef __KERNEL__
#include <asm/asi.h>
#include <asm/thread_info.h>
#define GLOBAL_SPARE	%g7
#define RESTORE_ASI	wr	%g0, ASI_AIUS, %asi
#define RESTORE_ASI(TMP)	\
	ldub	[%g6 + TI_CURRENT_DS], TMP;  \
	wr	TMP, 0x0, %asi;
#else
#define GLOBAL_SPARE	%g5
#define RESTORE_ASI
#define RESTORE_ASI(TMP)	\
	wr	%g0, ASI_PNF, %asi
#endif

#ifndef STORE_ASI
@@ -246,7 +250,7 @@ FUNC_NAME: /* %o0=dst, %o1=src, %o2=len */
	/* %o2 contains any final bytes still needed to be copied
	 * over. If anything is left, we copy it one byte at a time.
	 */
	RESTORE_ASI
	RESTORE_ASI(%o3)
	brz,pt		%o2, 85f
	 sub		%o0, %o1, %o3
	ba,a,pt		%XCC, 90f