On Tue, Feb 04, 2025 at 11:02:47AM +0100, Vlastimil Babka wrote: > On 2/3/25 20:07, Paul E. McKenney wrote: > > On Mon, Feb 03, 2025 at 10:28:46AM +0100, Vlastimil Babka wrote: > >> Following the move of the TREE_RCU batching kvfree_rcu() implementation > >> to slab, we still have the simple non-batching implementation in tiny > >> RCU, and RCU implementation specific ifdefs in slab code. > >> > >> Finish the move and integration into slab. Allow using the simple > >> call_rcu() based implementation also with tree RCU when SLUB_TINY is > >> enabled, as its goal is also to limit memory footprint with less concern > >> for top performance. > >> > >> In order to avoid RCU having to recognize the fake callback function > >> pointers (__is_kvfree_rcu_offset()) when handling call_rcu(), implement > >> a callback that can calculate the object's address from the embedded > >> rcu_head pointer without knowing the specific offset (previously SLOB > >> would not have made it possible, but it's gone now). > >> > >> After this series, AFAIK only the following kvfree_rcu specific code > >> remains in RCU: > >> > >> - a call to kfree_rcu_scheduler_running() from rcu_set_runtime_mode() > >> > >> - probably necessary and a generic registration interface would be > >> unnecessary bloat? > > > > I am OK with this calling directly. > > > > Alternatively, you could create a core_initcall() that did nothing > > but invoke kfree_rcu_scheduler_running(), and then drop that call from > > rcu_set_runtime_mode(). Up to you guys! > > I was afraid there's some ordering necessary with the rest of what > rcu_set_runtime_mode() does, but perhaps there's actually not. I *think* that they are independent, but I agree that it would be good to carefully double-check. The basis for my belief is that it is OK to invoke call_rcu() long before rcu_init() is invoked, let alone the scheduler being ready. Thanx, Paul > >> - declarations of kfree_rcu() API in include/linux/rcupdate.h > >> > >> - could be moved to slab.h after checking for/fixing up potential > >> missing includes > > > > It would be good to move them, but no real hurry from this end. > > > >> git tree: > >> https://git.kernel.org/pub/scm/linux/kernel/git/vbabka/linux.git/log/?h=b4/slub-tiny-kfree_rcu > >> > >> Changes since RFC [1]: > >> - Rebased to v6.14-rc1 > >> - Fixed build errors reported by bots. > >> - Changed where kvfree_call_rcu() is moved to in patch 1 to avoid another > >> move in patch 4. > >> - R-b's by Ulad and Joel > >> - Fix a memory leak in kvfree_rcu_list() thanks to Ulad > >> - Various comments' improvements and fixes (Joel, Ulad) > >> - Rename config to CONFIG_KFREE_RCU_BATCHED (Ulad) > >> > >> Due to changes, didn't keep Paul's Tested-by (but thanks!) > > > > I re-ran the tests, so feel free to add it back in. ;-) > > Thanks, will do :) > >