• Hao Luo's avatar
    selftests/bpf: Switch test_vmlinux to use hrtimer_range_start_ns. · 8d821b5d
    Hao Luo authored
    The test_vmlinux test uses hrtimer_nanosleep as hook to test tracing
    programs. But in a kernel built by clang, which performs more aggresive
    inlining, that function gets inlined into its caller SyS_nanosleep.
    Therefore, even though fentry and kprobe do hook on the function,
    they aren't triggered by the call to nanosleep in the test.
    
    A possible fix is switching to use a function that is less likely to
    be inlined, such as hrtimer_range_start_ns. The EXPORT_SYMBOL functions
    shouldn't be inlined based on the description of [1], therefore safe
    to use for this test. Also the arguments of this function include the
    duration of sleep, therefore suitable for test verification.
    
    [1] af3b5628 time: don't inline EXPORT_SYMBOL functions
    
    Tested:
     In a clang build kernel, before this change, the test fails:
    
     test_vmlinux:PASS:skel_open 0 nsec
     test_vmlinux:PASS:skel_attach 0 nsec
     test_vmlinux:PASS:tp 0 nsec
     test_vmlinux:PASS:raw_tp 0 nsec
     test_vmlinux:PASS:tp_btf 0 nsec
     test_vmlinux:FAIL:kprobe not called
     test_vmlinux:FAIL:fentry not called
    
     After switching to hrtimer_range_start_ns, the test passes:
    
     test_vmlinux:PASS:skel_open 0 nsec
     test_vmlinux:PASS:skel_attach 0 nsec
     test_vmlinux:PASS:tp 0 nsec
     test_vmlinux:PASS:raw_tp 0 nsec
     test_vmlinux:PASS:tp_btf 0 nsec
     test_vmlinux:PASS:kprobe 0 nsec
     test_vmlinux:PASS:fentry 0 nsec
    Signed-off-by: default avatarHao Luo <haoluo@google.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Acked-by: default avatarAndrii Nakryiko <andriin@fb.com>
    Acked-by: default avatarYonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/bpf/20200701175315.1161242-1-haoluo@google.com
    8d821b5d
test_vmlinux.c 1.69 KB