All of lore.kernel.org
 help / color / mirror / Atom feed
* const __initdata?
@ 2007-11-29  7:28 Robert P. J. Day
  2007-11-29 16:53 ` Randy Dunlap
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Robert P. J. Day @ 2007-11-29  7:28 UTC (permalink / raw)
  To: kernel-janitors


  from include/linux/init.h:

 * For initialized data:
 * You should insert __initdata between the variable name and equal
 * sign followed by value, e.g.:
 *
 * static int init_variable __initdata = 0;
 * static char linux_logo[] __initdata = { 0x32, 0x36, ... };
 *
 * Don't forget to initialize data not at file scope, i.e. within a function,
 * as gcc otherwise puts the data into the bss section and not into the init
 * section.
 *
 * Also note, that this data cannot be "const".

you mean, like this in drivers/hwmon/w83627ehf.c:

/* w83627ehf_find() looks for a '627 in the Super-I/O config space */
static int __init w83627ehf_find(int sioaddr, unsigned short *addr,
                                 struct w83627ehf_sio_data *sio_data)
{
        static const char __initdata sio_name_W83627EHF[] = "W83627EHF";
        static const char __initdata sio_name_W83627EHG[] = "W83627EHG";
        static const char __initdata sio_name_W83627DHG[] = "W83627DHG";
	...

or am i misreading that?

rday

====================================
Robert P. J. Day
Linux Consulting, Training and Annoying Kernel Pedantry
Waterloo, Ontario, CANADA

http://crashcourse.ca
====================================

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

* Re: const __initdata?
  2007-11-29  7:28 const __initdata? Robert P. J. Day
@ 2007-11-29 16:53 ` Randy Dunlap
  2007-11-30 17:08 ` Robert P. J. Day
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Randy Dunlap @ 2007-11-29 16:53 UTC (permalink / raw)
  To: kernel-janitors

On Thu, 29 Nov 2007 02:28:43 -0500 (EST) Robert P. J. Day wrote:

> 
>   from include/linux/init.h:
> 
>  * For initialized data:
>  * You should insert __initdata between the variable name and equal
>  * sign followed by value, e.g.:
>  *
>  * static int init_variable __initdata = 0;
>  * static char linux_logo[] __initdata = { 0x32, 0x36, ... };
>  *
>  * Don't forget to initialize data not at file scope, i.e. within a function,
>  * as gcc otherwise puts the data into the bss section and not into the init
>  * section.
>  *
>  * Also note, that this data cannot be "const".
> 
> you mean, like this in drivers/hwmon/w83627ehf.c:
> 
> /* w83627ehf_find() looks for a '627 in the Super-I/O config space */
> static int __init w83627ehf_find(int sioaddr, unsigned short *addr,
>                                  struct w83627ehf_sio_data *sio_data)
> {
>         static const char __initdata sio_name_W83627EHF[] = "W83627EHF";
>         static const char __initdata sio_name_W83627EHG[] = "W83627EHG";
>         static const char __initdata sio_name_W83627DHG[] = "W83627DHG";
> 	...
> 
> or am i misreading that?

We have certainly seen problems with const __initdata being put
into a read-only section instead of the .init.data section, but
with gcc 4.2.1, I see these 3 __initdata items being placed into
the .init.data section no matter where I put "const" on the data
declaration line.  Maybe the problem has been fixed (relatively
recently).

---
~Randy

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

* Re: const __initdata?
  2007-11-29  7:28 const __initdata? Robert P. J. Day
  2007-11-29 16:53 ` Randy Dunlap
