mbox series

[bpf-next,v2,0/6] bpf trampoline for arm64

Message ID 20220414162220.1985095-1-xukuohai@huawei.com (mailing list archive)
Headers show
Series bpf trampoline for arm64 | expand

Message

Xu Kuohai April 14, 2022, 4:22 p.m. UTC
Add bpf trampoline support for arm64. Most of the logic is the same as
x86.

Tested on qemu, result:
 #55 fentry_fexit:OK
 #56 fentry_test:OK
 #58 fexit_sleep:OK
 #59 fexit_stress:OK
 #60 fexit_test:OK
 #67 get_func_args_test:OK
 #68 get_func_ip_test:OK
 #101 modify_return:OK

v2:
- Add Song's ACK
- Change the multi-line comment in is_valid_bpf_tramp_flags() into net
  style (patch 3)
- Fix a deadloop issue in ftrace selftest (patch 2)
- Replace pt_regs->x0 with pt_regs->orig_x0 in patch 1 commit message 
- Replace "bpf trampoline" with "custom trampoline" in patch 1, as
  ftrace direct call is not only used by bpf trampoline.

v1: https://lore.kernel.org/bpf/20220413054959.1053668-1-xukuohai@huawei.com/

Xu Kuohai (6):
  arm64: ftrace: Add ftrace direct call support
  ftrace: Fix deadloop caused by direct call in ftrace selftest
  bpf: Move is_valid_bpf_tramp_flags() to the public trampoline code
  bpf, arm64: Impelment bpf_arch_text_poke() for arm64
  bpf, arm64: bpf trampoline for arm64
  selftests/bpf: Fix trivial typo in fentry_fexit.c

 arch/arm64/Kconfig                            |   2 +
 arch/arm64/include/asm/ftrace.h               |  10 +
 arch/arm64/kernel/asm-offsets.c               |   1 +
 arch/arm64/kernel/entry-ftrace.S              |  28 +-
 arch/arm64/net/bpf_jit.h                      |  14 +-
 arch/arm64/net/bpf_jit_comp.c                 | 390 +++++++++++++++++-
 arch/x86/net/bpf_jit_comp.c                   |  20 -
 include/linux/bpf.h                           |   5 +
 kernel/bpf/bpf_struct_ops.c                   |   4 +-
 kernel/bpf/trampoline.c                       |  35 +-
 kernel/trace/trace_selftest.c                 |   4 +-
 .../selftests/bpf/prog_tests/fentry_fexit.c   |   4 +-
 12 files changed, 482 insertions(+), 35 deletions(-)

Comments

Hou Tao April 15, 2022, 2:37 a.m. UTC | #1
Hi,

