All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Pranith Kumar <bobby.prani@gmail.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	"supporter:S390" <linux390@de.ibm.com>,
	Lai Jiangshan <laijs@cn.fujitsu.com>,
	Josh Triplett <josh@joshtriplett.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Jens Freimann <jfrei@linux.vnet.ibm.com>,
	"open list:S390" <linux-s390@vger.kernel.org>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] srcu: Isolate srcu sections using CONFIG_SRCU
Date: Tue, 9 Dec 2014 16:41:15 -0800	[thread overview]
Message-ID: <20141210004115.GN25340@linux.vnet.ibm.com> (raw)
In-Reply-To: <1418150903-15760-1-git-send-email-bobby.prani@gmail.com>

On Tue, Dec 09, 2014 at 01:48:21PM -0500, Pranith Kumar wrote:
> Isolate the SRCU functions and data structures within CONFIG_SRCU so that there
> is a compile time failure if srcu is used when not enabled. This was decided to
> be better than waiting until link time for a failure to occur.
> 
> Also make including kvm_host.h conditional on CONFIG_KVM being enabled. This
> prevents build failures as KVM is dependent on SRCU.
> 
> Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
> CC: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> CC: Josh Triplett <josh@joshtriplett.org>
> CC: Lai Jiangshan <laijs@cn.fujitsu.com>
> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>

Queued for testing (finally), replacing the earlier patch.  ;-)

							Thanx, Paul

> ---
>  arch/s390/kernel/asm-offsets.c |  7 ++++++-
>  include/linux/notifier.h       | 47 ++++++++++++++++++++++++------------------
>  include/linux/srcu.h           |  6 +++++-
>  3 files changed, 38 insertions(+), 22 deletions(-)
> 
> diff --git a/arch/s390/kernel/asm-offsets.c b/arch/s390/kernel/asm-offsets.c
> index ef279a1..2813a3c 100644
> --- a/arch/s390/kernel/asm-offsets.c
> +++ b/arch/s390/kernel/asm-offsets.c
> @@ -7,12 +7,15 @@
>  #define ASM_OFFSETS_C
> 
>  #include <linux/kbuild.h>
> -#include <linux/kvm_host.h>
>  #include <linux/sched.h>
>  #include <asm/idle.h>
>  #include <asm/vdso.h>
>  #include <asm/pgtable.h>
> 
> +#if IS_ENABLED(CONFIG_KVM)
> +#include <linux/kvm_host.h>
> +#endif
> +
>  /*
>   * Make sure that the compiler is new enough. We want a compiler that
>   * is known to work with the "Q" assembler constraint.
> @@ -182,8 +185,10 @@ int main(void)
>  	DEFINE(__LC_PGM_TDB, offsetof(struct _lowcore, pgm_tdb));
>  	DEFINE(__THREAD_trap_tdb, offsetof(struct task_struct, thread.trap_tdb));
>  	DEFINE(__GMAP_ASCE, offsetof(struct gmap, asce));
> +#if IS_ENABLED(CONFIG_KVM)
>  	DEFINE(__SIE_PROG0C, offsetof(struct kvm_s390_sie_block, prog0c));
>  	DEFINE(__SIE_PROG20, offsetof(struct kvm_s390_sie_block, prog20));
> +#endif /* CONFIG_KVM */
>  #endif /* CONFIG_32BIT */
>  	return 0;
>  }
> diff --git a/include/linux/notifier.h b/include/linux/notifier.h
> index d14a4c3..fe4f02a 100644
> --- a/include/linux/notifier.h
> +++ b/include/linux/notifier.h
> @@ -47,6 +47,8 @@
>   * runtime initialization.
>   */
> 
> +struct notifier_block;
> +
>  typedef	int (*notifier_fn_t)(struct notifier_block *nb,
>  			unsigned long action, void *data);
> 
> @@ -70,12 +72,6 @@ struct raw_notifier_head {
>  	struct notifier_block __rcu *head;
>  };
> 
> -struct srcu_notifier_head {
> -	struct mutex mutex;
> -	struct srcu_struct srcu;
> -	struct notifier_block __rcu *head;
> -};
> -
>  #define ATOMIC_INIT_NOTIFIER_HEAD(name) do {	\
>  		spin_lock_init(&(name)->lock);	\
>  		(name)->head = NULL;		\
> @@ -88,11 +84,6 @@ struct srcu_notifier_head {
>  		(name)->head = NULL;		\
>  	} while (0)
> 
> -/* srcu_notifier_heads must be initialized and cleaned up dynamically */
> -extern void srcu_init_notifier_head(struct srcu_notifier_head *nh);
> -#define srcu_cleanup_notifier_head(name)	\
> -		cleanup_srcu_struct(&(name)->srcu);
> -
>  #define ATOMIC_NOTIFIER_INIT(name) {				\
>  		.lock = __SPIN_LOCK_UNLOCKED(name.lock),	\
>  		.head = NULL }
> @@ -101,7 +92,6 @@ extern void srcu_init_notifier_head(struct srcu_notifier_head *nh);
>  		.head = NULL }
>  #define RAW_NOTIFIER_INIT(name)	{				\
>  		.head = NULL }
> -/* srcu_notifier_heads cannot be initialized statically */
> 
>  #define ATOMIC_NOTIFIER_HEAD(name)				\
>  	struct atomic_notifier_head name =			\
> @@ -121,8 +111,6 @@ extern int blocking_notifier_chain_register(struct blocking_notifier_head *nh,
>  		struct notifier_block *nb);
>  extern int raw_notifier_chain_register(struct raw_notifier_head *nh,
>  		struct notifier_block *nb);
> -extern int srcu_notifier_chain_register(struct srcu_notifier_head *nh,
> -		struct notifier_block *nb);
> 
>  extern int blocking_notifier_chain_cond_register(
>  		struct blocking_notifier_head *nh,
> @@ -134,8 +122,6 @@ extern int blocking_notifier_chain_unregister(struct blocking_notifier_head *nh,
>  		struct notifier_block *nb);
>  extern int raw_notifier_chain_unregister(struct raw_notifier_head *nh,
>  		struct notifier_block *nb);
> -extern int srcu_notifier_chain_unregister(struct srcu_notifier_head *nh,
> -		struct notifier_block *nb);
> 
>  extern int atomic_notifier_call_chain(struct atomic_notifier_head *nh,
>  		unsigned long val, void *v);
> @@ -149,10 +135,6 @@ extern int raw_notifier_call_chain(struct raw_notifier_head *nh,
>  		unsigned long val, void *v);
>  extern int __raw_notifier_call_chain(struct raw_notifier_head *nh,
>  	unsigned long val, void *v, int nr_to_call, int *nr_calls);
> -extern int srcu_notifier_call_chain(struct srcu_notifier_head *nh,
> -		unsigned long val, void *v);
> -extern int __srcu_notifier_call_chain(struct srcu_notifier_head *nh,
> -	unsigned long val, void *v, int nr_to_call, int *nr_calls);
> 
>  #define NOTIFY_DONE		0x0000		/* Don't care */
>  #define NOTIFY_OK		0x0001		/* Suits me */
> @@ -211,5 +193,30 @@ static inline int notifier_to_errno(int ret)
> 
>  extern struct blocking_notifier_head reboot_notifier_list;
> 
> +#ifdef CONFIG_SRCU
> +
> +struct srcu_notifier_head {
> +	struct mutex mutex;
> +	struct srcu_struct srcu;
> +	struct notifier_block __rcu *head;
> +};
> +
> +/* srcu_notifier_heads must be initialized and cleaned up dynamically
> + * srcu_notifier_heads cannot be initialized statically
> + */
> +extern void srcu_init_notifier_head(struct srcu_notifier_head *nh);
> +#define srcu_cleanup_notifier_head(name) cleanup_srcu_struct(&(name)->srcu)
> +
> +extern int srcu_notifier_chain_register(struct srcu_notifier_head *nh,
> +		struct notifier_block *nb);
> +extern int srcu_notifier_chain_unregister(struct srcu_notifier_head *nh,
> +		struct notifier_block *nb);
> +extern int srcu_notifier_call_chain(struct srcu_notifier_head *nh,
> +		unsigned long val, void *v);
> +extern int __srcu_notifier_call_chain(struct srcu_notifier_head *nh,
> +	unsigned long val, void *v, int nr_to_call, int *nr_calls);
> +
> +#endif /* CONFIG_SRCU */
> +
>  #endif /* __KERNEL__ */
>  #endif /* _LINUX_NOTIFIER_H */
> diff --git a/include/linux/srcu.h b/include/linux/srcu.h
> index 9cfd962..ed9c389 100644
> --- a/include/linux/srcu.h
> +++ b/include/linux/srcu.h
> @@ -26,6 +26,8 @@
>   *
>   */
> 
> +#ifdef CONFIG_SRCU
> +
>  #ifndef _LINUX_SRCU_H
>  #define _LINUX_SRCU_H
> 
> @@ -249,4 +251,6 @@ static inline void smp_mb__after_srcu_read_unlock(void)
>  	/* __srcu_read_unlock has smp_mb() internally so nothing to do here. */
>  }
> 
> -#endif
> +#endif /* _LINUX_SRCU_H */
> +
> +#endif /* CONFIG_SRCU */
> -- 
> 1.9.1
> 


  parent reply	other threads:[~2014-12-10  0:41 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-09 18:48 [PATCH] srcu: Isolate srcu sections using CONFIG_SRCU Pranith Kumar
2014-12-09 20:12 ` Mathieu Desnoyers
2014-12-10  0:41 ` Paul E. McKenney [this message]
  -- strict thread matches above, loose matches on Subject: below --
2014-12-27 17:17 Pranith Kumar
2014-12-27 17:17 ` Pranith Kumar
2014-12-29 10:03 ` Martin Schwidefsky
2014-12-29 10:03   ` Martin Schwidefsky
2014-12-30  4:32   ` Pranith Kumar
2014-12-30  4:32     ` Pranith Kumar
2014-12-30 19:44     ` Scott Wood
2014-12-30 19:44       ` Scott Wood
2014-12-29 23:05 ` Scott Wood
2014-12-29 23:05   ` Scott Wood
2014-12-30  5:06   ` Pranith Kumar
2014-12-30  5:06     ` Pranith Kumar
2014-12-09 14:16 Pranith Kumar
2014-12-09 17:02 ` Paul E. McKenney
2014-12-08 20:23 Pranith Kumar
2014-12-08 15:55 Pranith Kumar
2014-12-08 18:10 ` 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=20141210004115.GN25340@linux.vnet.ibm.com \
    --to=paulmck@linux.vnet.ibm.com \
    --cc=bobby.prani@gmail.com \
    --cc=borntraeger@de.ibm.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=jfrei@linux.vnet.ibm.com \
    --cc=josh@joshtriplett.org \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linux390@de.ibm.com \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=rostedt@goodmis.org \
    --cc=schwidefsky@de.ibm.com \
    /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.