On Fri, Jan 6, 2023 at 11:51 AM David Vernet <void@xxxxxxxxxxxxx> wrote: > > kfuncs are functions defined in the kernel, which may be invoked by BPF > programs. They may or may not also be used as regular kernel functions, > implying that they may be static (in which case the compiler could e.g. > inline it away), or it could have external linkage, but potentially be > elided in an LTO build if a function is observed to never be used, and > is stripped from the final kernel binary. > > We therefore require some convenience macro that kfunc developers can > use just add to their kfuncs, and which will prevent all of the above > issues from happening. This is in contrast with what we have today, > where some kfunc definitions have "noinline", some have "__used", and > others are static and have neither. > > In addition to providing the obvious correctness benefits, having such a > macro / tag also provides the following advantages: > > - Giving an easy and intuitive thing to query for if people are looking > for kfuncs, as Christoph suggested at the kernel maintainers summit > (https://lwn.net/Articles/908464/). This is currently possible by > grepping for BTF_ID_FLAGS(func, but having something more self > describing would be useful as well. > > - In the future, the tag can be expanded with other useful things such > as the ability to suppress -Wmissing-prototype for the kfuncs rather > than requiring developers to surround the kfunc with __diags to > suppress the warning (this requires compiler support that as far as I > know currently does not exist). Have you considered doing bpf_kfunc_start/bpf_kfunc_end ? The former would include: __diag_push(); __diag_ignore_all(); __used noinline Also how about using bpf_kfunc on the same line ? Then 'git grep' will be easier.