lkml.org 
[lkml]   [2017]   [Apr]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH tip/core/rcu 03/40] srcu: Consolidate batch checking into rcu_all_batches_empty()
    Date
    The srcu_reschedule() function invokes rcu_batch_empty() on each of
    the four rcu_batch structures in the srcu_struct in question twice.
    Given that this check will also be needed in cleanup_srcu_struct(), this
    commit consolidates these four checks into a new rcu_all_batches_empty()
    function.

    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    ---
    kernel/rcu/srcu.c | 21 +++++++++++++--------
    1 file changed, 13 insertions(+), 8 deletions(-)

    diff --git a/kernel/rcu/srcu.c b/kernel/rcu/srcu.c
    index ef3bcfb15b39..ba41a5d04b49 100644
    --- a/kernel/rcu/srcu.c
    +++ b/kernel/rcu/srcu.c
    @@ -65,6 +65,17 @@ static inline bool rcu_batch_empty(struct rcu_batch *b)
    }

    /*
    + * Are all batches empty for the specified srcu_struct?
    + */
    +static inline bool rcu_all_batches_empty(struct srcu_struct *sp)
    +{
    + return rcu_batch_empty(&sp->batch_done) &&
    + rcu_batch_empty(&sp->batch_check1) &&
    + rcu_batch_empty(&sp->batch_check0) &&
    + rcu_batch_empty(&sp->batch_queue);
    +}
    +
    +/*
    * Remove the callback at the head of the specified rcu_batch structure
    * and return a pointer to it, or return NULL if the structure is empty.
    */
    @@ -619,15 +630,9 @@ static void srcu_reschedule(struct srcu_struct *sp)
    {
    bool pending = true;

    - if (rcu_batch_empty(&sp->batch_done) &&
    - rcu_batch_empty(&sp->batch_check1) &&
    - rcu_batch_empty(&sp->batch_check0) &&
    - rcu_batch_empty(&sp->batch_queue)) {
    + if (rcu_all_batches_empty(sp)) {
    spin_lock_irq(&sp->queue_lock);
    - if (rcu_batch_empty(&sp->batch_done) &&
    - rcu_batch_empty(&sp->batch_check1) &&
    - rcu_batch_empty(&sp->batch_check0) &&
    - rcu_batch_empty(&sp->batch_queue)) {
    + if (rcu_all_batches_empty(sp)) {
    sp->running = false;
    pending = false;
    }
    --
    2.5.2
    \
     
     \ /
      Last update: 2017-04-12 19:50    [W:5.033 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site