v4: 1,There is a conflict when merging these two patches on the basis of the trampoline series patches, resolve the conflict issue v3: 1,In the prepare_bpf_tail_call_cnt function, emit_tailcall_jmp is replaced with emit_cond_jmp. 2,Fix the issue where test cases using fentry/fexit fail. Test after merging these two patches and the following trampoline series patches. https://lore.kernel.org/loongarch/CAK3+h2zirm6cV2tAbd38RSYSF3=B1qZ+9jm_GZPsAPrMtaozmg@xxxxxxxxxxxxxx/T/#mf1f1c9f965d5229c6d2dce3b1ca8bc9a5d70520d ./test_progs -a tailcalls #413/1 tailcalls/tailcall_1:OK #413/2 tailcalls/tailcall_2:OK #413/3 tailcalls/tailcall_3:OK #413/4 tailcalls/tailcall_4:OK #413/5 tailcalls/tailcall_5:OK #413/6 tailcalls/tailcall_6:OK #413/7 tailcalls/tailcall_bpf2bpf_1:OK #413/8 tailcalls/tailcall_bpf2bpf_2:OK #413/9 tailcalls/tailcall_bpf2bpf_3:OK #413/10 tailcalls/tailcall_bpf2bpf_4:OK #413/11 tailcalls/tailcall_bpf2bpf_5:OK #413/12 tailcalls/tailcall_bpf2bpf_6:OK #413/13 tailcalls/tailcall_bpf2bpf_fentry:OK #413/14 tailcalls/tailcall_bpf2bpf_fexit:OK #413/15 tailcalls/tailcall_bpf2bpf_fentry_fexit:OK #413/16 tailcalls/tailcall_bpf2bpf_fentry_entry:OK #413/17 tailcalls/tailcall_poke:OK #413/18 tailcalls/tailcall_bpf2bpf_hierarchy_1:OK #413/19 tailcalls/tailcall_bpf2bpf_hierarchy_fentry:OK #413/20 tailcalls/tailcall_bpf2bpf_hierarchy_fexit:OK #413/21 tailcalls/tailcall_bpf2bpf_hierarchy_fentry_fexit:OK #413/22 tailcalls/tailcall_bpf2bpf_hierarchy_fentry_entry:OK #413/23 tailcalls/tailcall_bpf2bpf_hierarchy_2:OK #413/24 tailcalls/tailcall_bpf2bpf_hierarchy_3:OK #413/25 tailcalls/tailcall_freplace:OK #413/26 tailcalls/tailcall_bpf2bpf_freplace:OK #413/27 tailcalls/tailcall_failure:OK #413/28 tailcalls/reject_tail_call_spin_lock:OK #413/29 tailcalls/reject_tail_call_rcu_lock:OK #413/30 tailcalls/reject_tail_call_preempt_lock:OK #413/31 tailcalls/reject_tail_call_ref:OK #413 tailcalls:OK Summary: 1/31 PASSED, 0 SKIPPED, 0 FAILED v2: 1,Add a Fixes tag. 2,Ctx as the first parameter of emit_bpf_tail_call. 3,Define jmp_offset as a macro in emit_bpf_tail_call. After merging these two patches, the test results are as follows: ./test_progs --allow=tailcalls tester_init:PASS:tester_log_buf 0 nsec process_subtest:PASS:obj_open_mem 0 nsec process_subtest:PASS:specs_alloc 0 nsec #413/1 tailcalls/tailcall_1:OK #413/2 tailcalls/tailcall_2:OK #413/3 tailcalls/tailcall_3:OK #413/4 tailcalls/tailcall_4:OK #413/5 tailcalls/tailcall_5:OK #413/6 tailcalls/tailcall_6:OK #413/7 tailcalls/tailcall_bpf2bpf_1:OK #413/8 tailcalls/tailcall_bpf2bpf_2:OK #413/9 tailcalls/tailcall_bpf2bpf_3:OK #413/10 tailcalls/tailcall_bpf2bpf_4:OK #413/11 tailcalls/tailcall_bpf2bpf_5:OK #413/12 tailcalls/tailcall_bpf2bpf_6:OK test_tailcall_count:PASS:open fentry_obj file 0 nsec test_tailcall_count:PASS:find fentry prog 0 nsec test_tailcall_count:PASS:set_attach_target subprog_tail 0 nsec test_tailcall_count:PASS:load fentry_obj 0 nsec libbpf: prog 'fentry': failed to attach: -ENOTSUPP test_tailcall_count:FAIL:attach_trace unexpected error: -524 #413/13 tailcalls/tailcall_bpf2bpf_fentry:FAIL test_tailcall_count:PASS:open fexit_obj file 0 nsec test_tailcall_count:PASS:find fexit prog 0 nsec test_tailcall_count:PASS:set_attach_target subprog_tail 0 nsec test_tailcall_count:PASS:load fexit_obj 0 nsec libbpf: prog 'fexit': failed to attach: -ENOTSUPP test_tailcall_count:FAIL:attach_trace unexpected error: -524 #413/14 tailcalls/tailcall_bpf2bpf_fexit:FAIL test_tailcall_count:PASS:open fentry_obj file 0 nsec test_tailcall_count:PASS:find fentry prog 0 nsec test_tailcall_count:PASS:set_attach_target subprog_tail 0 nsec test_tailcall_count:PASS:load fentry_obj 0 nsec libbpf: prog 'fentry': failed to attach: -ENOTSUPP test_tailcall_count:FAIL:attach_trace unexpected error: -524 #413/15 tailcalls/tailcall_bpf2bpf_fentry_fexit:FAIL test_tailcall_bpf2bpf_fentry_entry:PASS:load tgt_obj 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:find jmp_table map 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:find jmp_table map fd 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:find classifier_0 prog 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:find classifier_0 prog fd 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:update jmp_table 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:open fentry_obj file 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:find fentry prog 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:set_attach_target classifier_0 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:load fentry_obj 0 nsec libbpf: prog 'fentry': failed to attach: -ENOTSUPP test_tailcall_bpf2bpf_fentry_entry:FAIL:attach_trace unexpected error: -524 #413/16 tailcalls/tailcall_bpf2bpf_fentry_entry:FAIL #413/17 tailcalls/tailcall_poke:OK #413/18 tailcalls/tailcall_bpf2bpf_hierarchy_1:OK test_tailcall_hierarchy_count:PASS:load obj 0 nsec test_tailcall_hierarchy_count:PASS:find entry prog 0 nsec test_tailcall_hierarchy_count:PASS:prog_fd 0 nsec test_tailcall_hierarchy_count:PASS:find jmp_table 0 nsec test_tailcall_hierarchy_count:PASS:map_fd 0 nsec test_tailcall_hierarchy_count:PASS:update jmp_table 0 nsec test_tailcall_hierarchy_count:PASS:find data_map 0 nsec test_tailcall_hierarchy_count:PASS:open fentry_obj file 0 nsec test_tailcall_hierarchy_count:PASS:find fentry prog 0 nsec test_tailcall_hierarchy_count:PASS:set_attach_target subprog_tail 0 nsec test_tailcall_hierarchy_count:PASS:load fentry_obj 0 nsec libbpf: prog 'fentry': failed to attach: -ENOTSUPP test_tailcall_hierarchy_count:FAIL:attach_trace unexpected error: -524 #413/19 tailcalls/tailcall_bpf2bpf_hierarchy_fentry:FAIL test_tailcall_hierarchy_count:PASS:load obj 0 nsec test_tailcall_hierarchy_count:PASS:find entry prog 0 nsec test_tailcall_hierarchy_count:PASS:prog_fd 0 nsec test_tailcall_hierarchy_count:PASS:find jmp_table 0 nsec test_tailcall_hierarchy_count:PASS:map_fd 0 nsec test_tailcall_hierarchy_count:PASS:update jmp_table 0 nsec test_tailcall_hierarchy_count:PASS:find data_map 0 nsec test_tailcall_hierarchy_count:PASS:open fexit_obj file 0 nsec test_tailcall_hierarchy_count:PASS:find fexit prog 0 nsec test_tailcall_hierarchy_count:PASS:set_attach_target subprog_tail 0 nsec test_tailcall_hierarchy_count:PASS:load fexit_obj 0 nsec libbpf: prog 'fexit': failed to attach: -ENOTSUPP test_tailcall_hierarchy_count:FAIL:attach_trace unexpected error: -524 #413/20 tailcalls/tailcall_bpf2bpf_hierarchy_fexit:FAIL test_tailcall_hierarchy_count:PASS:load obj 0 nsec test_tailcall_hierarchy_count:PASS:find entry prog 0 nsec test_tailcall_hierarchy_count:PASS:prog_fd 0 nsec test_tailcall_hierarchy_count:PASS:find jmp_table 0 nsec test_tailcall_hierarchy_count:PASS:map_fd 0 nsec test_tailcall_hierarchy_count:PASS:update jmp_table 0 nsec test_tailcall_hierarchy_count:PASS:find data_map 0 nsec test_tailcall_hierarchy_count:PASS:open fentry_obj file 0 nsec test_tailcall_hierarchy_count:PASS:find fentry prog 0 nsec test_tailcall_hierarchy_count:PASS:set_attach_target subprog_tail 0 nsec test_tailcall_hierarchy_count:PASS:load fentry_obj 0 nsec libbpf: prog 'fentry': failed to attach: -ENOTSUPP test_tailcall_hierarchy_count:FAIL:attach_trace unexpected error: -524 #413/21 tailcalls/tailcall_bpf2bpf_hierarchy_fentry_fexit:FAIL test_tailcall_hierarchy_count:PASS:load obj 0 nsec test_tailcall_hierarchy_count:PASS:find entry prog 0 nsec test_tailcall_hierarchy_count:PASS:prog_fd 0 nsec test_tailcall_hierarchy_count:PASS:open fentry_obj file 0 nsec test_tailcall_hierarchy_count:PASS:find fentry prog 0 nsec test_tailcall_hierarchy_count:PASS:set_attach_target entry 0 nsec test_tailcall_hierarchy_count:PASS:load fentry_obj 0 nsec libbpf: prog 'fentry': failed to attach: -ENOTSUPP test_tailcall_hierarchy_count:FAIL:attach_trace unexpected error: -524 tester_init:PASS:tester_log_buf 0 nsec process_subtest:PASS:obj_open_mem 0 nsec process_subtest:PASS:specs_alloc 0 nsec #413/22 tailcalls/tailcall_bpf2bpf_hierarchy_fentry_entry:FAIL #413/23 tailcalls/tailcall_bpf2bpf_hierarchy_2:OK #413/24 tailcalls/tailcall_bpf2bpf_hierarchy_3:OK test_tailcall_freplace:PASS:tailcall_freplace__open 0 nsec test_tailcall_freplace:PASS:tc_bpf2bpf__open_and_load 0 nsec test_tailcall_freplace:PASS:set_attach_target 0 nsec test_tailcall_freplace:PASS:tailcall_freplace__load 0 nsec test_tailcall_freplace:PASS:update jmp_table failure 0 nsec libbpf: prog 'entry_freplace': failed to attach to freplace: -ENOTSUPP test_tailcall_freplace:FAIL:attach_freplace unexpected error: -524 #413/25 tailcalls/tailcall_freplace:FAIL test_tailcall_bpf2bpf_freplace:PASS:tc_bpf2bpf__open_and_load 0 nsec test_tailcall_bpf2bpf_freplace:PASS:tailcall_freplace__open 0 nsec test_tailcall_bpf2bpf_freplace:PASS:set_attach_target 0 nsec test_tailcall_bpf2bpf_freplace:PASS:tailcall_freplace__load 0 nsec libbpf: prog 'entry_freplace': failed to attach to freplace: -ENOTSUPP test_tailcall_bpf2bpf_freplace:FAIL:attach_freplace unexpected error: -524 #413/26 tailcalls/tailcall_bpf2bpf_freplace:FAIL #413/27 tailcalls/tailcall_failure:OK #413/28 tailcalls/reject_tail_call_spin_lock:OK #413/29 tailcalls/reject_tail_call_rcu_lock:OK #413/30 tailcalls/reject_tail_call_preempt_lock:OK #413/31 tailcalls/reject_tail_call_ref:OK #413 tailcalls:FAIL All error logs: tester_init:PASS:tester_log_buf 0 nsec process_subtest:PASS:obj_open_mem 0 nsec process_subtest:PASS:specs_alloc 0 nsec test_tailcall_count:PASS:open fentry_obj file 0 nsec test_tailcall_count:PASS:find fentry prog 0 nsec test_tailcall_count:PASS:set_attach_target subprog_tail 0 nsec test_tailcall_count:PASS:load fentry_obj 0 nsec libbpf: prog 'fentry': failed to attach: -ENOTSUPP test_tailcall_count:FAIL:attach_trace unexpected error: -524 #413/13 tailcalls/tailcall_bpf2bpf_fentry:FAIL test_tailcall_count:PASS:open fexit_obj file 0 nsec test_tailcall_count:PASS:find fexit prog 0 nsec test_tailcall_count:PASS:set_attach_target subprog_tail 0 nsec test_tailcall_count:PASS:load fexit_obj 0 nsec libbpf: prog 'fexit': failed to attach: -ENOTSUPP test_tailcall_count:FAIL:attach_trace unexpected error: -524 #413/14 tailcalls/tailcall_bpf2bpf_fexit:FAIL test_tailcall_count:PASS:open fentry_obj file 0 nsec test_tailcall_count:PASS:find fentry prog 0 nsec test_tailcall_count:PASS:set_attach_target subprog_tail 0 nsec test_tailcall_count:PASS:load fentry_obj 0 nsec libbpf: prog 'fentry': failed to attach: -ENOTSUPP test_tailcall_count:FAIL:attach_trace unexpected error: -524 #413/15 tailcalls/tailcall_bpf2bpf_fentry_fexit:FAIL test_tailcall_bpf2bpf_fentry_entry:PASS:load tgt_obj 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:find jmp_table map 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:find jmp_table map fd 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:find classifier_0 prog 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:find classifier_0 prog fd 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:update jmp_table 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:open fentry_obj file 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:find fentry prog 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:set_attach_target classifier_0 0 nsec test_tailcall_bpf2bpf_fentry_entry:PASS:load fentry_obj 0 nsec libbpf: prog 'fentry': failed to attach: -ENOTSUPP test_tailcall_bpf2bpf_fentry_entry:FAIL:attach_trace unexpected error: -524 #413/16 tailcalls/tailcall_bpf2bpf_fentry_entry:FAIL test_tailcall_hierarchy_count:PASS:load obj 0 nsec test_tailcall_hierarchy_count:PASS:find entry prog 0 nsec test_tailcall_hierarchy_count:PASS:prog_fd 0 nsec test_tailcall_hierarchy_count:PASS:find jmp_table 0 nsec test_tailcall_hierarchy_count:PASS:map_fd 0 nsec test_tailcall_hierarchy_count:PASS:update jmp_table 0 nsec test_tailcall_hierarchy_count:PASS:find data_map 0 nsec test_tailcall_hierarchy_count:PASS:open fentry_obj file 0 nsec test_tailcall_hierarchy_count:PASS:find fentry prog 0 nsec test_tailcall_hierarchy_count:PASS:set_attach_target subprog_tail 0 nsec test_tailcall_hierarchy_count:PASS:load fentry_obj 0 nsec libbpf: prog 'fentry': failed to attach: -ENOTSUPP test_tailcall_hierarchy_count:FAIL:attach_trace unexpected error: -524 #413/19 tailcalls/tailcall_bpf2bpf_hierarchy_fentry:FAIL test_tailcall_hierarchy_count:PASS:load obj 0 nsec test_tailcall_hierarchy_count:PASS:find entry prog 0 nsec test_tailcall_hierarchy_count:PASS:prog_fd 0 nsec test_tailcall_hierarchy_count:PASS:find jmp_table 0 nsec test_tailcall_hierarchy_count:PASS:map_fd 0 nsec test_tailcall_hierarchy_count:PASS:update jmp_table 0 nsec test_tailcall_hierarchy_count:PASS:find data_map 0 nsec test_tailcall_hierarchy_count:PASS:open fexit_obj file 0 nsec test_tailcall_hierarchy_count:PASS:find fexit prog 0 nsec test_tailcall_hierarchy_count:PASS:set_attach_target subprog_tail 0 nsec test_tailcall_hierarchy_count:PASS:load fexit_obj 0 nsec libbpf: prog 'fexit': failed to attach: -ENOTSUPP test_tailcall_hierarchy_count:FAIL:attach_trace unexpected error: -524 #413/20 tailcalls/tailcall_bpf2bpf_hierarchy_fexit:FAIL test_tailcall_hierarchy_count:PASS:load obj 0 nsec test_tailcall_hierarchy_count:PASS:find entry prog 0 nsec test_tailcall_hierarchy_count:PASS:prog_fd 0 nsec test_tailcall_hierarchy_count:PASS:find jmp_table 0 nsec test_tailcall_hierarchy_count:PASS:map_fd 0 nsec test_tailcall_hierarchy_count:PASS:update jmp_table 0 nsec test_tailcall_hierarchy_count:PASS:find data_map 0 nsec test_tailcall_hierarchy_count:PASS:open fentry_obj file 0 nsec test_tailcall_hierarchy_count:PASS:find fentry prog 0 nsec test_tailcall_hierarchy_count:PASS:set_attach_target subprog_tail 0 nsec test_tailcall_hierarchy_count:PASS:load fentry_obj 0 nsec libbpf: prog 'fentry': failed to attach: -ENOTSUPP test_tailcall_hierarchy_count:FAIL:attach_trace unexpected error: -524 #413/21 tailcalls/tailcall_bpf2bpf_hierarchy_fentry_fexit:FAIL test_tailcall_hierarchy_count:PASS:load obj 0 nsec test_tailcall_hierarchy_count:PASS:find entry prog 0 nsec test_tailcall_hierarchy_count:PASS:prog_fd 0 nsec test_tailcall_hierarchy_count:PASS:open fentry_obj file 0 nsec test_tailcall_hierarchy_count:PASS:find fentry prog 0 nsec test_tailcall_hierarchy_count:PASS:set_attach_target entry 0 nsec test_tailcall_hierarchy_count:PASS:load fentry_obj 0 nsec libbpf: prog 'fentry': failed to attach: -ENOTSUPP test_tailcall_hierarchy_count:FAIL:attach_trace unexpected error: -524 tester_init:PASS:tester_log_buf 0 nsec process_subtest:PASS:obj_open_mem 0 nsec process_subtest:PASS:specs_alloc 0 nsec #413/22 tailcalls/tailcall_bpf2bpf_hierarchy_fentry_entry:FAIL test_tailcall_freplace:PASS:tailcall_freplace__open 0 nsec test_tailcall_freplace:PASS:tc_bpf2bpf__open_and_load 0 nsec test_tailcall_freplace:PASS:set_attach_target 0 nsec test_tailcall_freplace:PASS:tailcall_freplace__load 0 nsec test_tailcall_freplace:PASS:update jmp_table failure 0 nsec libbpf: prog 'entry_freplace': failed to attach to freplace: -ENOTSUPP test_tailcall_freplace:FAIL:attach_freplace unexpected error: -524 #413/25 tailcalls/tailcall_freplace:FAIL test_tailcall_bpf2bpf_freplace:PASS:tc_bpf2bpf__open_and_load 0 nsec test_tailcall_bpf2bpf_freplace:PASS:tailcall_freplace__open 0 nsec test_tailcall_bpf2bpf_freplace:PASS:set_attach_target 0 nsec test_tailcall_bpf2bpf_freplace:PASS:tailcall_freplace__load 0 nsec libbpf: prog 'entry_freplace': failed to attach to freplace: -ENOTSUPP test_tailcall_bpf2bpf_freplace:FAIL:attach_freplace unexpected error: -524 #413/26 tailcalls/tailcall_bpf2bpf_freplace:FAIL #413 tailcalls:FAIL Summary: 0/21 PASSED, 0 SKIPPED, 1 FAILED v1: 1,Fix the jmp_offset calculation error in the emit_bpf_tail_call function. 2,Fix the issue that MAX_TAIL_CALL_CNT limit bypass in hybrid tailcall and BPF-to-BPF call After applying this patch, testing results are as follows: ./test_progs --allow=tailcalls/tailcall_bpf2bpf_hierarchy_1 413/18 tailcalls/tailcall_bpf2bpf_hierarchy_1:OK 413 tailcalls:OK Summary: 1/1 PASSED, 0 SKIPPED, 0 FAILED ./test_progs --allow=tailcalls/tailcall_bpf2bpf_hierarchy_2 413/23 tailcalls/tailcall_bpf2bpf_hierarchy_2:OK 413 tailcalls:OK Summary: 1/1 PASSED, 0 SKIPPED, 0 FAILED ./test_progs --allow=tailcalls/tailcall_bpf2bpf_hierarchy_3 413/24 tailcalls/tailcall_bpf2bpf_hierarchy_3:OK 413 tailcalls:OK Summary: 1/1 PASSED, 0 SKIPPED, 0 FAILED Haoran Jiang (2): LoongArch: BPF: Fix jump offset calculation in tailcall LoongArch: BPF: Fix tailcall hierarchy arch/loongarch/net/bpf_jit.c | 181 +++++++++++++++++++++++------------ 1 file changed, 119 insertions(+), 62 deletions(-) -- 2.43.0