On Wed, Dec 18, 2024 at 11:03 PM Michal Hocko <mhocko@xxxxxxxx> wrote: > > On Wed 18-12-24 17:45:20, Alexei Starovoitov wrote: > > On Wed, Dec 18, 2024 at 3:32 AM Michal Hocko <mhocko@xxxxxxxx> wrote: > > > > > > On Tue 17-12-24 19:07:15, alexei.starovoitov@xxxxxxxxx wrote: > > > > From: Alexei Starovoitov <ast@xxxxxxxxxx> > > > > > > > > Introduce free_pages_nolock() that can free pages without taking locks. > > > > It relies on trylock and can be called from any context. > > > > Since spin_trylock() cannot be used in RT from hard IRQ or NMI > > > > it uses lockless link list to stash the pages which will be freed > > > > by subsequent free_pages() from good context. > > > > > > Yes, this makes sense. Have you tried a simpler implementation that > > > would just queue on the lockless link list unconditionally? That would > > > certainly reduce the complexity. Essentially something similar that we > > > do in vfree_atomic (well, except the queue_work which is likely too > > > heavy for the usecase and potentialy not reentrant). > > > > We cannot use llist approach unconditionally. > > One of the ways bpf maps are used is non-stop alloc/free. > > We cannot delay the free part. When memory is free it's better to > > be available for kernel and bpf uses right away. > > llist is the last resort. > > This is an important detail that should be mentioned in the changelog. yeah. The commit log is a bit too short. Will expand in the next version.