Re: __initdata query

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

"Peter Teoh" <htmldeveloper@xxxxxxxxx> writes:

> Hi Thomas Petazzoni,
>
> On Fri, Mar 14, 2008 at 10:06 PM, Peter Teoh <htmldeveloper@xxxxxxxxx> wrote:
>> >
>>  > The tag __initdata is for data used only during initialization (the
>>  >  data is put in a special ELF section that is discarded after
>>  >  initialization).
>>  >
>>  >
>>
>>  When is the discarding taking place?   Which part of the kernel source
>>  code is doing the discarding?
>>
> Just would like ask again does anyone know when is the memory
> discarding (of the ELF section marked as __initdata) taking place?
>
> first, the memory freeing must be triggered only after the __initdata
> functions have been executed - how does the kernel knows that?   next,
> this memory freeing MAY be executed while the module is still loaded -
> so someone has to trigger the operation some where.   when and where
> -> within the kernel source code -- are these found?

__initdata functions?

As far as I understood it, for modules, it works like this:

When a module is requested to load, the loader parses the ELF file and
allocates memory for the sections and saves pointers to them in a struct
module, including the init section of the module ELF.  Then all
init-stuff is and mapped into this executable vmalloc-region.  After
->init() has run (defined by module_init()), ->module_init is freed
again.  You can see this happen in sys_init_module().

On the other hand, the core kernel init stuff (on x86) is freed in
free_initmem(), called by init_post(), called at the end of
kernel_init() when all __init functions are done.

	Hannes

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux