Revert "sched: Remove synchronize rcu/sched calls from _cpu_down"

This reverts commit 36131fdc87 ("sched: Remove synchronize
rcu/sched calls from _cpu_down").

Removing the synchronization of rcu/sched calls from _cpu_down
introduces a race where tasks may get queued on an inactive CPU
and unthrottling cfs_rqs.

Change-Id: Ie29f8d185eb55979f9ca4e6e1b767caba6dd7f27
Signed-off-by: Mohammed Khajapasha <mkhaja@codeaurora.org>
This commit is contained in:
Mohammed Khajapasha 2017-07-07 13:06:00 +05:30
parent 0c44f3c838
commit 131e4378a0

View file

@ -375,6 +375,21 @@ static int _cpu_down(unsigned int cpu, int tasks_frozen)
goto out_release;
}
/*
* By now we've cleared cpu_active_mask, wait for all preempt-disabled
* and RCU users of this state to go away such that all new such users
* will observe it.
*
* For CONFIG_PREEMPT we have preemptible RCU and its sync_rcu() might
* not imply sync_sched(), so wait for both.
*
* Do sync before park smpboot threads to take care the rcu boost case.
*/
if (IS_ENABLED(CONFIG_PREEMPT))
synchronize_rcu_mult(call_rcu, call_rcu_sched);
else
synchronize_rcu();
smpboot_park_threads(cpu);
/*