Subject: Freeing global memory used only by __init functions

From: Gerald Champagne <[email-masked]>
Date: Tue, 18 Sep 2001 12:58:19 -0500

I noticed that several global buffers are used by a few functions marked
as __init functions.  I assume that the code space used by these functions
will be freed up when kernel initialization is completed, but can the
associated global memory be freed up as well?

An example can be found in arch/mips/mips-boards/generic/cmdline.c:

char arcs_cmdline[COMMAND_LINE_SIZE];
char * __init prom_getcmdline(void);
void  __init prom_init_cmdline(void);

arcs_cmdline is only used by these two functions and one other function
marked as __init.

This buffer is small, but it can apply to larger buffers as well.  For
example, in arch/mips/mips-boards/generic/printf.c, I think the functions
putPromChar and getPromChar should be marked as __init functions, and the
1k buffer "buf" is never used after initialization.  Can this 1k be recovered?

I know kmalloc could normally be used in kernel code, but that won't work on
initialization code used before kmalloc is initialized.

Thanks.

Gerald

---

From: Zhang Fuxin <[email-masked]>
Date: Wed, 19 Sep 2001 2:8:47 +0800

hi,Gerald Champagne，
      I think __initdata attribute is the answer.You just need to 
put init data in init data section(via __initdata),there are many examples
in kernel.

>initialization code used before kmalloc is initialized.

Regards
            Zhang Fuxin
            [email-masked]