linux-mips
[Top] [All Lists]

Re: [PATCH] Fix wrong checksum calculation on 64-bit MIPS

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>