rcu/nocb: Never downgrade ->nocb_defer_wakeup in wake_nocb_gp_defer()
Currently, wake_nocb_gp_defer() simply stores whatever waketype was passed in, which can result in a RCU_NOCB_WAKE_FORCE being downgraded to RCU_NOCB_WAKE, which could in turn delay callback processing. This commit therefore adds a check so that wake_nocb_gp_defer() only updates ->nocb_defer_wakeup when the update increases the forcefulness, thus avoiding downgrades. Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>
This commit is contained in:
Родитель
aeeacd9d84
Коммит
383e133283
|
@ -1600,6 +1600,7 @@ static void wake_nocb_gp_defer(struct rcu_data *rdp, int waketype,
|
||||||
{
|
{
|
||||||
if (rdp->nocb_defer_wakeup == RCU_NOCB_WAKE_NOT)
|
if (rdp->nocb_defer_wakeup == RCU_NOCB_WAKE_NOT)
|
||||||
mod_timer(&rdp->nocb_timer, jiffies + 1);
|
mod_timer(&rdp->nocb_timer, jiffies + 1);
|
||||||
|
if (rdp->nocb_defer_wakeup < waketype)
|
||||||
WRITE_ONCE(rdp->nocb_defer_wakeup, waketype);
|
WRITE_ONCE(rdp->nocb_defer_wakeup, waketype);
|
||||||
trace_rcu_nocb_wake(rcu_state.name, rdp->cpu, reason);
|
trace_rcu_nocb_wake(rcu_state.name, rdp->cpu, reason);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче