On Thu, Aug 16, 2012 at 12:39 PM, Amarnath Revanna <amarnath.revanna@xxxxxxxxx> wrote: > Just want to add a little more for better understanding: > > When I spoke about .init section of the final kernel image, please note that > this section is going to > contain all the __init data (and functions) coming from _All_ the drivers > and modules that were included > as part of the kernel image. Hence, after initialization when we look at the > print: > > " [1.011596] Freeing unused kernel memory: 664k freed " > > we see 664k bytes being freed. > > This is a significant amount of contiguous physical memory that we can see > being released by the kernel. > > The same cannot be held true for a single loadable module which may be > releasing just a few, virtually > contiguous memory. FWIW, theres no reason that the loadable module's __init section must be in the same allocation as the module code itself. The lifetime is certainly different, so "pre-fragmenting" it could leave fewer holes overall. I dont know if this is actually done (this way), but it seems reasonably likely, given that the per-module sections exist. $ readelf -a /lib/modules/3.6.0-rc3-cha-dyndbg-00008-g6e433ac/kernel/drivers/usb/serial/pl2303.ko | grep init [ 4] .init.text PROGBITS 00000000 00197c 000019 00 AX 0 0 1 [ 5] .rel.init.text REL 00000000 02a58c 000020 08 44 4 4 00001754 0000b702 R_386_PC32 00000000 __init_waitqueue_head Relocation section '.rel.init.text' at offset 0x2a58c contains 4 entries: ... > > Regards, > -Amar > > _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies