On Fri, Sep 25, 2026 at 10:42 PM Jay Wang <[email protected]> wrote: > + if (!data && load) { > + /* > + * The module notifier installs the BTF before init_module() > + * returns, so it is either there after this or the module is > + * not available (yet). Not cached: a later call retries, > + * e.g. once the module becomes reachable on the root fs. > + */ > + request_module("btf_vmlinux");
This will deadlock. event_btf_ids_read() calls btf_get_module_btf(NULL) with event_mutex held. With =m and BTF not loaded yet cat /sys/kernel/tracing/events/sched/sched_switch/btf_ids gets here and waits for modprobe. modprobe gets to trace_module_notify() which takes event_mutex. lockdep doesn't see it. print_function_args() gets here for every line of the trace, from ftrace_dump() with irqs off too. When the module is not installed that is one modprobe per line. Every caller of bpf_get_btf_vmlinux() and bpf_find_btf_id() was written for a function that doesn't wait for user space. pw-bot: cr

