All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josh Triplett <josh@joshtriplett.org>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org,
	laijs@cn.fujitsu.com, dipankar@in.ibm.com,
	akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
	niv@us.ibm.com, tglx@linutronix.de, peterz@infradead.org,
	rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com,
	darren@dvhart.com, fweisbec@gmail.com, oleg@redhat.com,
	sbw@mit.edu
Subject: Re: [PATCH tip/core/rcu 2/3] rcu: Optimize rcu_needs_cpu() for RCU_NOCB_CPU_ALL
Date: Mon, 17 Feb 2014 13:53:00 -0800	[thread overview]
Message-ID: <20140217215300.GF7941@thin> (raw)
In-Reply-To: <1392673227-7066-2-git-send-email-paulmck@linux.vnet.ibm.com>

On Mon, Feb 17, 2014 at 01:40:26PM -0800, Paul E. McKenney wrote:
> From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> 
> If CONFIG_RCU_NOCB_CPU_ALL=y, then rcu_needs_cpu() will always
> return false, however, the current version nevertheless checks
> for RCU callbacks.  This commit therefore creates a static inline
> implementation of rcu_needs_cpu() that unconditionally returns false
> when CONFIG_RCU_NOCB_CPU_ALL=y.
> 
> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>

Reviewed-by: Josh Triplett <josh@joshtriplett.org>

