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