On 4/15/2022 12:22 AM, Xu Kuohai wrote:
> Add bpf trampoline support for arm64. Most of the logic is the same as
> x86.
>
> Tested on qemu, result:
>  #55 fentry_fexit:OK
>  #56 fentry_test:OK
>  #58 fexit_sleep:OK
>  #59 fexit_stress:OK
>  #60 fexit_test:OK
>  #67 get_func_args_test:OK
>  #68 get_func_ip_test:OK
>  #101 modify_return:OK
bpf_struct_ops also depends on bpf trampoline, could you please also add the
test results for bpf_struct_ops related tests case ?
>
> v2:
> - Add Song's ACK
> - Change the multi-line comment in is_valid_bpf_tramp_flags() into net
>   style (patch 3)
> - Fix a deadloop issue in ftrace selftest (patch 2)
> - Replace pt_regs->x0 with pt_regs->orig_x0 in patch 1 commit message 
> - Replace "bpf trampoline" with "custom trampoline" in patch 1, as
>   ftrace direct call is not only used by bpf trampoline.
>
> v1: https://lore.kernel.org/bpf/20220413054959.1053668-1-xukuohai@huawei.com/
>
> Xu Kuohai (6):
>   arm64: ftrace: Add ftrace direct call support
>   ftrace: Fix deadloop caused by direct call in ftrace selftest
>   bpf: Move is_valid_bpf_tramp_flags() to the public trampoline code
>   bpf, arm64: Impelment bpf_arch_text_poke() for arm64
>   bpf, arm64: bpf trampoline for arm64
>   selftests/bpf: Fix trivial typo in fentry_fexit.c
>
>  arch/arm64/Kconfig                            |   2 +
>  arch/arm64/include/asm/ftrace.h               |  10 +
>  arch/arm64/kernel/asm-offsets.c               |   1 +
>  arch/arm64/kernel/entry-ftrace.S              |  28 +-
>  arch/arm64/net/bpf_jit.h                      |  14 +-
>  arch/arm64/net/bpf_jit_comp.c                 | 390 +++++++++++++++++-
>  arch/x86/net/bpf_jit_comp.c                   |  20 -
>  include/linux/bpf.h                           |   5 +
>  kernel/bpf/bpf_struct_ops.c                   |   4 +-
>  kernel/bpf/trampoline.c                       |  35 +-
>  kernel/trace/trace_selftest.c                 |   4 +-
>  .../selftests/bpf/prog_tests/fentry_fexit.c   |   4 +-
>  12 files changed, 482 insertions(+), 35 deletions(-)
>
Xu Kuohai April 15, 2022, 3:47 a.m. UTC | #2
On 4/15/2022 10:37 AM, Hou Tao wrote:
> Hi,
> 
> On 4/15/2022 12:22 AM, Xu Kuohai wrote:
>> Add bpf trampoline support for arm64. Most of the logic is the same as
>> x86.
>>
>> Tested on qemu, result:
>>  #55 fentry_fexit:OK
>>  #56 fentry_test:OK
>>  #58 fexit_sleep:OK
>>  #59 fexit_stress:OK
>>  #60 fexit_test:OK
>>  #67 get_func_args_test:OK
>>  #68 get_func_ip_test:OK
>>  #101 modify_return:OK
> bpf_struct_ops also depends on bpf trampoline, could you please also add the
> test results for bpf_struct_ops related tests case ?

Yes, more tests is needed. I'm curently testing with bpftrace's kfunc
and bpf selftest, more testing results will be posted.

>>
>> v2:
>> - Add Song's ACK
>> - Change the multi-line comment in is_valid_bpf_tramp_flags() into net
>>   style (patch 3)
>> - Fix a deadloop issue in ftrace selftest (patch 2)
>> - Replace pt_regs->x0 with pt_regs->orig_x0 in patch 1 commit message 
>> - Replace "bpf trampoline" with "custom trampoline" in patch 1, as
>>   ftrace direct call is not only used by bpf trampoline.
>>
>> v1: https://lore.kernel.org/bpf/20220413054959.1053668-1-xukuohai@huawei.com/
>>
>> Xu Kuohai (6):
>>   arm64: ftrace: Add ftrace direct call support
>>   ftrace: Fix deadloop caused by direct call in ftrace selftest
>>   bpf: Move is_valid_bpf_tramp_flags() to the public trampoline code
>>   bpf, arm64: Impelment bpf_arch_text_poke() for arm64
>>   bpf, arm64: bpf trampoline for arm64
>>   selftests/bpf: Fix trivial typo in fentry_fexit.c
>>
>>  arch/arm64/Kconfig                            |   2 +
>>  arch/arm64/include/asm/ftrace.h               |  10 +
>>  arch/arm64/kernel/asm-offsets.c               |   1 +
>>  arch/arm64/kernel/entry-ftrace.S              |  28 +-
>>  arch/arm64/net/bpf_jit.h                      |  14 +-
>>  arch/arm64/net/bpf_jit_comp.c                 | 390 +++++++++++++++++-
>>  arch/x86/net/bpf_jit_comp.c                   |  20 -
>>  include/linux/bpf.h                           |   5 +
>>  kernel/bpf/bpf_struct_ops.c                   |   4 +-
>>  kernel/bpf/trampoline.c                       |  35 +-
>>  kernel/trace/trace_selftest.c                 |   4 +-
>>  .../selftests/bpf/prog_tests/fentry_fexit.c   |   4 +-
>>  12 files changed, 482 insertions(+), 35 deletions(-)
>>
> 
> .