Re: [bpf-next v3 1/2] bpf: Offload kptr destructors that run from NMI
Alexei Starovoitov <[email protected]> Sun, 10 May 2026 15:38:08 -0700
| Newsgroups | dev.linux.lists.sashiko,org.kernel.vger.bpf |
|---|---|
| Message-ID | <CAADnVQJdFCFJcg0Pqdnx=D2h5vHj_q4mrwSJYxRC5RW0NTFNvQ@mail.gmail.com> |
On Sun, May 10, 2026 at 8:14 AM Justin Suess <[email protected]> wrote: > > > Any help or guidance on this would be appreciated! sorry for the delay. Everyone was at lsfmmbpf for a week+. All of the solutions so far are way too complicated. bpf_kptr_xchg() has to remain inlined as single atomic xchg without slowpath otherwise it ruins the concept and makes usage unpredictable. Let's step back. What is the issue you're trying to solve? the commit log say: > A BPF program attached to tp_btf/nmi_handler can delete map entries or > swap out referenced kptrs from NMI context. Today that runs the kptr > destructor inline. Destructors such as bpf_cpumask_release() can take > RCU-related locks, so running them from NMI can deadlock the system. and looking at selftest from patch 2 you do: old = bpf_kptr_xchg(&value->mask, old); if (old) bpf_cpumask_release(old); so? bpf_cpumask_release() is fine to call from any context, because bpf_mem_cache_free_rcu() is safe everywhere including NMI. hashtab introduced dtor in bpf_mem_alloc, so bpf_obj_free_fields() and corresponding dtor's of kptr-s are called from valid context. What is the problematic sequence?