* csum_ipv6_magic()
@ 2001-10-22 6:16 Machida Hiroyuki
2001-10-22 7:55 ` csum_ipv6_magic() Alan Cox
0 siblings, 1 reply; 8+ messages in thread
From: Machida Hiroyuki @ 2001-10-22 6:16 UTC (permalink / raw)
To: Ralf Baechle; +Cc: linux-mips
I guess that csum_ipv6_magic() in include/asm-mips/checksum.h
needs "addu %0, $1" at the next of "sltu $1, %0, $1".
Without this, you cannot add a carry of the last addtion.
--- checksum.h.ORG Mon Oct 22 15:09:32 2001
+++ checksum.h Mon Oct 22 15:09:51 2001
@@ -249,6 +249,7 @@ static __inline__ unsigned short int csu
"addu\t%0, $1\n\t"
"addu\t%0, %1\n\t"
"sltu\t$1, %0, $1\n\t"
+ "addu\t%0, $1\n\t"
".set\tnoat\n\t"
".set\tnoreorder"
: "=r" (sum), "=r" (proto)
---
Hiroyuki Machida
Sony Corp.
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: csum_ipv6_magic() 2001-10-22 6:16 csum_ipv6_magic() Machida Hiroyuki @ 2001-10-22 7:55 ` Alan Cox 2001-10-22 7:55 ` csum_ipv6_magic() Alan Cox 2001-10-22 10:56 ` csum_ipv6_magic() Machida Hiroyuki 0 siblings, 2 replies; 8+ messages in thread From: Alan Cox @ 2001-10-22 7:55 UTC (permalink / raw) To: Machida Hiroyuki; +Cc: Ralf Baechle, linux-mips > I guess that csum_ipv6_magic() in include/asm-mips/checksum.h > needs "addu %0, $1" at the next of "sltu $1, %0, $1". > Without this, you cannot add a carry of the last addtion. Is that actually needed. The final end around carry cannot itself cause a second carry. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: csum_ipv6_magic() 2001-10-22 7:55 ` csum_ipv6_magic() Alan Cox @ 2001-10-22 7:55 ` Alan Cox 2001-10-22 10:56 ` csum_ipv6_magic() Machida Hiroyuki 1 sibling, 0 replies; 8+ messages in thread From: Alan Cox @ 2001-10-22 7:55 UTC (permalink / raw) To: Machida Hiroyuki; +Cc: Ralf Baechle, linux-mips > I guess that csum_ipv6_magic() in include/asm-mips/checksum.h > needs "addu %0, $1" at the next of "sltu $1, %0, $1". > Without this, you cannot add a carry of the last addtion. Is that actually needed. The final end around carry cannot itself cause a second carry. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: csum_ipv6_magic() 2001-10-22 7:55 ` csum_ipv6_magic() Alan Cox 2001-10-22 7:55 ` csum_ipv6_magic() Alan Cox @ 2001-10-22 10:56 ` Machida Hiroyuki 2001-10-22 11:33 ` csum_ipv6_magic() Machida Hiroyuki 1 sibling, 1 reply; 8+ messages in thread From: Machida Hiroyuki @ 2001-10-22 10:56 UTC (permalink / raw) To: alan; +Cc: ralf, linux-mips From: Alan Cox <alan@lxorguk.ukuu.org.uk> Subject: Re: csum_ipv6_magic() Date: Mon, 22 Oct 2001 08:55:35 +0100 (BST) > > I guess that csum_ipv6_magic() in include/asm-mips/checksum.h > > needs "addu %0, $1" at the next of "sltu $1, %0, $1". > > Without this, you cannot add a carry of the last addtion. > > Is that actually needed. The final end around carry cannot itself cause > a second carry. I don't know csum_ipv6_magic() in include/asm-mips/checksum.h works fine or not. But if csum_ipv6_magic() doesn't need "addu %0, $1" at next of the final "sltu $1, %0, $1", you can remove the final "sltu $1, %0, $1". --- Hiroyuki Machida Sony Corp. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: csum_ipv6_magic() 2001-10-22 10:56 ` csum_ipv6_magic() Machida Hiroyuki @ 2001-10-22 11:33 ` Machida Hiroyuki 2001-10-22 20:48 ` csum_ipv6_magic() Ralf Baechle 0 siblings, 1 reply; 8+ messages in thread From: Machida Hiroyuki @ 2001-10-22 11:33 UTC (permalink / raw) To: alan, ralf; +Cc: linux-mips I found bugs in checksum.h. A sample fix is attached below. I perfer to use generic csum_ipv6_magic() in net/checksum.h than this fix. Please someone show me improvements for this asm version of csum_ipv6_magic(). --- Hiroyuki Machida Sony Corp. ChangLog entry: * (csum_ipv6_magic): Have same paramter types as net/checksum.h. Correct carry computation. Add a final carry. Index: checksum.h =================================================================== RCS file: /cvs/linux/include/asm-mips/checksum.h,v retrieving revision 1.12 diff -u -p -r1.12 checksum.h --- checksum.h 2001/10/06 19:29:25 1.12 +++ checksum.h 2001/10/22 11:16:05 @@ -197,7 +197,7 @@ static inline unsigned short ip_compute_ #define _HAVE_ARCH_IPV6_CSUM static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr, struct in6_addr *daddr, - __u32 len, + unsigned short len, unsigned short proto, unsigned int sum) { @@ -211,49 +211,51 @@ static __inline__ unsigned short int csu "addu\t%0, %6\t\t\t# csum\n\t" "sltu\t$1, %0, %6\n\t" "lw\t%1, 0(%2)\t\t\t# four words source address\n\t" - "addu\t%0, $1\n\t" + " addu\t%0, $1\n\t" "addu\t%0, %1\n\t" - "sltu\t$1, %0, $1\n\t" + "sltu\t$1, %0, %1\n\t" "lw\t%1, 4(%2)\n\t" - "addu\t%0, $1\n\t" + " addu\t%0, $1\n\t" "addu\t%0, %1\n\t" - "sltu\t$1, %0, $1\n\t" + "sltu\t$1, %0, %1\n\t" "lw\t%1, 8(%2)\n\t" - "addu\t%0, $1\n\t" + " addu\t%0, $1\n\t" "addu\t%0, %1\n\t" - "sltu\t$1, %0, $1\n\t" + "sltu\t$1, %0, %1\n\t" "lw\t%1, 12(%2)\n\t" - "addu\t%0, $1\n\t" + " addu\t%0, $1\n\t" "addu\t%0, %1\n\t" - "sltu\t$1, %0, $1\n\t" + "sltu\t$1, %0, %1\n\t" "lw\t%1, 0(%3)\n\t" - "addu\t%0, $1\n\t" + " addu\t%0, $1\n\t" "addu\t%0, %1\n\t" - "sltu\t$1, %0, $1\n\t" + "sltu\t$1, %0, %1\n\t" "lw\t%1, 4(%3)\n\t" - "addu\t%0, $1\n\t" + " addu\t%0, $1\n\t" "addu\t%0, %1\n\t" - "sltu\t$1, %0, $1\n\t" + "sltu\t$1, %0, %1\n\t" "lw\t%1, 8(%3)\n\t" - "addu\t%0, $1\n\t" + " addu\t%0, $1\n\t" "addu\t%0, %1\n\t" - "sltu\t$1, %0, $1\n\t" + "sltu\t$1, %0, %1\n\t" "lw\t%1, 12(%3)\n\t" - "addu\t%0, $1\n\t" + " addu\t%0, $1\n\t" "addu\t%0, %1\n\t" - "sltu\t$1, %0, $1\n\t" + "sltu\t$1, %0, %1\n\t" + " addu\t%0, $1\n\t" + ".set\tnoat\n\t" ".set\tnoreorder" : "=r" (sum), "=r" (proto) : "r" (saddr), "r" (daddr), - "0" (htonl(len)), "1" (htonl(proto)), "r" (sum)); + "0" (htonl((__u32)len)), "1" (htonl(proto)), "r" (sum)); return csum_fold(sum); } ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: csum_ipv6_magic() 2001-10-22 11:33 ` csum_ipv6_magic() Machida Hiroyuki @ 2001-10-22 20:48 ` Ralf Baechle 2001-10-23 5:07 ` csum_ipv6_magic() Machida Hiroyuki 0 siblings, 1 reply; 8+ messages in thread From: Ralf Baechle @ 2001-10-22 20:48 UTC (permalink / raw) To: Machida Hiroyuki; +Cc: alan, linux-mips On Mon, Oct 22, 2001 at 08:33:24PM +0900, Machida Hiroyuki wrote: > I found bugs in checksum.h. A sample fix is attached below. > > I perfer to use generic csum_ipv6_magic() in net/checksum.h > than this fix. Please someone show me improvements for this asm > version of csum_ipv6_magic(). The C version should produce code that performs identically on MIPS. As such we have no good reason to keep the assembler version. > * (csum_ipv6_magic): Have same paramter types as net/checksum.h. > Correct carry computation. Add a final carry. The len argument of that prototype should be __u32 because of IPv6 jumbograms. Ralf ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: csum_ipv6_magic() 2001-10-22 20:48 ` csum_ipv6_magic() Ralf Baechle @ 2001-10-23 5:07 ` Machida Hiroyuki 2001-10-23 11:18 ` csum_ipv6_magic() Ralf Baechle 0 siblings, 1 reply; 8+ messages in thread From: Machida Hiroyuki @ 2001-10-23 5:07 UTC (permalink / raw) To: ralf; +Cc: alan, linux-mips From: Ralf Baechle <ralf@oss.sgi.com> Subject: Re: csum_ipv6_magic() Date: Mon, 22 Oct 2001 22:48:28 +0200 > > * (csum_ipv6_magic): Have same paramter types as net/checksum.h. > > Correct carry computation. Add a final carry. > > The len argument of that prototype should be __u32 because of IPv6 > jumbograms. I suppose csum_ipv6_magic() in include/net/checksum.h should have __u32 len. Please update include/net/checksum.h to avoid confusion. Thanks. --- Hiroyuki Machida Sony Corp. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: csum_ipv6_magic() 2001-10-23 5:07 ` csum_ipv6_magic() Machida Hiroyuki @ 2001-10-23 11:18 ` Ralf Baechle 0 siblings, 0 replies; 8+ messages in thread From: Ralf Baechle @ 2001-10-23 11:18 UTC (permalink / raw) To: Machida Hiroyuki; +Cc: alan, linux-mips On Tue, Oct 23, 2001 at 02:07:22PM +0900, Machida Hiroyuki wrote: > > > * (csum_ipv6_magic): Have same paramter types as net/checksum.h. > > > Correct carry computation. Add a final carry. > > > > The len argument of that prototype should be __u32 because of IPv6 > > jumbograms. > > I suppose csum_ipv6_magic() in include/net/checksum.h should have __u32 > len. Please update include/net/checksum.h to avoid confusion. Will do. Ralf ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2001-10-23 11:19 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2001-10-22 6:16 csum_ipv6_magic() Machida Hiroyuki 2001-10-22 7:55 ` csum_ipv6_magic() Alan Cox 2001-10-22 7:55 ` csum_ipv6_magic() Alan Cox 2001-10-22 10:56 ` csum_ipv6_magic() Machida Hiroyuki 2001-10-22 11:33 ` csum_ipv6_magic() Machida Hiroyuki 2001-10-22 20:48 ` csum_ipv6_magic() Ralf Baechle 2001-10-23 5:07 ` csum_ipv6_magic() Machida Hiroyuki 2001-10-23 11:18 ` csum_ipv6_magic() Ralf Baechle
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox