PING On 11/10/23 23:27, Leon Hwang wrote: > This patchset fixes a tailcall hierarchy issue with a better solution than v1[0]. > > v1 solution stores tail_call_cnt on the stack of bpf prog: > > | STACK | > +---------+ RBP > | | > | | > | | > +--| tcc_ptr | > +->| tcc | > | rbx | > +---------+ RSP > > v2 solution stores tail_call_cnt on the stack of bpf prog's caller: > > | STACK | > | | > | rip | > +->| tcc | > | | rip | > | | rbp | > | +---------+ RBP > | | | > | | | > | | | > +--| tcc_ptr | > | rbx | > +---------+ RSP > > With this change, it requires less instructions to resolve this issue. > > For more resolving details, please read the following patches. > > The issue is confirmed in the discussions of "bpf, x64: Fix tailcall infinite > loop"[1]. > > Currently, I only resolve this issue on x86. The ones on arm64, s390x and > loongarch are waiting to be resolved. So, the ci pipeline fails to run for this > issue fixing. > > Hopefully, this issue on s390x and arm64 will be resolved soon. > > v1 -> v2: > * address comments from Stanislav > * Separate moving emit_nops() as first patch. > > Links: > [0] https://lore.kernel.org/bpf/20231005145814.83122-1-hffilwlqm@xxxxxxxxx/ > [1] https://lore.kernel.org/bpf/6203dd01-789d-f02c-5293-def4c1b18aef@xxxxxxxxx/ > > Leon Hwang (4): > bpf, x64: Emit nops for X86_PATCH > bpf, x64: Fix tailcall hierarchy > bpf, x64: Load tail_call_cnt pointer > selftests/bpf: Add testcases for tailcall hierarchy fixing > > arch/x86/net/bpf_jit_comp.c | 99 +++-- > .../selftests/bpf/prog_tests/tailcalls.c | 418 ++++++++++++++++++ > .../bpf/progs/tailcall_bpf2bpf_hierarchy1.c | 34 ++ > .../bpf/progs/tailcall_bpf2bpf_hierarchy2.c | 55 +++ > .../bpf/progs/tailcall_bpf2bpf_hierarchy3.c | 46 ++ > 5 files changed, 606 insertions(+), 46 deletions(-) > create mode 100644 tools/testing/selftests/bpf/progs/tailcall_bpf2bpf_hierarchy1.c > create mode 100644 tools/testing/selftests/bpf/progs/tailcall_bpf2bpf_hierarchy2.c > create mode 100644 tools/testing/selftests/bpf/progs/tailcall_bpf2bpf_hierarchy3.c > > > base-commit: 644b54d80d572438a815c05b1bab2b7871e1e5a1