Re: [IPX]: Fix checksum computation.
From: Arnaldo Carvalho de Melo <hidden>
Date: 2003-10-31 21:31:59
Em Fri, Oct 31, 2003 at 01:24:06PM -0800, Joe Perches escreveu:
On Thu, 2003-10-30 at 19:43, Linux Kernel Mailing List wrote:quoted
ChangeSet 1.1399, 2003/10/30 19:43:04-08:00, davem@nuts.ninka.net [IPX]: Fix checksum computation. diff -Nru a/net/appletalk/ddp.c b/net/appletalk/ddp.c--- a/net/appletalk/ddp.c Fri Oct 31 12:06:06 2003 +++ b/net/appletalk/ddp.c Fri Oct 31 12:06:06 2003@@ -937,9 +937,13 @@ { /* This ought to be unwrapped neatly. I'll trust gcc for now */ while (len--) { - sum += *data++; + sum += *data; sum <<= 1; - sum = ((sum >> 16) + sum) & 0xFFFF; + if (sum & 0x10000) { + sum++; + sum &= 0xffff; + } + data++; } return sum; }This change didn't appear on this list for comment, it just appeared in the source. Why is this a "fix"? Performance? It seems more like someone's idea of code neatening. If this is done, why not if (unlikely())
No, the reverse is true, with the patch it is the same as in 2.4, when Stephen did the conversion to handle paged skbs it did what you called "neatening" (i.e. without the patch above), now, if you care, go try to use this with recent gcc, and get back with your results. Mine were: reversing this patch makes the checksum calculations sometimes wrong, preventing Appletalk from working. Mind boggling? Yes, did it fixed a problem? Yes. - Arnaldo