> ---
>  include/linux/rcupdate.h | 9 +++++++++
>  include/linux/rcutiny.h  | 6 ------
>  include/linux/rcutree.h  | 2 ++
>  kernel/rcu/tree.c        | 2 +-
>  kernel/rcu/tree_plugin.h | 4 ++++
>  5 files changed, 16 insertions(+), 7 deletions(-)
> 
> diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
> index 92365b1fede4..da77ef26b4ac 100644
> --- a/include/linux/rcupdate.h
> +++ b/include/linux/rcupdate.h
> @@ -1015,6 +1015,15 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)
>  #define kfree_rcu(ptr, rcu_head)					\
>  	__kfree_rcu(&((ptr)->rcu_head), offsetof(typeof(*(ptr)), rcu_head))
>  
> +#if defined(CONFIG_TINY_RCU) || defined(CONFIG_RCU_NOCB_CPU_ALL)
> +
> +static inline int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies)
> +{
> +	*delta_jiffies = ULONG_MAX;
> +	return 0;
> +}
> +#endif /* #if defined(CONFIG_TINY_RCU) || defined(CONFIG_RCU_NOCB_CPU_ALL) */
> +
>  #ifdef CONFIG_RCU_NOCB_CPU
>  #ifdef CONFIG_RCU_NOCB_CPU_ALL
>  static inline bool rcu_is_nocb_cpu(int cpu) { return true; }
> diff --git a/include/linux/rcutiny.h b/include/linux/rcutiny.h
> index 6f01771b571c..9524903487d0 100644
> --- a/include/linux/rcutiny.h
> +++ b/include/linux/rcutiny.h
> @@ -68,12 +68,6 @@ static inline void kfree_call_rcu(struct rcu_head *head,
>  	call_rcu(head, func);
>  }
>  
> -static inline int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies)
> -{
> -	*delta_jiffies = ULONG_MAX;
> -	return 0;
> -}
> -
>  static inline void rcu_note_context_switch(int cpu)
>  {
>  	rcu_sched_qs(cpu);
> diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h
> index 72137ee8c603..81198c84e268 100644
> --- a/include/linux/rcutree.h
> +++ b/include/linux/rcutree.h
> @@ -31,7 +31,9 @@
>  #define __LINUX_RCUTREE_H
>  
>  void rcu_note_context_switch(int cpu);
> +#ifndef CONFIG_RCU_NOCB_CPU_ALL
>  int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies);
> +#endif /* #ifndef CONFIG_RCU_NOCB_CPU_ALL */
>  void rcu_cpu_stall_reset(void);
>  
>  /*
> diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> index b3d116cd072d..c2c8234a0291 100644
> --- a/kernel/rcu/tree.c
> +++ b/kernel/rcu/tree.c
> @@ -2880,7 +2880,7 @@ static int rcu_pending(int cpu)
>   * non-NULL, store an indication of whether all callbacks are lazy.
>   * (If there are no callbacks, all of them are deemed to be lazy.)
>   */
> -static int rcu_cpu_has_callbacks(int cpu, bool *all_lazy)
> +static int __maybe_unused rcu_cpu_has_callbacks(int cpu, bool *all_lazy)
>  {
>  	bool al = true;
>  	bool hc = false;
> diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
> index 39a50b918bff..820b06aefbee 100644
> --- a/kernel/rcu/tree_plugin.h
> +++ b/kernel/rcu/tree_plugin.h
> @@ -1586,11 +1586,13 @@ static void rcu_prepare_kthreads(int cpu)
>   * Because we not have RCU_FAST_NO_HZ, just check whether this CPU needs
>   * any flavor of RCU.
>   */
> +#ifndef CONFIG_RCU_NOCB_CPU_ALL
>  int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies)
>  {
>  	*delta_jiffies = ULONG_MAX;
>  	return rcu_cpu_has_callbacks(cpu, NULL);
>  }
> +#endif /* #ifndef CONFIG_RCU_NOCB_CPU_ALL */
>  
>  /*
>   * Because we do not have RCU_FAST_NO_HZ, don't bother cleaning up
> @@ -1696,6 +1698,7 @@ static bool rcu_try_advance_all_cbs(void)
>   *
>   * The caller must have disabled interrupts.
>   */
> +#ifndef CONFIG_RCU_NOCB_CPU_ALL
>  int rcu_needs_cpu(int cpu, unsigned long *dj)
>  {
>  	struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu);
> @@ -1726,6 +1729,7 @@ int rcu_needs_cpu(int cpu, unsigned long *dj)
>  	}
>  	return 0;
>  }
> +#endif /* #ifndef CONFIG_RCU_NOCB_CPU_ALL */
>  
>  /*
>   * Prepare a CPU for idle from an RCU perspective.  The first major task
> -- 
> 1.8.1.5
> 

  reply	other threads:[~2014-02-17 21:53 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-17 21:40 [PATCH tip/core/rcu 0/3] Response-time changes for 3.15 Paul E. McKenney
2014-02-17 21:40 ` [PATCH tip/core/rcu 1/3] rcu: Optimize rcu_is_nocb_cpu() for RCU_NOCB_CPU_ALL Paul E. McKenney
2014-02-17 21:40   ` [PATCH tip/core/rcu 2/3] rcu: Optimize rcu_needs_cpu() " Paul E. McKenney
2014-02-17 21:53     ` Josh Triplett [this message]
2014-02-17 21:40   ` [PATCH tip/core/rcu 3/3] rcu: Optimize RCU_FAST_NO_HZ " Paul E. McKenney
2014-02-17 21:54     ` Josh Triplett
2014-02-17 21:50   ` [PATCH tip/core/rcu 1/3] rcu: Optimize rcu_is_nocb_cpu() " Josh Triplett
2014-02-17 23:33     ` Paul E. McKenney
  -- strict thread matches above, loose matches on Subject: below --
2013-11-18 22:02 [PATCH RFC tip/core/rcu 0/3] RT latency optimizations Paul E. McKenney
2013-11-18 22:02 ` [PATCH tip/core/rcu 1/3] rcu: Optimize rcu_is_nocb_cpu() for RCU_NOCB_CPU_ALL Paul E. McKenney
2013-11-18 22:02   ` [PATCH tip/core/rcu 2/3] rcu: Optimize rcu_needs_cpu() " 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=20140217215300.GF7941@thin \
    --to=josh@joshtriplett.org \
    --cc=akpm@linux-foundation.org \
    --cc=darren@dvhart.com \
    --cc=dhowells@redhat.com \
    --cc=dipankar@in.ibm.com \
    --cc=edumazet@google.com \
    --cc=fweisbec@gmail.com \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@kernel.org \
    --cc=niv@us.ibm.com \
    --cc=oleg@redhat.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=sbw@mit.edu \
    --cc=tglx@linutronix.de \
    /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.