lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Wed, 13 May 2015 05:59:02 -0700
From:	"Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>
To:	josh@...htriplett.org
Cc:	linux-kernel@...r.kernel.org, mingo@...nel.org,
	laijs@...fujitsu.com, dipankar@...ibm.com,
	akpm@...ux-foundation.org, mathieu.desnoyers@...icios.com,
	tglx@...utronix.de, peterz@...radead.org, rostedt@...dmis.org,
	dhowells@...hat.com, edumazet@...gle.com, dvhart@...ux.intel.com,
	fweisbec@...il.com, oleg@...hat.com, bobby.prani@...il.com
Subject: Re: [PATCH tip/core/rcu 1/3] rcu: Further shrink Tiny RCU by making
 empty functions static inlines

On Tue, May 12, 2015 at 05:57:18PM -0700, josh@...htriplett.org wrote:
> On Tue, May 12, 2015 at 03:49:11PM -0700, Paul E. McKenney wrote:
> > From: "Paul E. McKenney" <paulmck@...ux.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 <paulmck@...ux.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 <josh@...htriplett.org>

Thank you, and good point!  The commit log now reads as follows:

	rcu: Further shrink Tiny RCU by making empty functions static inlines

	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 needlessly consumes extra memory,
	especially in kernels built with module support.  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 <paulmck@...ux.vnet.ibm.com>
	Reviewed-by: Josh Triplett <josh@...htriplett.org>

Is that better?

							Thanx, Paul

> >  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 majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