[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20130627201246.GA3828@linux.vnet.ibm.com>
Date: Thu, 27 Jun 2013 13:12:46 -0700
From: "Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>
To: "Srivatsa S. Bhat" <srivatsa.bhat@...ux.vnet.ibm.com>
Cc: tglx@...utronix.de, peterz@...radead.org, tj@...nel.org,
oleg@...hat.com, rusty@...tcorp.com.au, mingo@...nel.org,
akpm@...ux-foundation.org, namhyung@...nel.org, walken@...gle.com,
vincent.guittot@...aro.org, laijs@...fujitsu.com,
David.Laight@...lab.com, rostedt@...dmis.org,
wangyun@...ux.vnet.ibm.com, xiaoguangrong@...ux.vnet.ibm.com,
sbw@....edu, fweisbec@...il.com, zhong@...ux.vnet.ibm.com,
nikunj@...ux.vnet.ibm.com, linux-pm@...r.kernel.org,
linux-arch@...r.kernel.org, linuxppc-dev@...ts.ozlabs.org,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org,
Dipankar Sarma <dipankar@...ibm.com>
Subject: Re: [PATCH v3 16/45] rcu: Use cpu_is_offline_nocheck() to avoid
false-positive warnings
On Fri, Jun 28, 2013 at 01:25:17AM +0530, Srivatsa S. Bhat wrote:
> In RCU code, rcu_implicit_dynticks_qs() checks if a CPU is offline,
> while being protected by a spinlock. At first, it appears as if we need to
> use the get/put_online_cpus_atomic() APIs to properly synchronize with CPU
> hotplug, once we get rid of stop_machine(). However, RCU has adequate
> synchronization with CPU hotplug, making that unnecessary. But since the
> locking details are non-trivial, it is hard to teach this to the rudimentary
> hotplug locking validator.
>
> So use the _nocheck() variants of the cpu accessor functions to prevent false-
> positive warnings from the CPU hotplug debug code. Also, add a comment
> explaining the hotplug synchronization design used in RCU, so that its easy
> to see why it is justified to use the _nocheck() variants.
>
> Cc: Dipankar Sarma <dipankar@...ibm.com>
> Cc: "Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>
> Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@...ux.vnet.ibm.com>
Reviewed-by: Paul E. McKenney <paulmck@...ux.vnet.ibm.com>
> ---
>
> kernel/rcutree.c | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/rcutree.c b/kernel/rcutree.c
> index cf3adc6..ced28a45 100644
> --- a/kernel/rcutree.c
> +++ b/kernel/rcutree.c
> @@ -794,7 +794,17 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp)
> if (ULONG_CMP_GE(rdp->rsp->gp_start + 2, jiffies))
> return 0; /* Grace period is not old enough. */
> barrier();
> - if (cpu_is_offline(rdp->cpu)) {
> +
> + /*
> + * It is safe to use the _nocheck() version of cpu_is_offline() here
> + * (to avoid false-positive warnings from CPU hotplug debug code),
> + * because:
> + * 1. rcu_gp_init() holds off CPU hotplug operations during grace
> + * period initialization.
> + * 2. The current grace period has not ended yet.
> + * So it is safe to sample the offline state without synchronization.
> + */
> + if (cpu_is_offline_nocheck(rdp->cpu)) {
> trace_rcu_fqs(rdp->rsp->name, rdp->gpnum, rdp->cpu, "ofl");
> rdp->offline_fqs++;
> return 1;
>
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists