diff options
author | Christophe Leroy <christophe.leroy@c-s.fr> | 2016-03-07 18:44:37 +0100 |
---|---|---|
committer | Scott Wood <oss@buserror.net> | 2016-03-09 17:44:18 +0100 |
commit | 7e393220b6e1ecfa5520d1b2ca31150b7588f458 (patch) | |
tree | dcea05372297033d1327befd4cfa60dfb24141fb /arch/powerpc/lib/checksum_64.S | |
parent | powerpc/fsl-lbc: Modify suspend/resume entry sequence (diff) | |
download | linux-7e393220b6e1ecfa5520d1b2ca31150b7588f458.tar.xz linux-7e393220b6e1ecfa5520d1b2ca31150b7588f458.zip |
powerpc: optimise csum_partial() call when len is constant
csum_partial is often called for small fixed length packets
for which it is suboptimal to use the generic csum_partial()
function.
For instance, in my configuration, I got:
* One place calling it with constant len 4
* Seven places calling it with constant len 8
* Three places calling it with constant len 14
* One place calling it with constant len 20
* One place calling it with constant len 24
* One place calling it with constant len 32
This patch renames csum_partial() to __csum_partial() and
implements csum_partial() as a wrapper inline function which
* uses csum_add() for small 16bits multiple constant length
* uses ip_fast_csum() for other 32bits multiple constant
* uses __csum_partial() in all other cases
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Scott Wood <oss@buserror.net>
Diffstat (limited to 'arch/powerpc/lib/checksum_64.S')
-rw-r--r-- | arch/powerpc/lib/checksum_64.S | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/powerpc/lib/checksum_64.S b/arch/powerpc/lib/checksum_64.S index f53f4abb9282..8e6e51016cc5 100644 --- a/arch/powerpc/lib/checksum_64.S +++ b/arch/powerpc/lib/checksum_64.S @@ -21,9 +21,9 @@ * Computes the checksum of a memory block at buff, length len, * and adds in "sum" (32-bit). * - * csum_partial(r3=buff, r4=len, r5=sum) + * __csum_partial(r3=buff, r4=len, r5=sum) */ -_GLOBAL(csum_partial) +_GLOBAL(__csum_partial) addic r0,r5,0 /* clear carry */ srdi. r6,r4,3 /* less than 8 bytes? */ |