mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
rcu: Make rcu_gp_kthread() check for early-boot activity
The rcu_gp_kthread() function immediately sleeps waiting to be notified of the need for a new grace period, which currently works because there are a number of code sequences that will provide the needed wakeup later. However, some of these code sequences need to acquire the root rcu_node structure's ->lock, and contention on that lock has started manifesting. This commit therefore makes rcu_gp_kthread() check for early-boot activity when it starts up, omitting the initial sleep in that case. Reported-by: Nicholas Piggin <[email protected]> Signed-off-by: Paul E. McKenney <[email protected]> Tested-by: Nicholas Piggin <[email protected]>
This commit is contained in:
parent
c91a8675b9
commit
5fe0a56298
1 changed files with 6 additions and 0 deletions
|
|
@ -2192,6 +2192,12 @@ static int __noreturn rcu_gp_kthread(void *arg)
|
|||
struct rcu_state *rsp = arg;
|
||||
struct rcu_node *rnp = rcu_get_root(rsp);
|
||||
|
||||
/* Check for early-boot work. */
|
||||
raw_spin_lock_irq_rcu_node(rnp);
|
||||
if (need_any_future_gp(rnp))
|
||||
WRITE_ONCE(rsp->gp_flags, RCU_GP_FLAG_INIT);
|
||||
raw_spin_unlock_irq_rcu_node(rnp);
|
||||
|
||||
rcu_bind_gp_kthread();
|
||||
for (;;) {
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue