On Wed, Aug 27, 2025 at 4:19 AM Hengqi Chen <hengqi.chen@xxxxxxxxx> wrote: > > The following two selftest cases triggers oops on LoongArch: > > $ ./test_progs -a ns_bpf_qdisc -a tracing_struct Last time I skipped struct_ops test and now I updated the test accordingly, no kernel hangs and test result is expected for this series: ./test_progs \ --deny=module_attach \ --deny=subprogs_extable \ --deny=timer_lockup \ --json-summary="./bpf_selftests.json" #213/1 ns_bpf_qdisc/fifo:OK #213/2 ns_bpf_qdisc/fq:OK #213/3 ns_bpf_qdisc/attach to mq:OK #213/4 ns_bpf_qdisc/attach to non root:OK #213/5 ns_bpf_qdisc/incompl_ops:OK #213 ns_bpf_qdisc:OK #408/1 struct_ops_autocreate/cant_load_full_object:OK #408/2 struct_ops_autocreate/can_load_partial_object:OK #408/3 struct_ops_autocreate/autoload_and_shadow_vars:OK #408/4 struct_ops_autocreate/optional_maps:OK #408 struct_ops_autocreate:OK #409/1 struct_ops_kptr_return/kptr_return:OK #409/2 struct_ops_kptr_return/kptr_return_fail__wrong_type:OK #409/3 struct_ops_kptr_return/kptr_return_fail__invalid_scalar:OK #409/4 struct_ops_kptr_return/kptr_return_fail__nonzero_offset:OK #409/5 struct_ops_kptr_return/kptr_return_fail__local_kptr:OK #409 struct_ops_kptr_return:OK #410/1 struct_ops_maybe_null/maybe_null:OK #410/2 struct_ops_maybe_null/maybe_null_fail:OK #410 struct_ops_maybe_null:OK #411/1 struct_ops_module/struct_ops_load:OK #411/2 struct_ops_module/struct_ops_not_zeroed:OK #411/3 struct_ops_module/struct_ops_incompatible:OK #411/4 struct_ops_module/struct_ops_null_out_cb:OK #411/5 struct_ops_module/struct_ops_forgotten_cb:OK #411/6 struct_ops_module/test_detach_link:OK #411/7 struct_ops_module/unsupported_ops:OK #411 struct_ops_module:OK do_struct_ops_multi_pages:PASS:struct_ops_multi_pages_open_and_load 0 nsec do_struct_ops_multi_pages:FAIL:attach_multi_pages unexpected error: -7 #412/1 struct_ops_multi_pages/multi_pages:FAIL #412 struct_ops_multi_pages:FAIL #413/1 struct_ops_no_cfi/load_bpf_test_no_cfi:OK #413 struct_ops_no_cfi:OK #414/1 struct_ops_private_stack/private_stack:SKIP #414/2 struct_ops_private_stack/private_stack_fail:SKIP #414/3 struct_ops_private_stack/private_stack_recur:SKIP #414 struct_ops_private_stack:SKIP #415/1 struct_ops_refcounted/refcounted:OK #415/2 struct_ops_refcounted/refcounted_fail__ref_leak:OK #415/3 struct_ops_refcounted/refcounted_fail__global_subprog:OK #415/4 struct_ops_refcounted/refcounted_fail__tail_call:OK #415 struct_ops_refcounted:OK test_struct_args:PASS:tracing_struct__open_and_load 0 nsec libbpf: prog 'test_struct_arg_1': failed to attach: -ENOTSUPP libbpf: prog 'test_struct_arg_1': failed to auto-attach: -ENOTSUPP test_struct_args:FAIL:tracing_struct__attach unexpected error: -524 (errno 524) #468/1 tracing_struct/struct_args:FAIL test_struct_many_args:PASS:tracing_struct_many_args__open_and_load 0 nsec libbpf: prog 'test_struct_many_args_1': failed to attach: -ENOTSUPP libbpf: prog 'test_struct_many_args_1': failed to auto-attach: -ENOTSUPP test_struct_many_args:FAIL:tracing_struct_many_args__attach unexpected error: -524 (errno 524) > > This small series tries to fix/workaround these issues. > See individual commit for details. > > While at it, remove a duplicated flags check in __arch_prepare_bpf_trampoline(). > > v1 -> v2: > * collect Acked-by/Tested-by tags > * update sign_extend() in patch 2 as suggested by Huacai > > Hengqi Chen (3): > LoongArch: BPF: Remove duplicated flags check > LoongArch: BPF: Sign extend struct ops return values properly > LoongArch: BPF: No support of struct argument in trampoline programs > > arch/loongarch/net/bpf_jit.c | 35 ++++++++++++++++++++++++++++++++--- > 1 file changed, 32 insertions(+), 3 deletions(-) > > -- > 2.43.5