lkml.org 
[lkml]   [2011]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 21/32] rcu: Restart the tick on non-responding adaptive nohz CPUs
    Date
    When a CPU in adaptive nohz mode doesn't respond to complete
    a grace period, issue it a specific IPI so that it restarts
    the tick and chases a quiescent state.

    Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Anton Blanchard <anton@au1.ibm.com>
    Cc: Avi Kivity <avi@redhat.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
    Cc: Paul E . McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Paul Menage <menage@google.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Stephen Hemminger <shemminger@vyatta.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tim Pepper <lnxninja@linux.vnet.ibm.com>
    ---
    kernel/rcutree.c | 17 +++++++++++++++++
    1 files changed, 17 insertions(+), 0 deletions(-)

    diff --git a/kernel/rcutree.c b/kernel/rcutree.c
    index 0009bfc..d496c70 100644
    --- a/kernel/rcutree.c
    +++ b/kernel/rcutree.c
    @@ -50,6 +50,7 @@
    #include <linux/wait.h>
    #include <linux/kthread.h>
    #include <linux/prefetch.h>
    +#include <linux/cpuset.h>

    #include "rcutree.h"

    @@ -295,6 +296,20 @@ static struct rcu_node *rcu_get_root(struct rcu_state *rsp)

    #ifdef CONFIG_SMP

    +static void cpuset_update_rcu_cpu(int cpu)
    +{
    +#ifdef CONFIG_CPUSETS_NO_HZ
    + unsigned long flags;
    +
    + local_irq_save(flags);
    +
    + if (cpuset_cpu_adaptive_nohz(cpu))
    + smp_cpuset_update_nohz(cpu);
    +
    + local_irq_restore(flags);
    +#endif
    +}
    +
    /*
    * If the specified CPU is offline, tell the caller that it is in
    * a quiescent state. Otherwise, whack it with a reschedule IPI.
    @@ -317,6 +332,8 @@ static int rcu_implicit_offline_qs(struct rcu_data *rdp)
    return 1;
    }

    + cpuset_update_rcu_cpu(rdp->cpu);
    +
    /* If preemptible RCU, no point in sending reschedule IPI. */
    if (rdp->preemptible)
    return 0;
    --
    1.7.5.4


    \
     
     \ /
      Last update: 2011-08-15 18:05    [W:0.051 / U:0.108 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site