aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2006-02-11 13:30:41 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2006-03-20 04:12:20 -0500
commit0d4bc95b9c205a7374afbe93b38d9c2757a45862 (patch)
treee43b03a266da9786355941246b77f30058e7058d
parente92b92571c85dfa1cdc56e88566134c51ae1d12b (diff)
[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: David S. Miller <davem@davemloft.net>
-rw-r--r--arch/sparc64/lib/NGcopy_to_user.S2
-rw-r--r--arch/sparc64/lib/NGmemcpy.S10
2 files changed, 8 insertions, 4 deletions
diff --git a/arch/sparc64/lib/NGcopy_to_user.S b/arch/sparc64/lib/NGcopy_to_user.S
index 4a12395b4502..34112d5054ef 100644
--- a/arch/sparc64/lib/NGcopy_to_user.S
+++ b/arch/sparc64/lib/NGcopy_to_user.S
@@ -37,4 +37,4 @@
37 nop 37 nop
38#endif 38#endif
39 39
40#include "U3memcpy.S" 40#include "NGmemcpy.S"
diff --git a/arch/sparc64/lib/NGmemcpy.S b/arch/sparc64/lib/NGmemcpy.S
index a39aa3bd4345..8e522b3dc095 100644
--- a/arch/sparc64/lib/NGmemcpy.S
+++ b/arch/sparc64/lib/NGmemcpy.S
@@ -5,11 +5,15 @@
5 5
6#ifdef __KERNEL__ 6#ifdef __KERNEL__
7#include <asm/asi.h> 7#include <asm/asi.h>
8#include <asm/thread_info.h>
8#define GLOBAL_SPARE %g7 9#define GLOBAL_SPARE %g7
9#define RESTORE_ASI wr %g0, ASI_AIUS, %asi 10#define RESTORE_ASI(TMP) \
11 ldub [%g6 + TI_CURRENT_DS], TMP; \
12 wr TMP, 0x0, %asi;
10#else 13#else
11#define GLOBAL_SPARE %g5 14#define GLOBAL_SPARE %g5
12#define RESTORE_ASI 15#define RESTORE_ASI(TMP) \
16 wr %g0, ASI_PNF, %asi
13#endif 17#endif
14 18
15#ifndef STORE_ASI 19#ifndef STORE_ASI
@@ -246,7 +250,7 @@ FUNC_NAME: /* %o0=dst, %o1=src, %o2=len */
246 /* %o2 contains any final bytes still needed to be copied 250 /* %o2 contains any final bytes still needed to be copied
247 * over. If anything is left, we copy it one byte at a time. 251 * over. If anything is left, we copy it one byte at a time.
248 */ 252 */
249 RESTORE_ASI 253 RESTORE_ASI(%o3)
250 brz,pt %o2, 85f 254 brz,pt %o2, 85f
251 sub %o0, %o1, %o3 255 sub %o0, %o1, %o3
252 ba,a,pt %XCC, 90f 256 ba,a,pt %XCC, 90f