gerg
2012-11-30 04:27:50 UTC
From: Greg Ungerer <gerg at uclinux.org>
We have separate architecture functions for freeing the initrd memory, and
for freeing the init sections. But they are essentially the same code, they
are doing exactly the same thing.
Create a common local arch free memory function and make the current users
call it to do the real work.
Signed-off-by: Greg Ungerer <gerg at uclinux.org>
---
arch/m68k/mm/init.c | 42 ++++++++++++++++++++----------------------
1 files changed, 20 insertions(+), 22 deletions(-)
diff --git a/arch/m68k/mm/init.c b/arch/m68k/mm/init.c
index f0e05bc..a95f6c4 100644
--- a/arch/m68k/mm/init.c
+++ b/arch/m68k/mm/init.c
@@ -105,21 +105,34 @@ void __init paging_init(void)
#endif /* CONFIG_MMU */
-void free_initmem(void)
+static void free_mem(const char *name, unsigned long start, unsigned long end)
{
-#ifndef CONFIG_MMU_SUN3
unsigned long addr;
+ int pages = 0;
- addr = (unsigned long) __init_begin;
- for (; addr < ((unsigned long) __init_end); addr += PAGE_SIZE) {
+ for (addr = start; addr < end; addr += PAGE_SIZE) {
ClearPageReserved(virt_to_page(addr));
init_page_count(virt_to_page(addr));
free_page(addr);
totalram_pages++;
+ pages++;
}
- pr_notice("Freeing unused kernel memory: %luk freed (0x%x - 0x%x)\n",
- (addr - (unsigned long) __init_begin) >> 10,
- (unsigned int) __init_begin, (unsigned int) __init_end);
+ pr_notice("Freeing %s memory: %dk freed (0x%lx-0x%lx)\n", name,
+ pages << (PAGE_SHIFT - 10), start, end);
+}
+
+#ifdef CONFIG_BLK_DEV_INITRD
+void free_initrd_mem(unsigned long start, unsigned long end)
+{
+ free_mem("initrd", start, end);
+}
+#endif
+
+void free_initmem(void)
+{
+#ifndef CONFIG_MMU_SUN3
+ free_mem("unused kernel", (unsigned long) __init_begin,
+ (unsigned long) __init_end);
#endif /* CONFIG_MMU_SUN3 */
}
@@ -208,18 +221,3 @@ void __init mem_init(void)
print_memmap();
}
-#ifdef CONFIG_BLK_DEV_INITRD
-void free_initrd_mem(unsigned long start, unsigned long end)
-{
- int pages = 0;
- for (; start < end; start += PAGE_SIZE) {
- ClearPageReserved(virt_to_page(start));
- init_page_count(virt_to_page(start));
- free_page(start);
- totalram_pages++;
- pages++;
- }
- pr_notice("Freeing initrd memory: %dk freed\n",
- pages << (PAGE_SHIFT - 10));
-}
-#endif
We have separate architecture functions for freeing the initrd memory, and
for freeing the init sections. But they are essentially the same code, they
are doing exactly the same thing.
Create a common local arch free memory function and make the current users
call it to do the real work.
Signed-off-by: Greg Ungerer <gerg at uclinux.org>
---
arch/m68k/mm/init.c | 42 ++++++++++++++++++++----------------------
1 files changed, 20 insertions(+), 22 deletions(-)
diff --git a/arch/m68k/mm/init.c b/arch/m68k/mm/init.c
index f0e05bc..a95f6c4 100644
--- a/arch/m68k/mm/init.c
+++ b/arch/m68k/mm/init.c
@@ -105,21 +105,34 @@ void __init paging_init(void)
#endif /* CONFIG_MMU */
-void free_initmem(void)
+static void free_mem(const char *name, unsigned long start, unsigned long end)
{
-#ifndef CONFIG_MMU_SUN3
unsigned long addr;
+ int pages = 0;
- addr = (unsigned long) __init_begin;
- for (; addr < ((unsigned long) __init_end); addr += PAGE_SIZE) {
+ for (addr = start; addr < end; addr += PAGE_SIZE) {
ClearPageReserved(virt_to_page(addr));
init_page_count(virt_to_page(addr));
free_page(addr);
totalram_pages++;
+ pages++;
}
- pr_notice("Freeing unused kernel memory: %luk freed (0x%x - 0x%x)\n",
- (addr - (unsigned long) __init_begin) >> 10,
- (unsigned int) __init_begin, (unsigned int) __init_end);
+ pr_notice("Freeing %s memory: %dk freed (0x%lx-0x%lx)\n", name,
+ pages << (PAGE_SHIFT - 10), start, end);
+}
+
+#ifdef CONFIG_BLK_DEV_INITRD
+void free_initrd_mem(unsigned long start, unsigned long end)
+{
+ free_mem("initrd", start, end);
+}
+#endif
+
+void free_initmem(void)
+{
+#ifndef CONFIG_MMU_SUN3
+ free_mem("unused kernel", (unsigned long) __init_begin,
+ (unsigned long) __init_end);
#endif /* CONFIG_MMU_SUN3 */
}
@@ -208,18 +221,3 @@ void __init mem_init(void)
print_memmap();
}
-#ifdef CONFIG_BLK_DEV_INITRD
-void free_initrd_mem(unsigned long start, unsigned long end)
-{
- int pages = 0;
- for (; start < end; start += PAGE_SIZE) {
- ClearPageReserved(virt_to_page(start));
- init_page_count(virt_to_page(start));
- free_page(start);
- totalram_pages++;
- pages++;
- }
- pr_notice("Freeing initrd memory: %dk freed\n",
- pages << (PAGE_SHIFT - 10));
-}
-#endif
--
1.7.0.4
1.7.0.4