Message ID | 20230717180317.1097590-3-paulmck@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Miscellaneous fixes for v6.6 | expand |
On Mon, 17 Jul 2023 at 11:03, Paul E. McKenney <paulmck@kernel.org> wrote: > > +// Dummy structure for srcu_notifier_head. > +struct srcu_usage { > + char srcuu_dummy; > +}; > + > +#define __SRCU_USAGE_INIT(name) { .srcuu_dummy = 0, } You really should be able to just do struct srcu_usage { }; #define __SRCU_USAGE_INIT(name) { } which is something we've done for ages for spinlocks in include/linux/spinlock_types_up.h because while we had a gcc bug wrt empty structures, that was ages ago (ie "gcc-2.x"). See commit a1365647022e ("[PATCH] remove gcc-2 checks") from 2006. So we've already had these kinds of empty dummy structs for literally over a decade in active use. Exactly so that you can avoid having to use #ifdef's etc, and can just always assume you have a spinlock, even if it doesn't generate any code or any data overhead. Linus
On Mon, Jul 17, 2023 at 11:09:56AM -0700, Linus Torvalds wrote: > On Mon, 17 Jul 2023 at 11:03, Paul E. McKenney <paulmck@kernel.org> wrote: > > > > +// Dummy structure for srcu_notifier_head. > > +struct srcu_usage { > > + char srcuu_dummy; > > +}; > > + > > +#define __SRCU_USAGE_INIT(name) { .srcuu_dummy = 0, } > > You really should be able to just do > > struct srcu_usage { }; > #define __SRCU_USAGE_INIT(name) { } > > which is something we've done for ages for spinlocks in > > include/linux/spinlock_types_up.h > > because while we had a gcc bug wrt empty structures, that was ages ago > (ie "gcc-2.x"). > > See commit a1365647022e ("[PATCH] remove gcc-2 checks") from 2006. > > So we've already had these kinds of empty dummy structs for literally > over a decade in active use. Exactly so that you can avoid having to > use #ifdef's etc, and can just always assume you have a spinlock, even > if it doesn't generate any code or any data overhead. Showing my age again, I guess. ;-) Thank you for the hint! I will rework this as you suggest. Thanx, Paul
diff --git a/include/linux/notifier.h b/include/linux/notifier.h index 86544707236a..45702bdcbceb 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h @@ -73,9 +73,7 @@ struct raw_notifier_head { struct srcu_notifier_head { struct mutex mutex; -#ifdef CONFIG_TREE_SRCU struct srcu_usage srcuu; -#endif struct srcu_struct srcu; struct notifier_block __rcu *head; }; @@ -106,7 +104,6 @@ extern void srcu_init_notifier_head(struct srcu_notifier_head *nh); #define RAW_NOTIFIER_INIT(name) { \ .head = NULL } -#ifdef CONFIG_TREE_SRCU #define SRCU_NOTIFIER_INIT(name, pcpu) \ { \ .mutex = __MUTEX_INITIALIZER(name.mutex), \ @@ -114,14 +111,6 @@ extern void srcu_init_notifier_head(struct srcu_notifier_head *nh); .srcuu = __SRCU_USAGE_INIT(name.srcuu), \ .srcu = __SRCU_STRUCT_INIT(name.srcu, name.srcuu, pcpu), \ } -#else -#define SRCU_NOTIFIER_INIT(name, pcpu) \ - { \ - .mutex = __MUTEX_INITIALIZER(name.mutex), \ - .head = NULL, \ - .srcu = __SRCU_STRUCT_INIT(name.srcu, name.srcuu, pcpu), \ - } -#endif #define ATOMIC_NOTIFIER_HEAD(name) \ struct atomic_notifier_head name = \ diff --git a/include/linux/srcutiny.h b/include/linux/srcutiny.h index ebd72491af99..06ce65518974 100644 --- a/include/linux/srcutiny.h +++ b/include/linux/srcutiny.h @@ -48,6 +48,13 @@ void srcu_drive_gp(struct work_struct *wp); #define DEFINE_STATIC_SRCU(name) \ static struct srcu_struct name = __SRCU_STRUCT_INIT(name, name, name) +// Dummy structure for srcu_notifier_head. +struct srcu_usage { + char srcuu_dummy; +}; + +#define __SRCU_USAGE_INIT(name) { .srcuu_dummy = 0, } + void synchronize_srcu(struct srcu_struct *ssp); /*
This commit removes two #ifdef directives from include/linux/notifier.h by causing SRCU Tiny to provide a dummy srcu_usage structure and a dummy __SRCU_USAGE_INIT() macro. Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> Cc: atthias Brugger <matthias.bgg@gmail.com> Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com> Cc: "Michał Mirosław" <mirq-linux@rere.qmqm.pl> Cc: Dmitry Osipenko <dmitry.osipenko@collabora.com> Cc: Sachin Sant <sachinp@linux.ibm.com> Cc: Joel Fernandes (Google) <joel@joelfernandes.org> Signed-off-by: Paul E. McKenney <paulmck@kernel.org> --- include/linux/notifier.h | 11 ----------- include/linux/srcutiny.h | 7 +++++++ 2 files changed, 7 insertions(+), 11 deletions(-)