lkml.org 
[lkml]   [2011]   [Sep]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH tip/core/rcu 02/55] rcu: Avoid unnecessary self-wakeup of per-CPU kthreads
    Date
    From: Shaohua Li <shaohua.li@intel.com>

    There are a number of cases where the RCU can find additional work
    for the per-CPU kthread within the context of that per-CPU kthread.
    In such cases, the per-CPU kthread is already running, so attempting
    to wake itself up does nothing except waste CPU cycles. This commit
    therefore checks to see if it is in the per-CPU kthread context,
    omitting the wakeup in this case.

    Signed-off-by: Shaohua Li <shaohua.li@intel.com>
    Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    ---
    kernel/rcutree_plugin.h | 8 +++-----
    1 files changed, 3 insertions(+), 5 deletions(-)

    diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
    index 7b850cd..9703298 100644
    --- a/kernel/rcutree_plugin.h
    +++ b/kernel/rcutree_plugin.h
    @@ -1291,11 +1291,9 @@ static void invoke_rcu_callbacks_kthread(void)

    local_irq_save(flags);
    __this_cpu_write(rcu_cpu_has_work, 1);
    - if (__this_cpu_read(rcu_cpu_kthread_task) == NULL) {
    - local_irq_restore(flags);
    - return;
    - }
    - wake_up_process(__this_cpu_read(rcu_cpu_kthread_task));
    + if (__this_cpu_read(rcu_cpu_kthread_task) != NULL &&
    + current != __this_cpu_read(rcu_cpu_kthread_task))
    + wake_up_process(__this_cpu_read(rcu_cpu_kthread_task));
    local_irq_restore(flags);
    }

    --
    1.7.3.2


    \
     
     \ /
      Last update: 2011-09-07 08:31    [W:0.019 / U:91.296 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site