lkml.org 
[lkml]   [2012]   [Apr]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 16/41] 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: Alessio Igor Bogani <abogani@kernel.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Avi Kivity <avi@redhat.com>
    Cc: Chris Metcalf <cmetcalf@tilera.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
    Cc: Geoff Levand <geoff@infradead.org>
    Cc: Gilad Ben Yossef <gilad@benyossef.com>
    Cc: Hakan Akkan <hakanakkan@gmail.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Kevin Hilman <khilman@ti.com>
    Cc: Max Krasnyansky <maxk@qualcomm.com>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephen Hemminger <shemminger@vyatta.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Sven-Thorsten Dietrich <thebigcorporation@gmail.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    ---
    kernel/rcutree.c | 17 +++++++++++++++++
    1 files changed, 17 insertions(+), 0 deletions(-)

    diff --git a/kernel/rcutree.c b/kernel/rcutree.c
    index e141c7e..3fffc26 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"
    #include <trace/events/rcu.h>
    @@ -302,6 +303,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.
    @@ -325,6 +340,8 @@ static int rcu_implicit_offline_qs(struct rcu_data *rdp)
    return 1;
    }

    + cpuset_update_rcu_cpu(rdp->cpu);
    +
    /*
    * The CPU is online, so send it a reschedule IPI. This forces
    * it through the scheduler, and (inefficiently) also handles cases
    --
    1.7.5.4


    \
     
     \ /
      Last update: 2012-05-01 02:21    [W:3.057 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site