This is an initial RFC for something that could target 7.4 and definitely not earlier merge window. Based on slab/for-7.3/kfree_rcu_nolock
Currently kfree_nolock() can only handle objects from kmalloc_nolock(). Removing this restriction means an easier to use API and might be useful in some situations. It means dealing properly with kfence, kmemleak and large kmalloc allocations. Some of the cases may end up being deferred to the irq_wor() but that's not a big issue. As a example of usefullness, convert a kfree_rcu() to kfree_nolock() in the scheduler code, where kfree_rcu() has been used as a workaround for kfree() being unsafe to call under pi_lock. Signed-off-by: Vlastimil Babka (SUSE) <[email protected]> --- Vlastimil Babka (SUSE) (5): mm/slab: cleanup deferred free handling mm/slab, kfence: support kfence objects in kfree_nolock() mm/slab, kmemleak: handle kmemleak freeing in kfree_nolock() mm/slab: handle large_kmalloc objects in kfree_nolock() sched: use kfree_nolock() instead of kfree_rcu() include/linux/kfence.h | 5 ++ include/linux/kmemleak.h | 17 +++++ kernel/sched/core.c | 9 +-- kernel/sched/sched.h | 7 +-- mm/kfence/core.c | 14 +++++ mm/kfence/kfence.h | 5 +- mm/kmemleak.c | 42 +++++++++++++ mm/slub.c | 157 +++++++++++++++++++++++++++++++++++++++-------- 8 files changed, 215 insertions(+), 41 deletions(-) --- base-commit: 648294a02bfcd0eddae51877e3b30f8bbb2d4bb6 change-id: 20260730-kfree_nolock_kmalloc-6067170fd5ad
