On Fri, Aug 15, 2025 at 9:18 AM Menglong Dong <menglong8.dong@xxxxxxxxx> wrote: > > migrate_disable() is called to disable migration in the kernel, and it is > used togather with rcu_read_lock() oftenly. > > However, with PREEMPT_RCU disabled, it's unnecessary, as rcu_read_lock() > will disable preemption, which will also disable migration. > > Introduce rcu_migrate_enable() and rcu_migrate_disable(), which will do > the migration enable and disable only when the rcu_read_lock() can't do > it. > > Signed-off-by: Menglong Dong <dongml2@xxxxxxxxxxxxxxx> > --- > include/linux/rcupdate.h | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h > index 120536f4c6eb..0d9dbd90d025 100644 > --- a/include/linux/rcupdate.h > +++ b/include/linux/rcupdate.h > @@ -72,6 +72,16 @@ static inline bool same_state_synchronize_rcu(unsigned long oldstate1, unsigned > void __rcu_read_lock(void); > void __rcu_read_unlock(void); > > +static inline void rcu_migrate_enable(void) > +{ > + migrate_enable(); > +} Interesting idea. I think it has to be combined with rcu_read_lock(), since this api makes sense only when used together. rcu_read_lock_dont_migrate() ? It will do rcu_read_lock() + migrate_disalbe() in PREEMPT_RCU and rcu_read_lock() + preempt_disable() otherwise? Also I'm not sure we can rely on rcu_read_lock() disabling preemption in all !PREEMPT_RCU cases. iirc it's more nuanced than that.