summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorJiri Bohac <jbohac@suse.cz>2009-09-02 11:00:46 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2009-12-18 13:30:58 -0800
commit89af7ec4eabe69cfe47d3975668d43d94d24f6c9 (patch)
treeeeac2142417bfc458cf7d3f71c38a2d822f99841 /arch
parent96924acfccdb9b91c68cb649bbb5bab618dd002a (diff)
downloadlwn-89af7ec4eabe69cfe47d3975668d43d94d24f6c9.tar.gz
lwn-89af7ec4eabe69cfe47d3975668d43d94d24f6c9.zip
fix csum_ipv6_magic()
commit 5afe18d2f58812f3924edbd215464e5e3e8545e7 upstream. The 32-bit parameters (len and csum) of csum_ipv6_magic() are passed in 64-bit registers in2 and in4. The high order 32 bits of the registers were never cleared, and garbage was sometimes calculated into the checksum. Fix this by clearing the high order 32 bits of these registers. Signed-off-by: Jiri Bohac <jbohac@suse.cz> Signed-off-by: Tony Luck <tony.luck@intel.com> Cc: Dennis Schridde <devurandom@gmx.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/ia64/lib/ip_fast_csum.S8
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/ia64/lib/ip_fast_csum.S b/arch/ia64/lib/ip_fast_csum.S
index 1f86aeb2c948..620d9dc5220f 100644
--- a/arch/ia64/lib/ip_fast_csum.S
+++ b/arch/ia64/lib/ip_fast_csum.S
@@ -96,20 +96,22 @@ END(ip_fast_csum)
GLOBAL_ENTRY(csum_ipv6_magic)
ld4 r20=[in0],4
ld4 r21=[in1],4
- dep r15=in3,in2,32,16
+ zxt4 in2=in2
;;
ld4 r22=[in0],4
ld4 r23=[in1],4
- mux1 r15=r15,@rev
+ dep r15=in3,in2,32,16
;;
ld4 r24=[in0],4
ld4 r25=[in1],4
- shr.u r15=r15,16
+ mux1 r15=r15,@rev
add r16=r20,r21
add r17=r22,r23
+ zxt4 in4=in4
;;
ld4 r26=[in0],4
ld4 r27=[in1],4
+ shr.u r15=r15,16
add r18=r24,r25
add r8=r16,r17
;;