07 Jul, 2011

1 commit

  • Reduce the number of variables modified by the loop in do_csum() by 1,
    which seems like a good idea. On Nios II (a RISC CPU with 3-operand
    instruction set) it reduces the loop from 7 to 6 instructions, including
    the conditional branch.

    Signed-off-by: Ian Abbott
    Signed-off-by: David S. Miller

    Ian Abbott
     

03 Nov, 2009

3 commits

  • When do_csum gets unaligned data, we really need to treat
    the first byte as an even byte, not an odd byte, because
    we swap the two halves later.

    Found by Mike's checksum-selftest module.

    Reported-by: Mike Frysinger
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • Mike Frysinger suggested that do_csum should be optional
    so that an architecture can use the generic checksum code
    but still provide an optimized fast-path for the most
    critical function.

    This can mean an implementation using inline assembly,
    or in case of Alpha one using 64-bit arithmetic in C.

    Cc: Mike Frysinger
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • The use of 'unsigned long' variables in the 32-bit part of do_csum()
    is confusing at best, and potentially broken for long input on 64-bit
    machines.

    This changes the code to use 'unsigned int' instead, which makes
    the code behave in the same (correct) way on both 32 and 64 bit
    machines.

    Reported-by: Linus Torvalds
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     

19 Jun, 2009

1 commit

  • The new generic checksum code has a small dependency on endianess and
    worked only on big-endian systems. I could not find a nice efficient
    way to express this, so I added an #ifdef. Using
    'result += le16_to_cpu(*buff);' would have worked as well, but
    would be slightly less efficient on big-endian systems and IMHO
    would not be clearer.

    Also fix a bug that prevents this from working on 64-bit machines.
    If you have a 64-bit CPU and want to use the generic checksum
    code, you should probably do some more optimizations anyway, but
    at least the code should not break.

    Reported-by: Mike Frysinger
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     

12 Jun, 2009

1 commit

  • Add a generic (unoptimized) implementation of checksum.c in pure C
    for use by all architectures that cannot be bother with implementing
    their own version.

    Based on microblaze code by Michal Simek

    Cc: Michal Simek
    Signed-off-by: Remis Lima Baima
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann