• Tiezhu Yang's avatar
    bpf, tests: Add module parameter test_suite to test_bpf module · b066abba
    Tiezhu Yang authored
    After commit 9298e63e ("bpf/tests: Add exhaustive tests of ALU
    operand magnitudes"), when modprobe test_bpf.ko with JIT on mips64,
    there exists segment fault due to the following reason:
    
      [...]
      ALU64_MOV_X: all register value magnitudes jited:1
      Break instruction in kernel code[#1]
      [...]
    
    It seems that the related JIT implementations of some test cases
    in test_bpf() have problems. At this moment, I do not care about
    the segment fault while I just want to verify the test cases of
    tail calls.
    
    Based on the above background and motivation, add the following
    module parameter test_suite to the test_bpf.ko:
    
      test_suite=<string>: only the specified test suite will be run, the
      string can be "test_bpf", "test_tail_calls" or "test_skb_segment".
    
    If test_suite is not specified, but test_id, test_name or test_range
    is specified, set 'test_bpf' as the default test suite. This is useful
    to only test the corresponding test suite when specifying the valid
    test_suite string.
    
    Any invalid test suite will result in -EINVAL being returned and no
    tests being run. If the test_suite is not specified or specified as
    empty string, it does not change the current logic, all of the test
    cases will be run.
    
    Here are some test results:
    
     # dmesg -c
     # modprobe test_bpf
     # dmesg | grep Summary
     test_bpf: Summary: 1009 PASSED, 0 FAILED, [0/997 JIT'ed]
     test_bpf: test_tail_calls: Summary: 8 PASSED, 0 FAILED, [0/8 JIT'ed]
     test_bpf: test_skb_segment: Summary: 2 PASSED, 0 FAILED
    
     # rmmod test_bpf
     # dmesg -c
     # modprobe test_bpf test_suite=test_bpf
     # dmesg | tail -1
     test_bpf: Summary: 1009 PASSED, 0 FAILED, [0/997 JIT'ed]
    
     # rmmod test_bpf
     # dmesg -c
     # modprobe test_bpf test_suite=test_tail_calls
     # dmesg
     test_bpf: #0 Tail call leaf jited:0 21 PASS
     [...]
     test_bpf: #7 Tail call error path, index out of range jited:0 32 PASS
     test_bpf: test_tail_calls: Summary: 8 PASSED, 0 FAILED, [0/8 JIT'ed]
    
     # rmmod test_bpf
     # dmesg -c
     # modprobe test_bpf test_suite=test_skb_segment
     # dmesg
     test_bpf: #0 gso_with_rx_frags PASS
     test_bpf: #1 gso_linear_no_head_frag PASS
     test_bpf: test_skb_segment: Summary: 2 PASSED, 0 FAILED
    
     # rmmod test_bpf
     # dmesg -c
     # modprobe test_bpf test_id=1
     # dmesg
     test_bpf: test_bpf: set 'test_bpf' as the default test_suite.
     test_bpf: #1 TXA jited:0 54 51 50 PASS
     test_bpf: Summary: 1 PASSED, 0 FAILED, [0/1 JIT'ed]
    
     # rmmod test_bpf
     # dmesg -c
     # modprobe test_bpf test_suite=test_bpf test_name=TXA
     # dmesg
     test_bpf: #1 TXA jited:0 54 50 51 PASS
     test_bpf: Summary: 1 PASSED, 0 FAILED, [0/1 JIT'ed]
    
     # rmmod test_bpf
     # dmesg -c
     # modprobe test_bpf test_suite=test_tail_calls test_range=6,7
     # dmesg
     test_bpf: #6 Tail call error path, NULL target jited:0 41 PASS
     test_bpf: #7 Tail call error path, index out of range jited:0 32 PASS
     test_bpf: test_tail_calls: Summary: 2 PASSED, 0 FAILED, [0/2 JIT'ed]
    
     # rmmod test_bpf
     # dmesg -c
     # modprobe test_bpf test_suite=test_skb_segment test_id=1
     # dmesg
     test_bpf: #1 gso_linear_no_head_frag PASS
     test_bpf: test_skb_segment: Summary: 1 PASSED, 0 FAILED
    
    By the way, the above segment fault has been fixed in the latest bpf-next
    tree which contains the mips64 JIT rework.
    Signed-off-by: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Tested-by: default avatarJohan Almbladh <johan.almbladh@anyfinetworks.com>
    Acked-by: default avatarJohan Almbladh <johan.almbladh@anyfinetworks.com>
    Link: https://lore.kernel.org/bpf/1635384321-28128-1-git-send-email-yangtiezhu@loongson.cn
    b066abba
test_bpf.c 349 KB