On Mon, Feb 03, 2025 at 10:28:49AM +0100, Vlastimil Babka wrote: > RCU has been special-casing callback function pointers that are integers > lower than 4096 as offsets of rcu_head for kvfree() instead. The tree > RCU implementation no longer does that as the batched kvfree_rcu() is > not a simple call_rcu(). The tiny RCU still does, and the plan is also > to make tree RCU use call_rcu() for SLUB_TINY configurations. > > Instead of teaching tree RCU again to special case the offsets, let's > remove the special casing completely. Since there's no SLOB anymore, it > is possible to create a callback function that can take a pointer to a > middle of slab object with unknown offset and determine the object's > pointer before freeing it, so implement that as kvfree_rcu_cb(). > > Large kmalloc and vmalloc allocations are handled simply by aligning > down to page size. For that we retain the requirement that the offset is > smaller than 4096. But we can remove __is_kvfree_rcu_offset() completely > and instead just opencode the condition in the BUILD_BUG_ON() check. > > Reviewed-by: Joel Fernandes (Google) <joel@xxxxxxxxxxxxxxxxx> Looks good to me, Reviewed-by: Hyeonggon Yoo <42.hyeyoo@xxxxxxxxx> > Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> -- Harry