On Tue, Oct 23, 2012 at 5:40 AM,  <g...@snapgear.com> wrote:
> From: Greg Ungerer <g...@uclinux.org>
>
> Currently each sub-architecture has its own implementation if init_freemem().
> There is two different cases that the various implementations deal with.
> They either free the init memory, or they don't. We only need a single 
> instance
> to cover all cases.
>
> The non-MMU version did some page alignment twidling, but this is not
> neccessary. The current linker script enforces page alignment. It also
> checked for CONFIG_RAMKERNEL, but this also is not necessary, the linker
> script always keeps the init sections in RAM.
>
> The MMU ColdFire version of free_initmem() was empty. There is no reason it
> can't carry out the freeing of the init memory. So it is now changed and
> tested to do this.
>
> For the other MMU cases the code is the same. For the general Motorola MMU
> case we free the init memory. For the SUN3 case we do nothing (though I
> think it could safely free the init memory as well).
>
> Signed-off-by: Greg Ungerer <g...@uclinux.org>

Acked-by: Geert Uytterhoeven <ge...@linux-m68k.org>


>  void free_initmem(void)
>  {
> -#ifdef CONFIG_RAMKERNEL
> +#ifndef CONFIG_MMU_SUN3
>         unsigned long addr;
>
> -       /*
> -        * The following code should be cool even if these sections
> -        * are not page aligned.
> -        */
> -       addr = PAGE_ALIGN((unsigned long) __init_begin);
> -       /* next to check that the page we free is not a partial page */
> -       for (; addr + PAGE_SIZE < ((unsigned long) __init_end); addr += 
> PAGE_SIZE) {
> +       addr = (unsigned long) __init_begin;
> +       for (; addr < ((unsigned long) __init_end); addr += PAGE_SIZE) {
>                 ClearPageReserved(virt_to_page(addr));
>                 init_page_count(virt_to_page(addr));
>                 free_page(addr);
>                 totalram_pages++;
>         }
>         pr_notice("Freeing unused kernel memory: %luk freed (0x%x - 0x%x)\n",
> -               (addr - PAGE_ALIGN((unsigned long) __init_begin)) >> 10,
> -               (int)(PAGE_ALIGN((unsigned long) __init_begin)),
> -               (int)(addr - PAGE_SIZE));
> -#endif
> +               (addr - (unsigned long) __init_begin) >> 10,
> +               (unsigned int) __init_begin, (unsigned int) __init_end);

Which is now BTW almost identical to free_initrd_mem(), so the common
parts can be extracted in a helper function.

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
_______________________________________________
uClinux-dev mailing list
uClinux-dev@uclinux.org
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by uclinux-dev@uclinux.org
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev

Reply via email to