• Atsushi Nemoto's avatar
    [MIPS] Fix wrong checksum calculation on 64-bit MIPS · 66218da2
    Atsushi Nemoto authored
    The commit 8e3d8433 ([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: default avatarAtsushi Nemoto <anemo@mba.ocn.ne.jp>
    Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    66218da2
checksum.h 5.66 KB