From: Scott Wood <swood@xxxxxxxxxx> v4.14.170-rt75-rc1 stable review patch. If anyone has any objections, please let me know. ----------- [ Upstream commit 4230dd3824c3e1785504e6f757ce79a4b55651fa ] Without this, rcu_note_context_switch() will complain if an RCU read lock is held when migrate_enable() calls stop_one_cpu(). Likewise when migrate_disable() calls pin_current_cpu() which calls __read_rt_lock() -- which bypasses the part of the mutex code that calls sleeping_lock_inc(). Signed-off-by: Scott Wood <swood@xxxxxxxxxx> [bigeasy: use sleeping_lock_…() ] Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> Signed-off-by: Tom Zanussi <zanussi@xxxxxxxxxx> Conflicts: kernel/sched/core.c --- kernel/cpu.c | 2 ++ kernel/sched/core.c | 3 +++ 2 files changed, 5 insertions(+) diff --git a/kernel/cpu.c b/kernel/cpu.c index 05b93cfa6fd9..9be794896d87 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -314,7 +314,9 @@ void pin_current_cpu(void) preempt_lazy_enable(); preempt_enable(); + sleeping_lock_inc(); __read_rt_lock(cpuhp_pin); + sleeping_lock_dec(); preempt_disable(); preempt_lazy_disable(); diff --git a/kernel/sched/core.c b/kernel/sched/core.c index fde47216af94..fcff75934bdc 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -7045,7 +7045,10 @@ void migrate_enable(void) unpin_current_cpu(); preempt_lazy_enable(); preempt_enable(); + + sleeping_lock_inc(); stop_one_cpu(task_cpu(p), migration_cpu_stop, &arg); + sleeping_lock_dec(); tlb_migrate_finish(p->mm); return; -- 2.14.1