All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pranith Kumar <bobby.prani@gmail.com>
To: Paul McKenney <paulmck@linux.vnet.ibm.com>
Cc: Josh Triplett <josh@joshtriplett.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Lai Jiangshan <laijs@cn.fujitsu.com>,
	"open list:READ-COPY UPDATE..." <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 09/16] rcu: Remove redundant check for online cpu
Date: Wed, 23 Jul 2014 11:11:45 -0400	[thread overview]
Message-ID: <CAJhHMCA4Fdd4JbtKdNGABFYRBCqaLukLbydLAFA-3RiZXaTngA@mail.gmail.com> (raw)
In-Reply-To: <20140723142314.GV11241@linux.vnet.ibm.com>

On Wed, Jul 23, 2014 at 10:23 AM, Paul E. McKenney
<paulmck@linux.vnet.ibm.com> wrote:
> On Wed, Jul 23, 2014 at 10:12:54AM -0400, Pranith Kumar wrote:
>> On Wed, Jul 23, 2014 at 9:50 AM, Paul E. McKenney
>> <paulmck@linux.vnet.ibm.com> wrote:
>> > On Wed, Jul 23, 2014 at 08:59:06AM -0400, Pranith Kumar wrote:
>> >> On Wed, Jul 23, 2014 at 8:21 AM, Paul E. McKenney
>> >> <paulmck@linux.vnet.ibm.com> wrote:
>> >> > On Wed, Jul 23, 2014 at 01:09:46AM -0400, Pranith Kumar wrote:
>> >> >> There are two checks for an online CPU if two if() conditions. This commit
>> >> >> simplies this by replacing it with only one check for the online CPU.
>> >> >>
>> >> >> Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
>> >> >
>> >> > I admit that it is very early in the morning my time, but I don't see
>> >> > this change as preserving the semantics in all cases.  Please recheck
>> >> > your changes to the second check.
>> >> >
>> >> >                                                         Thanx, Paul
>> >>
>> >> I guess you must be thrown off by the complementary checks, the first
>> >> check is for cpu_online() and second is for cpu_is_offline(). :)
>> >>
>> >> Previously, if a cpu is offline, the first condition is false and the
>> >> second condition is true, so we return from the second if() condition.
>> >> The same semantics are being preserved.
>> >
>> > Fair enough!
>> >
>> > Nevertheless, I am not seeing this as a simplification.
>>
>> I am not sure what you mean here, do you mean that both the checks are
>> actually required?
>
> I mean that the current compound tests each mean something.  Pulling out
> the offline test adds lines of code and obscures that meaning.   This means
> that it is easier (for me, anyway) to see why the current code is correct
> than it is to see why your suggested change is correct.
>

That is a valid point. I did not mean to reduce readability of the
code. Just trying to avoid the overhead of smp_processor_id().

Not sure if you would prefer this, but how about the following?

diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index f1ba773..3a26008 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -2516,15 +2516,16 @@ static void __call_rcu_core(struct rcu_state
*rsp, struct rcu_data *rdp,
 {
        bool needwake;

+       bool awake = cpu_online(smp_processor_id);
        /*
         * If called from an extended quiescent state, invoke the RCU
         * core in order to force a re-evaluation of RCU's idleness.
         */
-       if (!rcu_is_watching() && cpu_online(smp_processor_id()))
+       if (!rcu_is_watching() && awake)
                invoke_rcu_core();

        /* If interrupts were disabled or CPU offline, don't invoke RCU core. */
-       if (irqs_disabled_flags(flags) || cpu_is_offline(smp_processor_id()))
+       if (irqs_disabled_flags(flags) || !awake)
                return;

        /*


>
>> >> --
>> >> Pranith.
>> >>
>> >>
>> >>
>> >> >
>> >> >> ---
>> >> >>  kernel/rcu/tree.c | 9 ++++++---
>> >> >>  1 file changed, 6 insertions(+), 3 deletions(-)
>> >> >>
>> >> >> diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
>> >> >> index 5dcbf36..8d598a2 100644
>> >> >> --- a/kernel/rcu/tree.c
>> >> >> +++ b/kernel/rcu/tree.c
>> >> >> @@ -2602,15 +2602,18 @@ static void __call_rcu_core(struct rcu_state *rsp, struct rcu_data *rdp,
>> >> >>  {
>> >> >>       bool needwake;
>> >> >>
>> >> >> +     if (!cpu_online(smp_processor_id()))
>> >> >> +             return;
>> >> >> +
>> >> >>       /*
>> >> >>        * If called from an extended quiescent state, invoke the RCU
>> >> >>        * core in order to force a re-evaluation of RCU's idleness.
>> >> >>        */
>> >> >> -     if (!rcu_is_watching() && cpu_online(smp_processor_id()))
>> >> >> +     if (!rcu_is_watching())
>> >> >>               invoke_rcu_core();
>> >> >>
>> >> >> -     /* If interrupts were disabled or CPU offline, don't invoke RCU core. */
>> >> >> -     if (irqs_disabled_flags(flags) || cpu_is_offline(smp_processor_id()))
>> >> >> +     /* If interrupts were disabled, don't invoke RCU core. */
>> >> >> +     if (irqs_disabled_flags(flags))
>> >> >>               return;
>> >> >>
>> >> >>       /*
>> >> >> --
>> >> >> 2.0.0.rc2
>> >> >>
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Pranith
>> >>
>> >
>>
>>
>>
>> --
>> Pranith
>>
>



-- 
Pranith

  reply	other threads:[~2014-07-23 15:12 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-23  5:09 [PATCH 00/16] rcu: Some minor fixes and cleanups Pranith Kumar
2014-07-23  5:09 ` [PATCH 01/16] rcu: Use rcu_num_nodes instead of NUM_RCU_NODES Pranith Kumar
2014-07-23  5:09 ` [PATCH 02/16] rcu: Check return value for cpumask allocation Pranith Kumar
2014-07-23 12:06   ` Paul E. McKenney
2014-07-23 12:49     ` Pranith Kumar
2014-07-23 17:14     ` Pranith Kumar
2014-07-23 18:01       ` Paul E. McKenney
2014-07-23  5:09 ` [PATCH 03/16] rcu: Fix comment for gp_state field values Pranith Kumar
2014-07-23  5:09 ` [PATCH 04/16] rcu: Remove redundant check for an online CPU Pranith Kumar
2014-07-23 12:09   ` Paul E. McKenney
2014-07-23 13:23     ` Pranith Kumar
2014-07-23 13:41       ` Paul E. McKenney
2014-07-23 14:01         ` Pranith Kumar
2014-07-23 14:14           ` Paul E. McKenney
2014-07-23 15:07             ` Pranith Kumar
2014-07-23 15:21               ` Pranith Kumar
2014-07-23  5:09 ` [PATCH 05/16] rcu: Add noreturn attribute to boost kthread Pranith Kumar
2014-07-23  5:09 ` [PATCH 06/16] rcu: Clear gp_flags only when actually starting new gp Pranith Kumar
2014-07-23 12:13   ` Paul E. McKenney
2014-07-23  5:09 ` [PATCH 07/16] rcu: Save and restore irq flags in rcu_gp_cleanup() Pranith Kumar
2014-07-23 12:16   ` Paul E. McKenney
2014-07-23  5:09 ` [PATCH 08/16] rcu: Clean up rcu_spawn_one_boost_kthread() Pranith Kumar
2014-07-23  5:09 ` [PATCH 09/16] rcu: Remove redundant check for online cpu Pranith Kumar
2014-07-23 12:21   ` Paul E. McKenney
2014-07-23 12:59     ` Pranith Kumar
2014-07-23 13:50       ` Paul E. McKenney
2014-07-23 14:12         ` Pranith Kumar
2014-07-23 14:23           ` Paul E. McKenney
2014-07-23 15:11             ` Pranith Kumar [this message]
2014-07-23 15:30               ` Paul E. McKenney
2014-07-23 15:44                 ` Pranith Kumar
2014-07-23 19:15                   ` Paul E. McKenney
2014-07-23 20:01                     ` Pranith Kumar
2014-07-23 20:16                     ` Pranith Kumar
2014-07-23 20:23                       ` Paul E. McKenney
2014-07-23  5:09 ` [PATCH 10/16] rcu: Check for RCU_FLAG_GP_INIT bit in gp_flags for spurious wakeup Pranith Kumar
2014-07-23 12:23   ` Paul E. McKenney
2014-07-23  5:09 ` [PATCH 11/16] rcu: Check for spurious wakeup using return value Pranith Kumar
2014-07-23 12:26   ` Paul E. McKenney
2014-07-24  2:36     ` Pranith Kumar
2014-07-24  3:43       ` Paul E. McKenney
2014-07-24  4:03         ` Pranith Kumar
2014-07-24 18:12           ` Paul E. McKenney
2014-07-24 19:59             ` Pranith Kumar
2014-07-24 20:27               ` Paul E. McKenney
2014-07-23  5:09 ` [PATCH 12/16] rcu: Rename rcu_spawn_gp_kthread() to rcu_spawn_kthreads() Pranith Kumar
2014-07-23  5:09 ` [PATCH 13/16] rcu: Spawn nocb kthreads from rcu_prepare_kthreads() Pranith Kumar
2014-07-23  5:09 ` [PATCH 14/16] rcu: Remove redundant checks for rcu_scheduler_fully_active Pranith Kumar
2014-07-23 12:27   ` Paul E. McKenney
2014-07-23  5:09 ` [PATCH 15/16] rcu: Check for a nocb cpu before trying to spawn nocb threads Pranith Kumar
2014-07-23 12:28   ` Paul E. McKenney
2014-07-23 13:14     ` Pranith Kumar
2014-07-23 13:42       ` Paul E. McKenney
2014-07-23  5:09 ` [PATCH 16/16] rcu: kvm.sh: Fix error when you pass --cpus argument Pranith Kumar
2014-07-23 12:31   ` Paul E. McKenney
2014-07-23 14:45 ` [PATCH 00/16] rcu: Some minor fixes and cleanups Paul E. McKenney
2014-08-27  1:10   ` Pranith Kumar
2014-08-27  3:20     ` Paul E. McKenney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAJhHMCA4Fdd4JbtKdNGABFYRBCqaLukLbydLAFA-3RiZXaTngA@mail.gmail.com \
    --to=bobby.prani@gmail.com \
    --cc=josh@joshtriplett.org \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=rostedt@goodmis.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.