Support probing for kfuncs availability
Similarly to what we do for program types, map types, helpers, and a few other components, we could look into dumping supported kfuncs with bpftool feature probe.
It is not clear yet what the probes would look like.
Interesting, I thought kfuncs were encoded into BTF. I see a reference to that here: https://github.com/torvalds/linux/blob/0e389834672c723435a44818ed2cabc4dad24429/kernel/bpf/btf.c#L7669
Mind double checking me on that? If kfuncs availability can be pulled from BTF feel free to give this one to me -- it's been bugging me for a while
Hey, thanks Daniel for looking into this!
As far as I'm aware, kfuncs and their prototypes are indeed available in the raw BTF, but I can't see them in the vmlinux.h generated by bpftool. In the raw BTF ouput, I don't know if there's a way to distinguish them from other non-kfuncs kernel functions.
What do you have in mind, exactly?
Hey, thanks Daniel for looking into this!
As far as I'm aware, kfuncs and their prototypes are indeed available in the raw BTF, but I can't see them in the
vmlinux.hgenerated by bpftool. In the raw BTF ouput, I don't know if there's a way to distinguish them from other non-kfuncs kernel functions.
Ah makes sense. In that case, I was thinking of adding a BTF tag to all kfunc via __bpf_kfunc macro. Then bpftool could just walk all the tags and find kfunc tagged functions.
What do you have in mind, exactly?
I'm interested in two things:
- Have bpftool support a "feature dump" of all supported kfuncs on running kernel
- Have bpftool generate vmlinux.h with kfunc prototypes
Oh, BTF tags only work for clang built linux. Lemme think on it more
Would be great to have these tags, indeed. Thanks!
So I think this approach is probably still doable, except we cannot use BTF type tags from kernel side. Instead we'd probably want to teach pahole to parse the .BTF_ids section in vmlinux and generate type tags from that. But unfortunately not the quick win I was looking for :p w.r.t. how much time I can allocate to this.
Could be worth opening a thread on bpf@, I wouldn't be surprised if other people are interested in listing the kfuncs, too. Some may even have more suggestions, or cycles to take a look?