• Christophe Leroy's avatar
    kunit: Fix checksum tests on big endian CPUs · b38460bc
    Christophe Leroy authored
    On powerpc64le checksum kunit tests work:
    
    [    2.011457][    T1]     KTAP version 1
    [    2.011662][    T1]     # Subtest: checksum
    [    2.011848][    T1]     1..3
    [    2.034710][    T1]     ok 1 test_csum_fixed_random_inputs
    [    2.079325][    T1]     ok 2 test_csum_all_carry_inputs
    [    2.127102][    T1]     ok 3 test_csum_no_carry_inputs
    [    2.127202][    T1] # checksum: pass:3 fail:0 skip:0 total:3
    [    2.127533][    T1] # Totals: pass:3 fail:0 skip:0 total:3
    [    2.127956][    T1] ok 1 checksum
    
    But on powerpc64 and powerpc32 they fail:
    
    [    1.859890][    T1]     KTAP version 1
    [    1.860041][    T1]     # Subtest: checksum
    [    1.860201][    T1]     1..3
    [    1.861927][   T58]     # test_csum_fixed_random_inputs: ASSERTION FAILED at lib/checksum_kunit.c:243
    [    1.861927][   T58]     Expected result == expec, but
    [    1.861927][   T58]         result == 54991 (0xd6cf)
    [    1.861927][   T58]         expec == 33316 (0x8224)
    [    1.863742][    T1]     not ok 1 test_csum_fixed_random_inputs
    [    1.864520][   T60]     # test_csum_all_carry_inputs: ASSERTION FAILED at lib/checksum_kunit.c:267
    [    1.864520][   T60]     Expected result == expec, but
    [    1.864520][   T60]         result == 255 (0xff)
    [    1.864520][   T60]         expec == 65280 (0xff00)
    [    1.868820][    T1]     not ok 2 test_csum_all_carry_inputs
    [    1.869977][   T62]     # test_csum_no_carry_inputs: ASSERTION FAILED at lib/checksum_kunit.c:306
    [    1.869977][   T62]     Expected result == expec, but
    [    1.869977][   T62]         result == 64515 (0xfc03)
    [    1.869977][   T62]         expec == 0 (0x0)
    [    1.872060][    T1]     not ok 3 test_csum_no_carry_inputs
    [    1.872102][    T1] # checksum: pass:0 fail:3 skip:0 total:3
    [    1.872458][    T1] # Totals: pass:0 fail:3 skip:0 total:3
    [    1.872791][    T1] not ok 3 checksum
    
    This is because all expected values were calculated for X86 which
    is little endian. On big endian systems all precalculated 16 bits
    halves must be byte swapped.
    
    And this is confirmed by a huge amount of sparse errors when building
    with C=2
    
    So fix all sparse errors and it will naturally work on all endianness.
    
    Fixes: 688eb819 ("x86/csum: Improve performance of `csum_partial`")
    Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b38460bc
checksum_kunit.c 17.4 KB