All of lore.kernel.org
 help / color / mirror / Atom feed
From: Frederic Weisbecker <frederic@kernel.org>
To: "Paul E. McKenney" <paulmck@linux.ibm.com>
Cc: "Joel Fernandes (Google)" <joel@joelfernandes.org>,
	linux-kernel@vger.kernel.org, rcu@vger.kernel.org
Subject: Re: [PATCH -rcu dev 1/3] rcu/tree: tick_dep_set/clear_cpu should accept bits instead of masks
Date: Mon, 19 Aug 2019 18:32:27 +0200	[thread overview]
Message-ID: <20190819163226.GE27088@lenoir> (raw)
In-Reply-To: <20190819144632.GW28441@linux.ibm.com>

On Mon, Aug 19, 2019 at 07:46:32AM -0700, Paul E. McKenney wrote:
> On Mon, Aug 19, 2019 at 02:38:38PM +0200, Frederic Weisbecker wrote:
> > On Thu, Aug 15, 2019 at 10:53:09PM -0400, Joel Fernandes (Google) wrote:
> > > This commit fixes the issue.
> > > 
> > > Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
> > > ---
> > >  kernel/rcu/tree.c | 29 +++++++++++++++++------------
> > >  1 file changed, 17 insertions(+), 12 deletions(-)
> > > 
> > > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> > > index 0512de9ead20..322b1b57967c 100644
> > > --- a/kernel/rcu/tree.c
> > > +++ b/kernel/rcu/tree.c
> > > @@ -829,7 +829,7 @@ static __always_inline void rcu_nmi_enter_common(bool irq)
> > >  		   !rdp->dynticks_nmi_nesting &&
> > >  		   rdp->rcu_urgent_qs && !rdp->rcu_forced_tick) {
> > >  		rdp->rcu_forced_tick = true;
> > > -		tick_dep_set_cpu(rdp->cpu, TICK_DEP_MASK_RCU);
> > > +		tick_dep_set_cpu(rdp->cpu, TICK_DEP_BIT_RCU);
> > 
> > Did I suggest you to use the _MASK_ value? That was a bit mean.
> > Sorry for all that lost debugging time :-(
> 
> At some point, I should have looked at the other calls to these
> functions.  :-/
> 
> But would the following patch make sense?  This would not help for (say)
> use of TICK_MASK_BIT_POSIX_TIMER instead of TICK_DEP_BIT_POSIX_TIMER, but
> would help for any new values that might be added later on.  And currently
> for TICK_DEP_MASK_CLOCK_UNSTABLE and TICK_DEP_MASK_RCU.

I'd rather make the TICK_DEP_MASK_* values private to kernel/time/tick-sched.c but
that means I need to re-arrange a bit include/trace/events/timer.h

I'm looking into it. Meanwhile, your below patch that checks for the max value is
still valuable.

Thanks.

> 
> 							Thanx, Paul
> 
> ------------------------------------------------------------------------
> 
> diff --git a/include/linux/tick.h b/include/linux/tick.h
> index 39eb44564058..4ed788ce5762 100644
> --- a/include/linux/tick.h
> +++ b/include/linux/tick.h
> @@ -111,6 +111,7 @@ enum tick_dep_bits {
>  	TICK_DEP_BIT_CLOCK_UNSTABLE	= 3,
>  	TICK_DEP_BIT_RCU		= 4
>  };
> +#define TICK_DEP_BIT_MAX TICK_DEP_BIT_RCU
>  
>  #define TICK_DEP_MASK_NONE		0
>  #define TICK_DEP_MASK_POSIX_TIMER	(1 << TICK_DEP_BIT_POSIX_TIMER)
> @@ -215,24 +216,28 @@ extern void tick_nohz_dep_clear_signal(struct signal_struct *signal,
>   */
>  static inline void tick_dep_set(enum tick_dep_bits bit)
>  {
> +	WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
>  	if (tick_nohz_full_enabled())
>  		tick_nohz_dep_set(bit);
>  }
>  
>  static inline void tick_dep_clear(enum tick_dep_bits bit)
>  {
> +	WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
>  	if (tick_nohz_full_enabled())
>  		tick_nohz_dep_clear(bit);
>  }
>  
>  static inline void tick_dep_set_cpu(int cpu, enum tick_dep_bits bit)
>  {
> +	WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
>  	if (tick_nohz_full_cpu(cpu))
>  		tick_nohz_dep_set_cpu(cpu, bit);
>  }
>  
>  static inline void tick_dep_clear_cpu(int cpu, enum tick_dep_bits bit)
>  {
> +	WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
>  	if (tick_nohz_full_cpu(cpu))
>  		tick_nohz_dep_clear_cpu(cpu, bit);
>  }
> @@ -240,24 +245,28 @@ static inline void tick_dep_clear_cpu(int cpu, enum tick_dep_bits bit)
>  static inline void tick_dep_set_task(struct task_struct *tsk,
>  				     enum tick_dep_bits bit)
>  {
> +	WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
>  	if (tick_nohz_full_enabled())
>  		tick_nohz_dep_set_task(tsk, bit);
>  }
>  static inline void tick_dep_clear_task(struct task_struct *tsk,
>  				       enum tick_dep_bits bit)
>  {
> +	WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
>  	if (tick_nohz_full_enabled())
>  		tick_nohz_dep_clear_task(tsk, bit);
>  }
>  static inline void tick_dep_set_signal(struct signal_struct *signal,
>  				       enum tick_dep_bits bit)
>  {
> +	WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
>  	if (tick_nohz_full_enabled())
>  		tick_nohz_dep_set_signal(signal, bit);
>  }
>  static inline void tick_dep_clear_signal(struct signal_struct *signal,
>  					 enum tick_dep_bits bit)
>  {
> +	WARN_ON_ONCE(bit > TICK_DEP_BIT_MAX);
>  	if (tick_nohz_full_enabled())
>  		tick_nohz_dep_clear_signal(signal, bit);
>  }

  reply	other threads:[~2019-08-19 16:32 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-16  2:53 [PATCH -rcu dev 1/3] rcu/tree: tick_dep_set/clear_cpu should accept bits instead of masks Joel Fernandes (Google)
2019-08-16  2:53 ` [PATCH -rcu dev 2/3] rcu/tree: Fix issue where sometimes rcu_urgent_qs is not set on IPI Joel Fernandes (Google)
2019-08-16  2:57   ` Joel Fernandes
2019-08-16  2:53 ` [PATCH -rcu dev 3/3] RFC: rcu/tree: Read dynticks_nmi_nesting in advance Joel Fernandes (Google)
2019-08-16 16:24   ` Joel Fernandes
2019-08-16 16:52     ` Paul E. McKenney
2019-08-16 17:07       ` Joel Fernandes
2019-08-16 17:30         ` Paul E. McKenney
2019-08-19 12:59       ` Frederic Weisbecker
2019-08-19 14:22         ` Joel Fernandes
2019-08-19 14:41           ` Paul E. McKenney
2019-08-19 15:46             ` Joel Fernandes
2019-08-19 16:17               ` Paul E. McKenney
2019-08-19 14:40         ` Paul E. McKenney
2019-08-16  2:59 ` [PATCH v2 -rcu dev 2/3] rcu/tree: Fix issue where sometimes rcu_urgent_qs is not set on IPI Joel Fernandes (Google)
2019-08-16 17:04   ` Paul E. McKenney
2019-08-16 17:25 ` [PATCH -rcu dev 1/3] rcu/tree: tick_dep_set/clear_cpu should accept bits instead of masks Paul E. McKenney
2019-08-16 17:35   ` Joel Fernandes
2019-08-19 12:38 ` Frederic Weisbecker
2019-08-19 14:46   ` Paul E. McKenney
2019-08-19 16:32     ` Frederic Weisbecker [this message]
2019-08-19 16:44       ` Paul E. McKenney
2019-08-20 12:08         ` Frederic Weisbecker
2019-08-20 14:44           ` 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=20190819163226.GE27088@lenoir \
    --to=frederic@kernel.org \
    --cc=joel@joelfernandes.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paulmck@linux.ibm.com \
    --cc=rcu@vger.kernel.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.