public inbox for kernel-janitors@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86/platform/intel-mid: make several arrays static, makes code smaller
@ 2017-08-25 16:32 Colin King
  2017-08-25 16:53 ` Andy Shevchenko
  2017-08-25 17:51 ` Lukas Wunner
  0 siblings, 2 replies; 5+ messages in thread
From: Colin King @ 2017-08-25 16:32 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H . Peter Anvin, x86, Lukas Wunner,
	Bjorn Helgaas
  Cc: kernel-janitors, Andy Shevchenko, linux-kernel

From: Colin Ian King <colin.king@canonical.com>

Don't populate arrays on the stack, instead make them static .
Makes the object code smaller by 76 bytes:

Before:
   text	   data	    bss	    dec	    hex	filename
   4217	   1540	    128	   5885	   16fd	arch/x86/platform/intel-mid/pwr.o

After:
   text	   data	    bss	    dec	    hex	filename
   3981	   1700	    128	   5809	   16b1	arch/x86/platform/intel-mid/pwr.o

Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 arch/x86/platform/intel-mid/pwr.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/platform/intel-mid/pwr.c b/arch/x86/platform/intel-mid/pwr.c
index ef03852ea6e8..49ec5b94c71f 100644
--- a/arch/x86/platform/intel-mid/pwr.c
+++ b/arch/x86/platform/intel-mid/pwr.c
@@ -444,7 +444,7 @@ static int mid_set_initial_state(struct mid_pwr *pwr, const u32 *states)
 static int pnw_set_initial_state(struct mid_pwr *pwr)
 {
 	/* On Penwell SRAM must stay powered on */
-	const u32 states[] = {
+	static const u32 states[] = {
 		0xf00fffff,		/* PM_SSC(0) */
 		0xffffffff,		/* PM_SSC(1) */
 		0xffffffff,		/* PM_SSC(2) */
@@ -455,7 +455,7 @@ static int pnw_set_initial_state(struct mid_pwr *pwr)
 
 static int tng_set_initial_state(struct mid_pwr *pwr)
 {
-	const u32 states[] = {
+	static const u32 states[] = {
 		0xffffffff,		/* PM_SSC(0) */
 		0xffffffff,		/* PM_SSC(1) */
 		0xffffffff,		/* PM_SSC(2) */
-- 
2.14.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] x86/platform/intel-mid: make several arrays static, makes code smaller
  2017-08-25 16:32 [PATCH] x86/platform/intel-mid: make several arrays static, makes code smaller Colin King
@ 2017-08-25 16:53 ` Andy Shevchenko
  2017-08-25 17:51 ` Lukas Wunner
  1 sibling, 0 replies; 5+ messages in thread
From: Andy Shevchenko @ 2017-08-25 16:53 UTC (permalink / raw)
  To: Colin King, Thomas Gleixner, Ingo Molnar, H . Peter Anvin, x86,
	Lukas Wunner, Bjorn Helgaas
  Cc: kernel-janitors, linux-kernel

On Fri, 2017-08-25 at 17:32 +0100, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
> 
> Don't populate arrays on the stack, instead make them static .
> Makes the object code smaller by 76 bytes:
> 
> Before:
>    text	   data	    bss	    dec	    hex	
> filename
>    4217	   1540	    128	   5885	   16fd	
> arch/x86/platform/intel-mid/pwr.o
> 
> After:
>    text	   data	    bss	    dec	    hex	
> filename
>    3981	   1700	    128	   5809	   16b1	
> arch/x86/platform/intel-mid/pwr.o

Fine by me.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

> 
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  arch/x86/platform/intel-mid/pwr.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/platform/intel-mid/pwr.c
> b/arch/x86/platform/intel-mid/pwr.c
> index ef03852ea6e8..49ec5b94c71f 100644
> --- a/arch/x86/platform/intel-mid/pwr.c
> +++ b/arch/x86/platform/intel-mid/pwr.c
> @@ -444,7 +444,7 @@ static int mid_set_initial_state(struct mid_pwr
> *pwr, const u32 *states)
>  static int pnw_set_initial_state(struct mid_pwr *pwr)
>  {
>  	/* On Penwell SRAM must stay powered on */
> -	const u32 states[] = {
> +	static const u32 states[] = {
>  		0xf00fffff,		/* PM_SSC(0) */
>  		0xffffffff,		/* PM_SSC(1) */
>  		0xffffffff,		/* PM_SSC(2) */
> @@ -455,7 +455,7 @@ static int pnw_set_initial_state(struct mid_pwr
> *pwr)
>  
>  static int tng_set_initial_state(struct mid_pwr *pwr)
>  {
> -	const u32 states[] = {
> +	static const u32 states[] = {
>  		0xffffffff,		/* PM_SSC(0) */
>  		0xffffffff,		/* PM_SSC(1) */
>  		0xffffffff,		/* PM_SSC(2) */

-- 
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] x86/platform/intel-mid: make several arrays static, makes code smaller
  2017-08-25 16:32 [PATCH] x86/platform/intel-mid: make several arrays static, makes code smaller Colin King
  2017-08-25 16:53 ` Andy Shevchenko
@ 2017-08-25 17:51 ` Lukas Wunner
  2017-08-25 17:53   ` Andy Shevchenko
  1 sibling, 1 reply; 5+ messages in thread
From: Lukas Wunner @ 2017-08-25 17:51 UTC (permalink / raw)
  To: Colin King
  Cc: Thomas Gleixner, Ingo Molnar, H . Peter Anvin, x86, Bjorn Helgaas,
	kernel-janitors, Andy Shevchenko, linux-kernel

On Fri, Aug 25, 2017 at 05:32:06PM +0100, Colin King wrote:
> --- a/arch/x86/platform/intel-mid/pwr.c
> +++ b/arch/x86/platform/intel-mid/pwr.c
> @@ -444,7 +444,7 @@ static int mid_set_initial_state(struct mid_pwr *pwr, const u32 *states)
>  static int pnw_set_initial_state(struct mid_pwr *pwr)
>  {
>  	/* On Penwell SRAM must stay powered on */
> -	const u32 states[] = {
> +	static const u32 states[] = {
>  		0xf00fffff,		/* PM_SSC(0) */
>  		0xffffffff,		/* PM_SSC(1) */
>  		0xffffffff,		/* PM_SSC(2) */

That's a known gcc bug:
https://gcc.gnu.org/bugzilla/show_bug.cgi?idh725

There are hundreds of constant compound literals that are generated
on the stack rather than stored in rodata, do you intend to file
patches for all of them?  Adding static everywhere is just a
workaround that bloats the code.  Fixing the root cause in gcc would
make more sense.

Just my 2 cents worth of course.

Thanks,

Lukas

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] x86/platform/intel-mid: make several arrays static, makes code smaller
  2017-08-25 17:51 ` Lukas Wunner
@ 2017-08-25 17:53   ` Andy Shevchenko
  2017-08-25 18:13     ` Colin Ian King
  0 siblings, 1 reply; 5+ messages in thread
From: Andy Shevchenko @ 2017-08-25 17:53 UTC (permalink / raw)
  To: Lukas Wunner, Colin King
  Cc: Thomas Gleixner, Ingo Molnar, H . Peter Anvin, x86, Bjorn Helgaas,
	kernel-janitors, linux-kernel

On Fri, 2017-08-25 at 19:51 +0200, Lukas Wunner wrote:
> On Fri, Aug 25, 2017 at 05:32:06PM +0100, Colin King wrote:
> > --- a/arch/x86/platform/intel-mid/pwr.c
> > +++ b/arch/x86/platform/intel-mid/pwr.c
> > @@ -444,7 +444,7 @@ static int mid_set_initial_state(struct mid_pwr
> > *pwr, const u32 *states)
> >  static int pnw_set_initial_state(struct mid_pwr *pwr)
> >  {
> >  	/* On Penwell SRAM must stay powered on */
> > -	const u32 states[] = {
> > +	static const u32 states[] = {
> >  		0xf00fffff,		/* PM_SSC(0) */
> >  		0xffffffff,		/* PM_SSC(1) */
> >  		0xffffffff,		/* PM_SSC(2) */
> 
> That's a known gcc bug:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?idh725
> 
> There are hundreds of constant compound literals that are generated
> on the stack rather than stored in rodata, do you intend to file
> patches for all of them?  Adding static everywhere is just a
> workaround that bloats the code.  Fixing the root cause in gcc would
> make more sense.

That is a good point.

-- 
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] x86/platform/intel-mid: make several arrays static, makes code smaller
  2017-08-25 17:53   ` Andy Shevchenko
@ 2017-08-25 18:13     ` Colin Ian King
  0 siblings, 0 replies; 5+ messages in thread
From: Colin Ian King @ 2017-08-25 18:13 UTC (permalink / raw)
  To: Andy Shevchenko, Lukas Wunner
  Cc: Thomas Gleixner, Ingo Molnar, H . Peter Anvin, x86, Bjorn Helgaas,
	kernel-janitors, linux-kernel

On 25/08/17 18:53, Andy Shevchenko wrote:
> On Fri, 2017-08-25 at 19:51 +0200, Lukas Wunner wrote:
>> On Fri, Aug 25, 2017 at 05:32:06PM +0100, Colin King wrote:
>>> --- a/arch/x86/platform/intel-mid/pwr.c
>>> +++ b/arch/x86/platform/intel-mid/pwr.c
>>> @@ -444,7 +444,7 @@ static int mid_set_initial_state(struct mid_pwr
>>> *pwr, const u32 *states)
>>>  static int pnw_set_initial_state(struct mid_pwr *pwr)
>>>  {
>>>  	/* On Penwell SRAM must stay powered on */
>>> -	const u32 states[] = {
>>> +	static const u32 states[] = {
>>>  		0xf00fffff,		/* PM_SSC(0) */
>>>  		0xffffffff,		/* PM_SSC(1) */
>>>  		0xffffffff,		/* PM_SSC(2) */
>>
>> That's a known gcc bug:
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?idh725
>>
>> There are hundreds of constant compound literals that are generated
>> on the stack rather than stored in rodata, do you intend to file
>> patches for all of them?  Adding static everywhere is just a
>> workaround that bloats the code.  Fixing the root cause in gcc would
>> make more sense.

Hrm.  constifying will specify it won't be changed; section A8.2 of "The
C programming language" 2nd edition states that this specifier "is to
announce that objects may be placed in read-only memory, and perhaps
increase opportunities for optimization".  Emphasis on "may", it can do,
but it does not necessarily have to. The static storage class specifier
will ensure the object is not on the stack for sure.  So I think from my
understanding of the semantics described in K&R 2nd edition:

const - data is read only, and can be put into read-only location if
compiler can (or wants) to do so
static - data will be not stashed on the stack.

So my change is to be totally clear on the intent - make it read only
and ensure it is not populated at run time on the stack.

Colin

> 
> That is a good point.
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-08-25 18:13 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-25 16:32 [PATCH] x86/platform/intel-mid: make several arrays static, makes code smaller Colin King
2017-08-25 16:53 ` Andy Shevchenko
2017-08-25 17:51 ` Lukas Wunner
2017-08-25 17:53   ` Andy Shevchenko
2017-08-25 18:13     ` Colin Ian King

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox