]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
bpf, x64: Remove tail call detection
authorLeon Hwang <hffilwlqm@gmail.com>
Mon, 10 Jun 2024 12:42:24 +0000 (20:42 +0800)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 21 Jun 2024 02:48:29 +0000 (19:48 -0700)
As 'prog->aux->tail_call_reachable' is correct for tail call present,
it's unnecessary to detect tail call in x86 jit.

Therefore, let's remove it.

Signed-off-by: Leon Hwang <hffilwlqm@gmail.com>
Link: https://lore.kernel.org/r/20240610124224.34673-3-hffilwlqm@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
arch/x86/net/bpf_jit_comp.c

index 5159c7a22922945195c21748bb804705f543b3bb..7c130001fbfe79eb15af8ff201b4aa5f91fcb009 100644 (file)
@@ -1234,13 +1234,11 @@ bool ex_handler_bpf(const struct exception_table_entry *x, struct pt_regs *regs)
 }
 
 static void detect_reg_usage(struct bpf_insn *insn, int insn_cnt,
-                            bool *regs_used, bool *tail_call_seen)
+                            bool *regs_used)
 {
        int i;
 
        for (i = 1; i <= insn_cnt; i++, insn++) {
-               if (insn->code == (BPF_JMP | BPF_TAIL_CALL))
-                       *tail_call_seen = true;
                if (insn->dst_reg == BPF_REG_6 || insn->src_reg == BPF_REG_6)
                        regs_used[0] = true;
                if (insn->dst_reg == BPF_REG_7 || insn->src_reg == BPF_REG_7)
@@ -1324,7 +1322,6 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image, u8 *rw_image
        struct bpf_insn *insn = bpf_prog->insnsi;
        bool callee_regs_used[4] = {};
        int insn_cnt = bpf_prog->len;
-       bool tail_call_seen = false;
        bool seen_exit = false;
        u8 temp[BPF_MAX_INSN_SIZE + BPF_INSN_SAFETY];
        u64 arena_vm_start, user_vm_start;
@@ -1336,11 +1333,7 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image, u8 *rw_image
        arena_vm_start = bpf_arena_get_kern_vm_start(bpf_prog->aux->arena);
        user_vm_start = bpf_arena_get_user_vm_start(bpf_prog->aux->arena);
 
-       detect_reg_usage(insn, insn_cnt, callee_regs_used,
-                        &tail_call_seen);
-
-       /* tail call's presence in current prog implies it is reachable */
-       tail_call_reachable |= tail_call_seen;
+       detect_reg_usage(insn, insn_cnt, callee_regs_used);
 
        emit_prologue(&prog, bpf_prog->aux->stack_depth,
                      bpf_prog_was_classic(bpf_prog), tail_call_reachable,