diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2007-10-02 01:03:09 -0700 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-02 01:03:09 -0700 |
commit | 25e5566ed38650f7990041fcd20571d6ddd2a040 (patch) | |
tree | 26d5bf006a6945930102fa01ad0edcd479b39bbf /arch/sparc64/lib/NGcopy_from_user.S | |
parent | 8cc8c28a9acdceda0e60519167a052cc3408c5c3 (diff) | |
download | kernel_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.S | 8 |
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 \ |