| To: | anemo@mba.ocn.ne.jp |
|---|---|
| Subject: | Re: [PATCH] Fix wrong checksum calculation on 64-bit MIPS |
| From: | David Miller <davem@davemloft.net> |
| Date: | Tue, 23 Jan 2007 22:44:56 -0800 (PST) |
| Cc: | linux-mips@linux-mips.org, ralf@linux-mips.org, viro@zeniv.linux.org.uk |
| In-reply-to: | <20070124.154334.130239327.nemoto@toshiba-tops.co.jp> |
| Original-recipient: | rfc822;linux-mips@linux-mips.org |
| References: | <20070124.154334.130239327.nemoto@toshiba-tops.co.jp> |
| Sender: | linux-mips-bounce@linux-mips.org |
From: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Date: Wed, 24 Jan 2007 15:43:34 +0900 (JST) > The commit 8e3d8433d8c22ca6c42cba4a67d300c39aae7822 ([NET]: MIPS > checksum annotations and cleanups) broke 64-bit MIPS. > > The problem is the commit replaces some unsigned long with __be32. On > 64bit MIPS, a __be32 (i.e. unsigned int) value is represented as a > sign-extented 32-bit value in a 64-bit argument register. So the > address 192.168.0.1 (0xc0a80001) is passed as 0xffffffffc0a80001 to > csum_tcpudp_nofold() but the asm code in the function expects > 0x00000000c0a80001, therefore it returns a wrong checksum. Explicit > cast to unsigned long is needed to drop high 32bit. > > Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Al, let me know if you want this fixed differently. Thanks. |
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | [PATCH] Fix wrong checksum calculation on 64-bit MIPS, Atsushi Nemoto |
|---|---|
| Next by Date: | Re: [PATCH] Make CARDBUS_MEM_SIZE and CARDBUS_IO_SIZE customizable, Andrew Morton |
| Previous by Thread: | [PATCH] Fix wrong checksum calculation on 64-bit MIPS, Atsushi Nemoto |
| Next by Thread: | [PATCH][MIPS] vr41xx: need one more nop with mtc0_tlbw_hazard(), Yoichi Yuasa |
| Indexes: | [Date] [Thread] [Top] [All Lists] |