lkml.org 
[lkml]   [2021]   [Apr]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH 2/3] srcu: Remove superfluous sdp->srcu_lock_count zero filling
    On Fri, Apr 02, 2021 at 01:47:03AM +0200, Frederic Weisbecker wrote:
    > alloc_percpu() zeroes out the allocated memory. Therefore we can assume
    > the whole struct srcu_data to be clear after calling it, just like after
    > a static initialization. No need for a special treatment in the dynamic
    > allocation case.
    >
    > Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    > Cc: Boqun Feng <boqun.feng@gmail.com>
    > Cc: Lai Jiangshan <jiangshanlai@gmail.com>
    > Cc: Neeraj Upadhyay <neeraju@codeaurora.org>
    > Cc: Josh Triplett <josh@joshtriplett.org>
    > Cc: Joel Fernandes <joel@joelfernandes.org>
    > Cc: Uladzislau Rezki <urezki@gmail.com>

    Good catch, thank you!!! I queued the following with the usual
    wordsmithing, so as usual please let me know if I messed anything up.

    Thanx, Paul

    ------------------------------------------------------------------------

    commit 2cfdfbfc41bcd96e7961a619e4a7f235b274f78f
    Author: Frederic Weisbecker <frederic@kernel.org>
    Date: Fri Apr 2 01:47:03 2021 +0200

    srcu: Remove superfluous sdp->srcu_lock_count zero filling

    Because alloc_percpu() zeroes out the allocated memory, there is no need
    to zero-fill newly allocated per-CPU memory. This commit therefore removes
    the loop zeroing the ->srcu_lock_count and ->srcu_unlock_count arrays
    from init_srcu_struct_nodes(). This is the only use of that function's
    is_static parameter, which this commit also removes.

    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Cc: Boqun Feng <boqun.feng@gmail.com>
    Cc: Lai Jiangshan <jiangshanlai@gmail.com>
    Cc: Neeraj Upadhyay <neeraju@codeaurora.org>
    Cc: Josh Triplett <josh@joshtriplett.org>
    Cc: Joel Fernandes <joel@joelfernandes.org>
    Cc: Uladzislau Rezki <urezki@gmail.com>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>

    diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
    index 036ff54..7389e46 100644
    --- a/kernel/rcu/srcutree.c
    +++ b/kernel/rcu/srcutree.c
    @@ -80,7 +80,7 @@ do { \
    * srcu_read_unlock() running against them. So if the is_static parameter
    * is set, don't initialize ->srcu_lock_count[] and ->srcu_unlock_count[].
    */
    -static void init_srcu_struct_nodes(struct srcu_struct *ssp, bool is_static)
    +static void init_srcu_struct_nodes(struct srcu_struct *ssp)
    {
    int cpu;
    int i;
    @@ -148,14 +148,6 @@ static void init_srcu_struct_nodes(struct srcu_struct *ssp, bool is_static)
    timer_setup(&sdp->delay_work, srcu_delay_timer, 0);
    sdp->ssp = ssp;
    sdp->grpmask = 1 << (cpu - sdp->mynode->grplo);
    - if (is_static)
    - continue;
    -
    - /* Dynamically allocated, better be no srcu_read_locks()! */
    - for (i = 0; i < ARRAY_SIZE(sdp->srcu_lock_count); i++) {
    - sdp->srcu_lock_count[i] = 0;
    - sdp->srcu_unlock_count[i] = 0;
    - }
    }
    }

    @@ -179,7 +171,7 @@ static int init_srcu_struct_fields(struct srcu_struct *ssp, bool is_static)
    ssp->sda = alloc_percpu(struct srcu_data);
    if (!ssp->sda)
    return -ENOMEM;
    - init_srcu_struct_nodes(ssp, is_static);
    + init_srcu_struct_nodes(ssp);
    ssp->srcu_gp_seq_needed_exp = 0;
    ssp->srcu_last_gp_end = ktime_get_mono_fast_ns();
    smp_store_release(&ssp->srcu_gp_seq_needed, 0); /* Init done. */
    \
     
     \ /
      Last update: 2021-04-02 02:59    [W:2.303 / U:0.240 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site