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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Atsushi Nemoto <anemo@xxxxxxxxxxxxx>
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@xxxxxxxxxxxxx>

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


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux