mirror of https://github.com/torvalds/linux.git
rcu: add rcu_read_lock_dont_migrate()
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 <dongml2@chinatelecom.cn> Reviewed-by: Paul E. McKenney <paulmck@kernel.org> Link: https://lore.kernel.org/r/20250821090609.42508-2-dongml2@chinatelecom.cn Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
4223bf833c
commit
1b93c03fb3
|
|
@ -962,6 +962,20 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)
|
||||||
preempt_enable_notrace();
|
preempt_enable_notrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __always_inline void rcu_read_lock_dont_migrate(void)
|
||||||
|
{
|
||||||
|
if (IS_ENABLED(CONFIG_PREEMPT_RCU))
|
||||||
|
migrate_disable();
|
||||||
|
rcu_read_lock();
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void rcu_read_unlock_migrate(void)
|
||||||
|
{
|
||||||
|
rcu_read_unlock();
|
||||||
|
if (IS_ENABLED(CONFIG_PREEMPT_RCU))
|
||||||
|
migrate_enable();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* RCU_INIT_POINTER() - initialize an RCU protected pointer
|
* RCU_INIT_POINTER() - initialize an RCU protected pointer
|
||||||
* @p: The pointer to be initialized.
|
* @p: The pointer to be initialized.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue