On Tue, May 12, 2015 at 03:49:11PM -0700, Paul E. McKenney wrote: > From: "Paul E. McKenney" <paul...@linux.vnet.ibm.com> > > The Tiny RCU counterparts to rcu_idle_enter(), rcu_idle_exit(), > rcu_irq_enter(), and rcu_irq_exit() are empty functions, but each > has EXPORT_SYMBOL_GPL(), which, in kernels built with module support, > needlessly consumes some memory. This commit therefore moves these > functions to static inlines in rcutiny.h, removing the need for > exports. > > This won't affect the size of the tiniest kernels, which are likely > built without module support, but might help semi-tiny kernels that > might include module support. > > Signed-off-by: Paul E. McKenney <paul...@linux.vnet.ibm.com>
Even on kernels that don't include module support, this would shave a few bytes. Callers can't know a function in another .c file is actually empty (without LTO, anyway), so callers have to actually *call* these empty functions, and the functions themselves would need to be emitted. Turning them into static inlines tells the callers that they can avoid emitting any code. Reviewed-by: Josh Triplett <j...@joshtriplett.org> > include/linux/rcupdate.h | 4 ---- > include/linux/rcutiny.h | 16 ++++++++++++++++ > include/linux/rcutree.h | 5 +++++ > kernel/rcu/tiny.c | 33 --------------------------------- > 4 files changed, 21 insertions(+), 37 deletions(-) > > diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h > index 87bb0eee665b..1b3d7bcb3a6c 100644 > --- a/include/linux/rcupdate.h > +++ b/include/linux/rcupdate.h > @@ -292,10 +292,6 @@ void rcu_sched_qs(void); > void rcu_bh_qs(void); > void rcu_check_callbacks(int user); > struct notifier_block; > -void rcu_idle_enter(void); > -void rcu_idle_exit(void); > -void rcu_irq_enter(void); > -void rcu_irq_exit(void); > int rcu_cpu_notify(struct notifier_block *self, > unsigned long action, void *hcpu); > > diff --git a/include/linux/rcutiny.h b/include/linux/rcutiny.h > index 937edaeb150d..3df6c1ec4e25 100644 > --- a/include/linux/rcutiny.h > +++ b/include/linux/rcutiny.h > @@ -159,6 +159,22 @@ static inline void rcu_cpu_stall_reset(void) > { > } > > +static inline void rcu_idle_enter(void) > +{ > +} > + > +static inline void rcu_idle_exit(void) > +{ > +} > + > +static inline void rcu_irq_enter(void) > +{ > +} > + > +static inline void rcu_irq_exit(void) > +{ > +} > + > static inline void exit_rcu(void) > { > } > diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h > index d2e583a6aaca..f22d83f49e56 100644 > --- a/include/linux/rcutree.h > +++ b/include/linux/rcutree.h > @@ -93,6 +93,11 @@ void rcu_force_quiescent_state(void); > void rcu_bh_force_quiescent_state(void); > void rcu_sched_force_quiescent_state(void); > > +void rcu_idle_enter(void); > +void rcu_idle_exit(void); > +void rcu_irq_enter(void); > +void rcu_irq_exit(void); > + > void exit_rcu(void); > > void rcu_scheduler_starting(void); > diff --git a/kernel/rcu/tiny.c b/kernel/rcu/tiny.c > index 069742d61c68..a501b4ab9b1c 100644 > --- a/kernel/rcu/tiny.c > +++ b/kernel/rcu/tiny.c > @@ -49,39 +49,6 @@ static void __call_rcu(struct rcu_head *head, > > #include "tiny_plugin.h" > > -/* > - * Enter idle, which is an extended quiescent state if we have fully > - * entered that mode. > - */ > -void rcu_idle_enter(void) > -{ > -} > -EXPORT_SYMBOL_GPL(rcu_idle_enter); > - > -/* > - * Exit an interrupt handler towards idle. > - */ > -void rcu_irq_exit(void) > -{ > -} > -EXPORT_SYMBOL_GPL(rcu_irq_exit); > - > -/* > - * Exit idle, so that we are no longer in an extended quiescent state. > - */ > -void rcu_idle_exit(void) > -{ > -} > -EXPORT_SYMBOL_GPL(rcu_idle_exit); > - > -/* > - * Enter an interrupt handler, moving away from idle. > - */ > -void rcu_irq_enter(void) > -{ > -} > -EXPORT_SYMBOL_GPL(rcu_irq_enter); > - > #if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_RCU_TRACE) > > /* > -- > 1.8.1.5 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/