@ 2007-11-30 17:08 ` Robert P. J. Day
  2007-11-30 17:22 ` Randy Dunlap
  2007-12-01  0:20 ` Adrian Bunk
  3 siblings, 0 replies; 5+ messages in thread
From: Robert P. J. Day @ 2007-11-30 17:08 UTC (permalink / raw)
  To: kernel-janitors

On Thu, 29 Nov 2007, Randy Dunlap wrote:

> On Thu, 29 Nov 2007 02:28:43 -0500 (EST) Robert P. J. Day wrote:
>
> >
> >   from include/linux/init.h:
> >
> >  * For initialized data:
> >  * You should insert __initdata between the variable name and equal
> >  * sign followed by value, e.g.:
> >  *
> >  * static int init_variable __initdata = 0;
> >  * static char linux_logo[] __initdata = { 0x32, 0x36, ... };
> >  *
> >  * Don't forget to initialize data not at file scope, i.e. within a function,
> >  * as gcc otherwise puts the data into the bss section and not into the init
> >  * section.
> >  *
> >  * Also note, that this data cannot be "const".
> >
> > you mean, like this in drivers/hwmon/w83627ehf.c:
> >
> > /* w83627ehf_find() looks for a '627 in the Super-I/O config space */
> > static int __init w83627ehf_find(int sioaddr, unsigned short *addr,
> >                                  struct w83627ehf_sio_data *sio_data)
> > {
> >         static const char __initdata sio_name_W83627EHF[] = "W83627EHF";
> >         static const char __initdata sio_name_W83627EHG[] = "W83627EHG";
> >         static const char __initdata sio_name_W83627DHG[] = "W83627DHG";
> > 	...
> >
> > or am i misreading that?
>
> We have certainly seen problems with const __initdata being put
> into a read-only section instead of the .init.data section, but
> with gcc 4.2.1, I see these 3 __initdata items being placed into
> the .init.data section no matter where I put "const" on the data
> declaration line.  Maybe the problem has been fixed (relatively
> recently).

hmmmm ... not sure if i replied to this already but, in any event,
*something* should be updated, no?  at the very least, that comment.

rday

====================================
Robert P. J. Day
Linux Consulting, Training and Annoying Kernel Pedantry
Waterloo, Ontario, CANADA

http://crashcourse.ca
====================================

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

* Re: const __initdata?
  2007-11-29  7:28 const __initdata? Robert P. J. Day
  2007-11-29 16:53 ` Randy Dunlap
  2007-11-30 17:08 ` Robert P. J. Day
@ 2007-11-30 17:22 ` Randy Dunlap
  2007-12-01  0:20 ` Adrian Bunk
  3 siblings, 0 replies; 5+ messages in thread
From: Randy Dunlap @ 2007-11-30 17:22 UTC (permalink / raw)
  To: kernel-janitors

On Fri, 30 Nov 2007 12:08:46 -0500 (EST) Robert P. J. Day wrote:

> On Thu, 29 Nov 2007, Randy Dunlap wrote:
> 
> > On Thu, 29 Nov 2007 02:28:43 -0500 (EST) Robert P. J. Day wrote:
> >
> > >
> > >   from include/linux/init.h:
> > >
> > >  * For initialized data:
> > >  * You should insert __initdata between the variable name and equal
> > >  * sign followed by value, e.g.:
> > >  *
> > >  * static int init_variable __initdata = 0;
> > >  * static char linux_logo[] __initdata = { 0x32, 0x36, ... };
> > >  *
> > >  * Don't forget to initialize data not at file scope, i.e. within a function,
> > >  * as gcc otherwise puts the data into the bss section and not into the init
> > >  * section.
> > >  *
> > >  * Also note, that this data cannot be "const".
> > >
> > > you mean, like this in drivers/hwmon/w83627ehf.c:
> > >
> > > /* w83627ehf_find() looks for a '627 in the Super-I/O config space */
> > > static int __init w83627ehf_find(int sioaddr, unsigned short *addr,
> > >                                  struct w83627ehf_sio_data *sio_data)
> > > {
> > >         static const char __initdata sio_name_W83627EHF[] = "W83627EHF";
> > >         static const char __initdata sio_name_W83627EHG[] = "W83627EHG";
> > >         static const char __initdata sio_name_W83627DHG[] = "W83627DHG";
> > > 	...
> > >
> > > or am i misreading that?
> >
> > We have certainly seen problems with const __initdata being put
> > into a read-only section instead of the .init.data section, but
> > with gcc 4.2.1, I see these 3 __initdata items being placed into
> > the .init.data section no matter where I put "const" on the data
> > declaration line.  Maybe the problem has been fixed (relatively
> > recently).
> 
> hmmmm ... not sure if i replied to this already but, in any event,
> *something* should be updated, no?  at the very least, that comment.

Sure, when we are sure that all supported versions of gcc do the
right thing.

---
~Randy

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

* Re: const __initdata?
  2007-11-29  7:28 const __initdata? Robert P. J. Day
                   ` (2 preceding siblings ...)
  2007-11-30 17:22 ` Randy Dunlap
@ 2007-12-01  0:20 ` Adrian Bunk
  3 siblings, 0 replies; 5+ messages in thread
From: Adrian Bunk @ 2007-12-01  0:20 UTC (permalink / raw)
  To: kernel-janitors

On Thu, Nov 29, 2007 at 08:53:03AM -0800, Randy Dunlap wrote:
> On Thu, 29 Nov 2007 02:28:43 -0500 (EST) Robert P. J. Day wrote:
> 
> > 
> >   from include/linux/init.h:
> > 
> >  * For initialized data:
> >  * You should insert __initdata between the variable name and equal
> >  * sign followed by value, e.g.:
> >  *
> >  * static int init_variable __initdata = 0;
> >  * static char linux_logo[] __initdata = { 0x32, 0x36, ... };
> >  *
> >  * Don't forget to initialize data not at file scope, i.e. within a function,
> >  * as gcc otherwise puts the data into the bss section and not into the init
> >  * section.
> >  *
> >  * Also note, that this data cannot be "const".
> > 
> > you mean, like this in drivers/hwmon/w83627ehf.c:
> > 
> > /* w83627ehf_find() looks for a '627 in the Super-I/O config space */
> > static int __init w83627ehf_find(int sioaddr, unsigned short *addr,
> >                                  struct w83627ehf_sio_data *sio_data)
> > {
> >         static const char __initdata sio_name_W83627EHF[] = "W83627EHF";
> >         static const char __initdata sio_name_W83627EHG[] = "W83627EHG";
> >         static const char __initdata sio_name_W83627DHG[] = "W83627DHG";
> > 	...
> > 
> > or am i misreading that?
> 
> We have certainly seen problems with const __initdata being put
> into a read-only section instead of the .init.data section, but
> with gcc 4.2.1, I see these 3 __initdata items being placed into
> the .init.data section no matter where I put "const" on the data
> declaration line.  Maybe the problem has been fixed (relatively
> recently).

No, the difference is most likely related to the fact that these 
variables are inside a function, and "static" on variables inside a 
function does something different from "static" on variables outside
any function...

> ~Randy

cu
Adrian

-- 

       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed


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

end of thread, other threads:[~2007-12-01  0:20 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-29  7:28 const __initdata? Robert P. J. Day
2007-11-29 16:53 ` Randy Dunlap
2007-11-30 17:08 ` Robert P. J. Day
2007-11-30 17:22 ` Randy Dunlap
2007-12-01  0:20 ` Adrian Bunk

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.