migrate_disable() is called to disable migration in the kernel, and it is often used together with rcu_read_lock(). However, with PREEMPT_RCU disabled, it's unnecessary, as rcu_read_lock() will always disable preemption, which will also disable migration. Introduce rcu_read_lock_dont_migrate() and rcu_read_unlock_migrate(), which will do the migration enable and disable only when !PREEMPT_RCU. Signed-off-by: Menglong Dong --- v2: - introduce rcu_read_lock_dont_migrate() instead of rcu_migrate_disable() --- include/linux/rcupdate.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 120536f4c6eb..8918b911911f 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@ -962,6 +962,30 @@ static inline notrace void rcu_read_unlock_sched_notrace(void) preempt_enable_notrace(); } +#ifdef CONFIG_PREEMPT_RCU +static __always_inline void rcu_read_lock_dont_migrate(void) +{ + migrate_disable(); + rcu_read_lock(); +} + +static inline void rcu_read_unlock_migrate(void) +{ + rcu_read_unlock(); + migrate_enable(); +} +#else +static __always_inline void rcu_read_lock_dont_migrate(void) +{ + rcu_read_lock(); +} + +static inline void rcu_read_unlock_migrate(void) +{ + rcu_read_unlock(); +} +#endif + /** * RCU_INIT_POINTER() - initialize an RCU protected pointer * @p: The pointer to be initialized. -- 2.50.1