lkml.org 
[lkml]   [2019]   [Aug]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH tip/core/rcu 02/10] rcu/nocb: Never downgrade ->nocb_defer_wakeup in wake_nocb_gp_defer()
    Date
    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>
    ---
    kernel/rcu/tree_plugin.h | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
    index 297b38732e28..f93603ca1672 100644
    --- a/kernel/rcu/tree_plugin.h
    +++ b/kernel/rcu/tree_plugin.h
    @@ -1598,7 +1598,8 @@ static void wake_nocb_gp_defer(struct rcu_data *rdp, int waketype,
    {
    if (rdp->nocb_defer_wakeup == RCU_NOCB_WAKE_NOT)
    mod_timer(&rdp->nocb_timer, jiffies + 1);
    - WRITE_ONCE(rdp->nocb_defer_wakeup, waketype);
    + if (rdp->nocb_defer_wakeup < waketype)
    + WRITE_ONCE(rdp->nocb_defer_wakeup, waketype);
    trace_rcu_nocb_wake(rcu_state.name, rdp->cpu, reason);
    }

    --
    2.17.1
    \
     
     \ /
      Last update: 2019-08-02 01:17    [W:3.824 / U:1.284 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site