On Sun, Nov 07, 2021 at 11:32:07AM +0100, Thomas Gleixner wrote: > > 2) bpf_spin_lock/unlock have notrace attribute set. > > How is that supposed to help? > > You cannot take a spinlock from NMI context if that same lock can be > taken by other contexts as well. > > Also notrace on the public function is not guaranteeing that the inlines > (as defined) are not traceable and it does not exclude it from being > kprobed. > > > 3) bpf_timer_* helpers fail early if they are in NMI. > > > > Why they have to be excluded? > > Because timers take locks and you can just end up in the very same > situation that you create invers lock dependencies or deadlocks when you > use that from a tracepoint. > > hrtimer_start() > lock_base(); > trace_hrtimer...() > perf_event() > bpf_run() > bpf_timer_start() > hrtimer_start() > lock_base() <- DEADLOCK > > Tracepoints and perf events are very limited in what they can actually > do. Just because it's BPF these rules are not magically going away. > Thanks for the clarification. -- Dmitrii Banshchikov