lkml.org 
[lkml]   [2009]   [Oct]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[this_cpu_xx V4 11/20] RCU: Use this_cpu operations
    RCU does not do dynamic allocations but it increments per cpu variables
    a lot. These instructions results in a move to a register and then back
    to memory. This patch will make it use the inc/dec instructions on x86
    that do not need a register.

    Acked-by: Tejun Heo <tj@kernel.org>
    Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Signed-off-by: Christoph Lameter <cl@linux-foundation.org>

    ---
    kernel/rcutorture.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    Index: linux-2.6/kernel/rcutorture.c
    ===================================================================
    --- linux-2.6.orig/kernel/rcutorture.c 2009-09-28 10:08:10.000000000 -0500
    +++ linux-2.6/kernel/rcutorture.c 2009-09-29 09:02:00.000000000 -0500
    @@ -731,13 +731,13 @@ static void rcu_torture_timer(unsigned l
    /* Should not happen, but... */
    pipe_count = RCU_TORTURE_PIPE_LEN;
    }
    - ++__get_cpu_var(rcu_torture_count)[pipe_count];
    + __this_cpu_inc(per_cpu_var(rcu_torture_count)[pipe_count]);
    completed = cur_ops->completed() - completed;
    if (completed > RCU_TORTURE_PIPE_LEN) {
    /* Should not happen, but... */
    completed = RCU_TORTURE_PIPE_LEN;
    }
    - ++__get_cpu_var(rcu_torture_batch)[completed];
    + __this_cpu_inc(per_cpu_var(rcu_torture_batch)[completed]);
    preempt_enable();
    cur_ops->readunlock(idx);
    }
    @@ -786,13 +786,13 @@ rcu_torture_reader(void *arg)
    /* Should not happen, but... */
    pipe_count = RCU_TORTURE_PIPE_LEN;
    }
    - ++__get_cpu_var(rcu_torture_count)[pipe_count];
    + __this_cpu_inc(per_cpu_var(rcu_torture_count)[pipe_count]);
    completed = cur_ops->completed() - completed;
    if (completed > RCU_TORTURE_PIPE_LEN) {
    /* Should not happen, but... */
    completed = RCU_TORTURE_PIPE_LEN;
    }
    - ++__get_cpu_var(rcu_torture_batch)[completed];
    + __this_cpu_inc(per_cpu_var(rcu_torture_batch)[completed]);
    preempt_enable();
    cur_ops->readunlock(idx);
    schedule();
    --


    \
     
     \ /
      Last update: 2009-10-02 04:15    [W:0.021 / U:151.272 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site