On Thu, Nov 11, 2021 at 07:34:38AM IST, Vinicius Costa Gomes wrote: > Hi Kartikeya, > > Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> writes: > > > On Thu, Nov 11, 2021 at 05:21:53AM IST, Vinicius Costa Gomes wrote: > >> Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> writes: > >> > >> >> Thanks for the fix. > >> >> > >> >> But instead of moving this to core.c, you can probably make the btf.h > >> >> declaration conditional on CONFIG_BPF_SYSCALL, since this is not useful in > >> >> isolation (only used by verifier for module kfunc support). For the case of > >> >> kfunc_btf_id_list variables, just define it as an empty struct and static > >> >> variables, since the definition is still inside btf.c. So it becomes a noop for > >> >> !CONFIG_BPF_SYSCALL. > >> >> > >> >> I am also not sure whether BTF is useful without BPF support, but maybe I'm > >> >> missing some usecase. > >> > > >> > Unlikely. I would just disallow such config instead of sprinkling > >> > the code with ifdefs. > >> > >> Is something like this what you have in mind? > >> > >> diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug > >> index 6fdbf9613aec..eae860c86e26 100644 > >> --- a/lib/Kconfig.debug > >> +++ b/lib/Kconfig.debug > >> @@ -316,6 +316,7 @@ config DEBUG_INFO_BTF > >> bool "Generate BTF typeinfo" > >> depends on !DEBUG_INFO_SPLIT && !DEBUG_INFO_REDUCED > >> depends on !GCC_PLUGIN_RANDSTRUCT || COMPILE_TEST > >> + depends on BPF_SYSCALL > >> help > >> Generate deduplicated BTF type information from DWARF debug info. > >> Turning this on expects presence of pahole tool, which will convert > >> > >> > > > > BTW, you will need a little more than that, I suspect the compiler optimizes out > > the register/unregister call so we don't see a build failure, but adding a side > > effect gives me errors, so something like this should resolve the problem (since > > kfunc_btf_id_list variable definition is behind CONFIG_BPF_SYSCALL). > > > > diff --git a/include/linux/btf.h b/include/linux/btf.h > > index 203eef993d76..e9881ef9e9aa 100644 > > --- a/include/linux/btf.h > > +++ b/include/linux/btf.h > > @@ -254,6 +254,8 @@ void unregister_kfunc_btf_id_set(struct kfunc_btf_id_list *l, > > struct kfunc_btf_id_set *s); > > bool bpf_check_mod_kfunc_call(struct kfunc_btf_id_list *klist, u32 kfunc_id, > > struct module *owner); > > +extern struct kfunc_btf_id_list bpf_tcp_ca_kfunc_list; > > +extern struct kfunc_btf_id_list prog_test_kfunc_list; > > #else > > static inline void register_kfunc_btf_id_set(struct kfunc_btf_id_list *l, > > struct kfunc_btf_id_set *s) > > @@ -268,13 +270,13 @@ static inline bool bpf_check_mod_kfunc_call(struct kfunc_btf_id_list *klist, > > { > > return false; > > } > > +struct kfunc_btf_id_list {}; > > +static struct kfunc_btf_id_list bpf_tcp_ca_kfunc_list __maybe_unused; > > +static struct kfunc_btf_id_list prog_test_kfunc_list __maybe_unused; > > + > > #endif > > > > #define DEFINE_KFUNC_BTF_ID_SET(set, name) \ > > struct kfunc_btf_id_set name = { LIST_HEAD_INIT(name.list), (set), \ > > THIS_MODULE } > > - > > -extern struct kfunc_btf_id_list bpf_tcp_ca_kfunc_list; > > -extern struct kfunc_btf_id_list prog_test_kfunc_list; > > - > > #endif > > > > I could not reproduce the build failure here even when adding some side > effects, but I didn't try very hard. > > As you are more familiar with the code, I would be glad if you could > take it from here and propose a patch. > Sure, no worries! > > Cheers, > -- > Vinicius -- Kartikeya