initsize >> 10);
 }
 
-static inline void free_area(unsigned long addr, unsigned long end, char *s)
-{
-       unsigned int size = (end - addr) >> 10;
-
-       for (; addr < end; addr += PAGE_SIZE) {
-               struct page *page = virt_to_page(addr);
-               ClearPageReserved(page);
-               init_page_count(page);
-               free_page(addr);
-               totalram_pages++;
-       }
-
-       if (size && s)
-               printk(KERN_INFO "Freeing %s memory: %dK (%lx - %lx)\n",
-                      s, size, end - (size << 10), end);
-}
-
 void free_initmem(void)
 {
-       free_area((unsigned long)__init_begin, (unsigned long)__init_end,
-                 "init");
+       free_initmem_default(0);
 }
 
 #ifdef CONFIG_BLK_DEV_INITRD
-
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_area(start, end, "initrd");
+       free_reserved_area(start, end, 0, "initrd");
 }
-
 #endif