aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc64/lib/NGcopy_from_user.S
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2007-10-02 01:03:09 -0700
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-02 01:03:09 -0700
commit25e5566ed38650f7990041fcd20571d6ddd2a040 (patch)
tree26d5bf006a6945930102fa01ad0edcd479b39bbf /arch/sparc64/lib/NGcopy_from_user.S
parent8cc8c28a9acdceda0e60519167a052cc3408c5c3 (diff)
downloadkernel_samsung_tuna-25e5566ed38650f7990041fcd20571d6ddd2a040.zip
kernel_samsung_tuna-25e5566ed38650f7990041fcd20571d6ddd2a040.tar.gz
kernel_samsung_tuna-25e5566ed38650f7990041fcd20571d6ddd2a040.tar.bz2
[SPARC64]: Fix missing load-twin usage in Niagara-1 memcpy.
For the case where the source is not aligned modulo 8 we don't use load-twins to suck the data in and this kills performance since normal loads allocate in the L1 cache (unlike load-twin) and thus big memcpys swipe the entire L1 D-cache. We need to allocate a register window to implement this properly, but that actually simplifies a lot of things as a nice side-effect. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/lib/NGcopy_from_user.S')
-rw-r--r--arch/sparc64/lib/NGcopy_from_user.S8
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/sparc64/lib/NGcopy_from_user.S b/arch/sparc64/lib/NGcopy_from_user.S
index 2d93456..e7f433f 100644
--- a/arch/sparc64/lib/NGcopy_from_user.S
+++ b/arch/sparc64/lib/NGcopy_from_user.S
@@ -1,6 +1,6 @@
/* NGcopy_from_user.S: Niagara optimized copy from userspace.
*
- * Copyright (C) 2006 David S. Miller (davem@davemloft.net)
+ * Copyright (C) 2006, 2007 David S. Miller (davem@davemloft.net)
*/
#define EX_LD(x) \
@@ -8,8 +8,8 @@
.section .fixup; \
.align 4; \
99: wr %g0, ASI_AIUS, %asi;\
- retl; \
- mov 1, %o0; \
+ ret; \
+ restore %g0, 1, %o0; \
.section __ex_table,"a";\
.align 4; \
.word 98b, 99b; \
@@ -24,7 +24,7 @@
#define LOAD(type,addr,dest) type##a [addr] ASI_AIUS, dest
#define LOAD_TWIN(addr_reg,dest0,dest1) \
ldda [addr_reg] ASI_BLK_INIT_QUAD_LDD_AIUS, dest0
-#define EX_RETVAL(x) 0
+#define EX_RETVAL(x) %g0
#ifdef __KERNEL__
#define PREAMBLE \