Re: [PATCH bpf-next 04/17] bpf: Add struct bpf_tramp_node object
From: kernel test robot <hidden>
Date: 2026-02-20 21:05:57
Also in:
bpf, oe-kbuild-all
Hi Jiri, kernel test robot noticed the following build errors: [auto build test ERROR on bpf-next/master] url: https://github.com/intel-lab-lkp/linux/commits/Jiri-Olsa/ftrace-Add-ftrace_hash_count-function/20260220-181324 base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master patch link: https://lore.kernel.org/r/20260220100649.628307-5-jolsa%40kernel.org patch subject: [PATCH bpf-next 04/17] bpf: Add struct bpf_tramp_node object config: riscv-allnoconfig-bpf (https://download.01.org/0day-ci/archive/20260220/202602202212.yC5wLunx-lkp@intel.com/config) compiler: riscv64-linux-gnu-gcc (Debian 14.2.0-19) 14.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260220/202602202212.yC5wLunx-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot [off-list ref] | Closes: https://lore.kernel.org/oe-kbuild-all/202602202212.yC5wLunx-lkp@intel.com/ (local) All errors (new ones prefixed by >>): arch/riscv/net/bpf_jit_comp64.c: In function 'invoke_bpf_prog':
quoted
arch/riscv/net/bpf_jit_comp64.c:944:14: error: 'struct bpf_tramp_link' has no member named 'cookie'
944 | if (l->cookie)
| ^~
arch/riscv/net/bpf_jit_comp64.c:945:79: error: 'struct bpf_tramp_link' has no member named 'cookie'
945 | emit_store_stack_imm64(RV_REG_T1, -run_ctx_off + cookie_off, l->cookie, ctx);
| ^~
arch/riscv/net/bpf_jit_comp64.c: At top level:
arch/riscv/net/bpf_jit_comp64.c:999:30: warning: 'struct bpf_tramp_links' declared inside parameter list will not be visible outside of this definition or declaration
999 | static int invoke_bpf(struct bpf_tramp_links *tl, int args_off, int retval_off,
| ^~~~~~~~~~~~~~~
arch/riscv/net/bpf_jit_comp64.c: In function 'invoke_bpf':quoted
arch/riscv/net/bpf_jit_comp64.c:1005:27: error: invalid use of undefined type 'struct bpf_tramp_links'
1005 | for (i = 0; i < tl->nr_links; i++) {
| ^~
arch/riscv/net/bpf_jit_comp64.c:1008:53: error: invalid use of undefined type 'struct bpf_tramp_links'
1008 | if (bpf_prog_calls_session_cookie(tl->links[i])) {
| ^~
arch/riscv/net/bpf_jit_comp64.c:1014:41: error: invalid use of undefined type 'struct bpf_tramp_links'
1014 | err = invoke_bpf_prog(tl->links[i], args_off, retval_off, run_ctx_off,
| ^~
arch/riscv/net/bpf_jit_comp64.c: At top level:
arch/riscv/net/bpf_jit_comp64.c:1024:49: warning: 'struct bpf_tramp_links' declared inside parameter list will not be visible outside of this definition or declaration
1024 | struct bpf_tramp_links *tlinks,
| ^~~~~~~~~~~~~~~
arch/riscv/net/bpf_jit_comp64.c: In function '__arch_prepare_bpf_trampoline':
arch/riscv/net/bpf_jit_comp64.c:1033:49: error: invalid use of undefined type 'struct bpf_tramp_links'
1033 | struct bpf_tramp_links *fentry = &tlinks[BPF_TRAMP_FENTRY];
| ^
arch/riscv/net/bpf_jit_comp64.c:1034:48: error: invalid use of undefined type 'struct bpf_tramp_links'
1034 | struct bpf_tramp_links *fexit = &tlinks[BPF_TRAMP_FEXIT];
| ^
arch/riscv/net/bpf_jit_comp64.c:1035:51: error: invalid use of undefined type 'struct bpf_tramp_links'
1035 | struct bpf_tramp_links *fmod_ret = &tlinks[BPF_TRAMP_MODIFY_RETURN];
| ^
arch/riscv/net/bpf_jit_comp64.c:1118:46: error: passing argument 1 of 'bpf_fsession_cookie_cnt' from incompatible pointer type [-Wincompatible-pointer-types]
1118 | cookie_cnt = bpf_fsession_cookie_cnt(tlinks);
| ^~~~~~
| |
| struct bpf_tramp_links *
In file included from arch/riscv/net/bpf_jit_comp64.c:9:
./include/linux/bpf.h:2207:67: note: expected 'struct bpf_tramp_nodes *' but argument is of type 'struct bpf_tramp_links *'
2207 | static inline int bpf_fsession_cookie_cnt(struct bpf_tramp_nodes *nodes)
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
arch/riscv/net/bpf_jit_comp64.c:1175:30: error: passing argument 1 of 'bpf_fsession_cnt' from incompatible pointer type [-Wincompatible-pointer-types]
1175 | if (bpf_fsession_cnt(tlinks)) {
| ^~~~~~
| |
| struct bpf_tramp_links *
./include/linux/bpf.h:2189:60: note: expected 'struct bpf_tramp_nodes *' but argument is of type 'struct bpf_tramp_links *'
2189 | static inline int bpf_fsession_cnt(struct bpf_tramp_nodes *nodes)
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
arch/riscv/net/bpf_jit_comp64.c:1190:19: error: invalid use of undefined type 'struct bpf_tramp_links'
1190 | if (fentry->nr_links) {
| ^~
arch/riscv/net/bpf_jit_comp64.c:1191:34: error: passing argument 1 of 'invoke_bpf' from incompatible pointer type [-Wincompatible-pointer-types]
1191 | ret = invoke_bpf(fentry, args_off, retval_off, run_ctx_off, func_meta_off,
| ^~~~~~
| |
| struct bpf_tramp_links *
arch/riscv/net/bpf_jit_comp64.c:999:47: note: expected 'struct bpf_tramp_links *' but argument is of type 'struct bpf_tramp_links *'
999 | static int invoke_bpf(struct bpf_tramp_links *tl, int args_off, int retval_off,
| ~~~~~~~~~~~~~~~~~~~~~~~~^~
arch/riscv/net/bpf_jit_comp64.c:1197:21: error: invalid use of undefined type 'struct bpf_tramp_links'
1197 | if (fmod_ret->nr_links) {
| ^~
In file included from ./include/linux/workqueue.h:9,
from ./include/linux/bpf.h:11:
arch/riscv/net/bpf_jit_comp64.c:1198:48: error: invalid use of undefined type 'struct bpf_tramp_links'
1198 | branches_off = kcalloc(fmod_ret->nr_links, sizeof(int), GFP_KERNEL);
| ^~
./include/linux/alloc_tag.h:251:16: note: in definition of macro 'alloc_hooks_tag'
251 | typeof(_do_alloc) _res; \
| ^~~~~~~~~
./include/linux/slab.h:1115:49: note: in expansion of macro 'alloc_hooks'
1115 | #define kmalloc_array(...) alloc_hooks(kmalloc_array_noprof(__VA_ARGS__))
| ^~~~~~~~~~~
./include/linux/slab.h:1154:41: note: in expansion of macro 'kmalloc_array'
1154 | #define kcalloc(n, size, flags) kmalloc_array(n, size, (flags) | __GFP_ZERO)
| ^~~~~~~~~~~~~
arch/riscv/net/bpf_jit_comp64.c:1198:32: note: in expansion of macro 'kcalloc'
1198 | branches_off = kcalloc(fmod_ret->nr_links, sizeof(int), GFP_KERNEL);
| ^~~~~~~
arch/riscv/net/bpf_jit_comp64.c:1198:48: error: invalid use of undefined type 'struct bpf_tramp_links'
1198 | branches_off = kcalloc(fmod_ret->nr_links, sizeof(int), GFP_KERNEL);
| ^~
./include/linux/alloc_tag.h:255:24: note: in definition of macro 'alloc_hooks_tag'
255 | _res = _do_alloc; \
| ^~~~~~~~~
./include/linux/slab.h:1115:49: note: in expansion of macro 'alloc_hooks'
1115 | #define kmalloc_array(...) alloc_hooks(kmalloc_array_noprof(__VA_ARGS__))
| ^~~~~~~~~~~
./include/linux/slab.h:1154:41: note: in expansion of macro 'kmalloc_array'
1154 | #define kcalloc(n, size, flags) kmalloc_array(n, size, (flags) | __GFP_ZERO)
| ^~~~~~~~~~~~~
arch/riscv/net/bpf_jit_comp64.c:1198:32: note: in expansion of macro 'kcalloc'
1198 | branches_off = kcalloc(fmod_ret->nr_links, sizeof(int), GFP_KERNEL);
| ^~~~~~~
arch/riscv/net/bpf_jit_comp64.c:1198:48: error: invalid use of undefined type 'struct bpf_tramp_links'
1198 | branches_off = kcalloc(fmod_ret->nr_links, sizeof(int), GFP_KERNEL);
| ^~
./include/linux/alloc_tag.h:258:24: note: in definition of macro 'alloc_hooks_tag'
258 | _res = _do_alloc; \
| ^~~~~~~~~
./include/linux/slab.h:1115:49: note: in expansion of macro 'alloc_hooks'
1115 | #define kmalloc_array(...) alloc_hooks(kmalloc_array_noprof(__VA_ARGS__))
| ^~~~~~~~~~~
./include/linux/slab.h:1154:41: note: in expansion of macro 'kmalloc_array'
1154 | #define kcalloc(n, size, flags) kmalloc_array(n, size, (flags) | __GFP_ZERO)
| ^~~~~~~~~~~~~
arch/riscv/net/bpf_jit_comp64.c:1198:32: note: in expansion of macro 'kcalloc'
1198 | branches_off = kcalloc(fmod_ret->nr_links, sizeof(int), GFP_KERNEL);
| ^~~~~~~
vim +944 arch/riscv/net/bpf_jit_comp64.c
93fd420d71beed Menglong Dong 2026-02-08 936
49b5e77ae3e214 Pu Lehui 2023-02-15 937 static int invoke_bpf_prog(struct bpf_tramp_link *l, int args_off, int retval_off,
49b5e77ae3e214 Pu Lehui 2023-02-15 938 int run_ctx_off, bool save_ret, struct rv_jit_context *ctx)
49b5e77ae3e214 Pu Lehui 2023-02-15 939 {
49b5e77ae3e214 Pu Lehui 2023-02-15 940 int ret, branch_off;
49b5e77ae3e214 Pu Lehui 2023-02-15 941 struct bpf_prog *p = l->link.prog;
49b5e77ae3e214 Pu Lehui 2023-02-15 942 int cookie_off = offsetof(struct bpf_tramp_run_ctx, bpf_cookie);
49b5e77ae3e214 Pu Lehui 2023-02-15 943
93fd420d71beed Menglong Dong 2026-02-08 @944 if (l->cookie)
93fd420d71beed Menglong Dong 2026-02-08 945 emit_store_stack_imm64(RV_REG_T1, -run_ctx_off + cookie_off, l->cookie, ctx);
93fd420d71beed Menglong Dong 2026-02-08 946 else
49b5e77ae3e214 Pu Lehui 2023-02-15 947 emit_sd(RV_REG_FP, -run_ctx_off + cookie_off, RV_REG_ZERO, ctx);
49b5e77ae3e214 Pu Lehui 2023-02-15 948
49b5e77ae3e214 Pu Lehui 2023-02-15 949 /* arg1: prog */
49b5e77ae3e214 Pu Lehui 2023-02-15 950 emit_imm(RV_REG_A0, (const s64)p, ctx);
49b5e77ae3e214 Pu Lehui 2023-02-15 951 /* arg2: &run_ctx */
49b5e77ae3e214 Pu Lehui 2023-02-15 952 emit_addi(RV_REG_A1, RV_REG_FP, -run_ctx_off, ctx);
49b5e77ae3e214 Pu Lehui 2023-02-15 953 ret = emit_call((const u64)bpf_trampoline_enter(p), true, ctx);
49b5e77ae3e214 Pu Lehui 2023-02-15 954 if (ret)
49b5e77ae3e214 Pu Lehui 2023-02-15 955 return ret;
49b5e77ae3e214 Pu Lehui 2023-02-15 956
10541b374aa05c Xu Kuohai 2024-04-16 957 /* store prog start time */
10541b374aa05c Xu Kuohai 2024-04-16 958 emit_mv(RV_REG_S1, RV_REG_A0, ctx);
10541b374aa05c Xu Kuohai 2024-04-16 959
49b5e77ae3e214 Pu Lehui 2023-02-15 960 /* if (__bpf_prog_enter(prog) == 0)
49b5e77ae3e214 Pu Lehui 2023-02-15 961 * goto skip_exec_of_prog;
49b5e77ae3e214 Pu Lehui 2023-02-15 962 */
49b5e77ae3e214 Pu Lehui 2023-02-15 963 branch_off = ctx->ninsns;
49b5e77ae3e214 Pu Lehui 2023-02-15 964 /* nop reserved for conditional jump */
49b5e77ae3e214 Pu Lehui 2023-02-15 965 emit(rv_nop(), ctx);
49b5e77ae3e214 Pu Lehui 2023-02-15 966
49b5e77ae3e214 Pu Lehui 2023-02-15 967 /* arg1: &args_off */
49b5e77ae3e214 Pu Lehui 2023-02-15 968 emit_addi(RV_REG_A0, RV_REG_FP, -args_off, ctx);
49b5e77ae3e214 Pu Lehui 2023-02-15 969 if (!p->jited)
49b5e77ae3e214 Pu Lehui 2023-02-15 970 /* arg2: progs[i]->insnsi for interpreter */
49b5e77ae3e214 Pu Lehui 2023-02-15 971 emit_imm(RV_REG_A1, (const s64)p->insnsi, ctx);
49b5e77ae3e214 Pu Lehui 2023-02-15 972 ret = emit_call((const u64)p->bpf_func, true, ctx);
49b5e77ae3e214 Pu Lehui 2023-02-15 973 if (ret)
49b5e77ae3e214 Pu Lehui 2023-02-15 974 return ret;
49b5e77ae3e214 Pu Lehui 2023-02-15 975
7112cd26e606c7 Björn Töpel 2023-10-04 976 if (save_ret) {
7112cd26e606c7 Björn Töpel 2023-10-04 977 emit_sd(RV_REG_FP, -retval_off, RV_REG_A0, ctx);
7112cd26e606c7 Björn Töpel 2023-10-04 978 emit_sd(RV_REG_FP, -(retval_off - 8), regmap[BPF_REG_0], ctx);
7112cd26e606c7 Björn Töpel 2023-10-04 979 }
49b5e77ae3e214 Pu Lehui 2023-02-15 980
49b5e77ae3e214 Pu Lehui 2023-02-15 981 /* update branch with beqz */
49b5e77ae3e214 Pu Lehui 2023-02-15 982 if (ctx->insns) {
49b5e77ae3e214 Pu Lehui 2023-02-15 983 int offset = ninsns_rvoff(ctx->ninsns - branch_off);
49b5e77ae3e214 Pu Lehui 2023-02-15 984 u32 insn = rv_beq(RV_REG_A0, RV_REG_ZERO, offset >> 1);
49b5e77ae3e214 Pu Lehui 2023-02-15 985 *(u32 *)(ctx->insns + branch_off) = insn;
49b5e77ae3e214 Pu Lehui 2023-02-15 986 }
49b5e77ae3e214 Pu Lehui 2023-02-15 987
49b5e77ae3e214 Pu Lehui 2023-02-15 988 /* arg1: prog */
49b5e77ae3e214 Pu Lehui 2023-02-15 989 emit_imm(RV_REG_A0, (const s64)p, ctx);
49b5e77ae3e214 Pu Lehui 2023-02-15 990 /* arg2: prog start time */
49b5e77ae3e214 Pu Lehui 2023-02-15 991 emit_mv(RV_REG_A1, RV_REG_S1, ctx);
49b5e77ae3e214 Pu Lehui 2023-02-15 992 /* arg3: &run_ctx */
49b5e77ae3e214 Pu Lehui 2023-02-15 993 emit_addi(RV_REG_A2, RV_REG_FP, -run_ctx_off, ctx);
49b5e77ae3e214 Pu Lehui 2023-02-15 994 ret = emit_call((const u64)bpf_trampoline_exit(p), true, ctx);
49b5e77ae3e214 Pu Lehui 2023-02-15 995
49b5e77ae3e214 Pu Lehui 2023-02-15 996 return ret;
49b5e77ae3e214 Pu Lehui 2023-02-15 997 }
49b5e77ae3e214 Pu Lehui 2023-02-15 998
35b3515be0ecb9 Menglong Dong 2026-02-08 999 static int invoke_bpf(struct bpf_tramp_links *tl, int args_off, int retval_off,
35b3515be0ecb9 Menglong Dong 2026-02-08 1000 int run_ctx_off, int func_meta_off, bool save_ret, u64 func_meta,
35b3515be0ecb9 Menglong Dong 2026-02-08 1001 int cookie_off, struct rv_jit_context *ctx)
35b3515be0ecb9 Menglong Dong 2026-02-08 1002 {
35b3515be0ecb9 Menglong Dong 2026-02-08 1003 int i, cur_cookie = (cookie_off - args_off) / 8;
35b3515be0ecb9 Menglong Dong 2026-02-08 1004
35b3515be0ecb9 Menglong Dong 2026-02-08 @1005 for (i = 0; i < tl->nr_links; i++) {
35b3515be0ecb9 Menglong Dong 2026-02-08 1006 int err;
35b3515be0ecb9 Menglong Dong 2026-02-08 1007
35b3515be0ecb9 Menglong Dong 2026-02-08 1008 if (bpf_prog_calls_session_cookie(tl->links[i])) {
35b3515be0ecb9 Menglong Dong 2026-02-08 1009 u64 meta = func_meta | ((u64)cur_cookie << BPF_TRAMP_COOKIE_INDEX_SHIFT);
35b3515be0ecb9 Menglong Dong 2026-02-08 1010
35b3515be0ecb9 Menglong Dong 2026-02-08 1011 emit_store_stack_imm64(RV_REG_T1, -func_meta_off, meta, ctx);
35b3515be0ecb9 Menglong Dong 2026-02-08 1012 cur_cookie--;
35b3515be0ecb9 Menglong Dong 2026-02-08 1013 }
35b3515be0ecb9 Menglong Dong 2026-02-08 1014 err = invoke_bpf_prog(tl->links[i], args_off, retval_off, run_ctx_off,
35b3515be0ecb9 Menglong Dong 2026-02-08 1015 save_ret, ctx);
35b3515be0ecb9 Menglong Dong 2026-02-08 1016 if (err)
35b3515be0ecb9 Menglong Dong 2026-02-08 1017 return err;
35b3515be0ecb9 Menglong Dong 2026-02-08 1018 }
35b3515be0ecb9 Menglong Dong 2026-02-08 1019 return 0;
35b3515be0ecb9 Menglong Dong 2026-02-08 1020 }
35b3515be0ecb9 Menglong Dong 2026-02-08 1021
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki