[Top] [All Lists]

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

Subject: Re: [PATCH] Fix wrong checksum calculation on 64-bit MIPS
From: David Miller <>
Date: Tue, 23 Jan 2007 22:44:56 -0800 (PST)
In-reply-to: <>
Original-recipient: rfc822;
References: <>
From: Atsushi Nemoto <>
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 (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 <>

Al, let me know if you want this fixed differently.

<Prev in Thread] Current Thread [Next in Thread>