rcu: Rearrange locking in rcu_start_gp()
If CPUs are to give prior notice of needed grace periods, it will be necessary to invoke rcu_start_gp() without dropping the root rcu_node structure's ->lock. This commit takes a first step in this direction by moving the release of this lock to the end of rcu_start_gp(). Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
parent
c0f4dfd4f9
commit
b92db6cb7e
@ -1521,16 +1521,14 @@ rcu_start_gp(struct rcu_state *rsp, unsigned long flags)
|
|||||||
raw_spin_unlock_irqrestore(&rnp->lock, flags);
|
raw_spin_unlock_irqrestore(&rnp->lock, flags);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
rsp->gp_flags = RCU_GP_FLAG_INIT;
|
rsp->gp_flags = RCU_GP_FLAG_INIT;
|
||||||
raw_spin_unlock(&rnp->lock); /* Interrupts remain disabled. */
|
|
||||||
|
|
||||||
/* Ensure that CPU is aware of completion of last grace period. */
|
/* Ensure that CPU is aware of completion of last grace period. */
|
||||||
rcu_process_gp_end(rsp, rdp);
|
__rcu_process_gp_end(rsp, rdp->mynode, rdp);
|
||||||
local_irq_restore(flags);
|
|
||||||
|
|
||||||
/* Wake up rcu_gp_kthread() to start the grace period. */
|
/* Wake up rcu_gp_kthread() to start the grace period. */
|
||||||
wake_up(&rsp->gp_wq);
|
wake_up(&rsp->gp_wq);
|
||||||
|
raw_spin_unlock_irqrestore(&rnp->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user