tree: https://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git bpf/tracing_multi_ng_4 head: e3fa3b908cc734f85477c07a0ba93480bd80702c commit: e3fa3b908cc734f85477c07a0ba93480bd80702c [23/23] bpf: Add support to attach multi trampolines config: x86_64-rhel-8.3-func compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 reproduce (this is a W=1 build): # https://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git/commit/?id=e3fa3b908cc734f85477c07a0ba93480bd80702c git remote add jolsa-perf https://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git git fetch --no-tags jolsa-perf bpf/tracing_multi_ng_4 git checkout e3fa3b908cc734f85477c07a0ba93480bd80702c # save the config file mkdir build_dir && cp config build_dir/.config make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot All errors (new ones prefixed by >>): ld: kernel/bpf/trampoline.o: in function `__bpf_trampoline_put': >> kernel/bpf/trampoline.c:906: undefined reference to `btf_bitmap_free' ld: kernel/bpf/trampoline.o: in function `bpf_trampoline_multi_attach': >> kernel/bpf/trampoline.c:1186: undefined reference to `btf_bitmap_alloc' >> ld: kernel/bpf/trampoline.c:1187: undefined reference to `btf_bitmap_alloc' >> ld: kernel/bpf/trampoline.c:1191: undefined reference to `btf_bitmap_copy' ld: kernel/bpf/trampoline.o: in function `trampoline_multi_split': >> kernel/bpf/trampoline.c:1149: undefined reference to `btf_bitmap_copy' >> ld: kernel/bpf/trampoline.c:1158: undefined reference to `btf_bitmap_andnot' ld: kernel/bpf/trampoline.o: in function `bpf_trampoline_multi_attach': >> kernel/bpf/trampoline.c:1202: undefined reference to `btf_bitmap_andnot' >> ld: kernel/bpf/trampoline.c:1194: undefined reference to `btf_bitmap_and' >> ld: kernel/bpf/trampoline.c:1195: undefined reference to `btf_bitmap_empty' ld: kernel/bpf/trampoline.o: in function `trampoline_multi_split': kernel/bpf/trampoline.c:1126: undefined reference to `btf_bitmap_alloc' ld: kernel/bpf/trampoline.c:1127: undefined reference to `btf_bitmap_alloc' >> ld: kernel/bpf/trampoline.c:1144: undefined reference to `btf_bitmap_free' ld: kernel/bpf/trampoline.c:1145: undefined reference to `btf_bitmap_free' ld: kernel/bpf/trampoline.o: in function `bpf_trampoline_multi_attach': kernel/bpf/trampoline.c:1237: undefined reference to `btf_bitmap_free' ld: kernel/bpf/trampoline.c:1238: undefined reference to `btf_bitmap_free' ld: kernel/bpf/trampoline.o: in function `trampoline_multi_split': kernel/bpf/trampoline.c:1154: undefined reference to `btf_bitmap_free' ld: kernel/bpf/trampoline.o: in function `bpf_trampoline_multi_attach': >> kernel/bpf/trampoline.c:1205: undefined reference to `btf_bitmap_empty' ld: kernel/bpf/trampoline.o: in function `trampoline_multi_split': kernel/bpf/trampoline.c:1129: undefined reference to `btf_bitmap_free' ld: kernel/bpf/trampoline.c:1130: undefined reference to `btf_bitmap_free' ld: kernel/bpf/trampoline.c:1136: undefined reference to `btf_bitmap_free' vim +906 kernel/bpf/trampoline.c 881 882 static void __bpf_trampoline_put(struct bpf_trampoline *tr) 883 { 884 int i; 885 886 if (!refcount_dec_and_test(&tr->refcnt)) 887 return; 888 WARN_ON_ONCE(mutex_is_locked(&tr->mutex)); 889 890 for (i = 0; i < BPF_TRAMP_MAX; i++) { 891 if (!tr->progs_array[i]) 892 continue; 893 if (WARN_ON_ONCE(!bpf_prog_array_is_empty(tr->progs_array[i]))) 894 return; 895 } 896 897 /* This code will be executed even when the last bpf_tramp_image 898 * is alive. All progs are detached from the trampoline and the 899 * trampoline image is patched with jmp into epilogue to skip 900 * fexit progs. The fentry-only trampoline will be freed via 901 * multiple rcu callbacks. 902 */ 903 if (list_empty(&tr->multi.list)) { 904 hlist_del(&tr->hlist); 905 } else { > 906 btf_bitmap_free(tr->multi.bmap); 907 list_del(&tr->multi.list); 908 } 909 910 hlist_del(&tr->hlist); 911 if (tr->fops) { 912 ftrace_free_filter(tr->fops); 913 kfree(tr->fops); 914 } 915 kfree(tr); 916 } 917 -- 0-DAY CI Kernel Test Service https://01.org/lkp