if (pci_mem < memtop)
                memtop = pci_mem;
        if (memtop > alpha_mv.min_mem_address) {
-               free_reserved_area((unsigned long)__va(alpha_mv.min_mem_address),
-                                  (unsigned long)__va(memtop), 0, NULL);
+               free_reserved_area(__va(alpha_mv.min_mem_address),
+                                  __va(memtop), 0, NULL);
                printk("nautilus_init_pci: %ldk freed\n",
                        (memtop - alpha_mv.min_mem_address) >> 10);
        }
 
 void
 free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, 0, "initrd");
+       free_reserved_area((void *)start, (void *)end, 0, "initrd");
 }
 #endif
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void __init free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, 0, "initrd");
+       free_reserved_area((void *)start, (void *)end, 0, "initrd");
 }
 #endif
 
 
 {
        if (!keep_initrd) {
                poison_init_mem((void *)start, PAGE_ALIGN(end) - start);
-               free_reserved_area(start, end, 0, "initrd");
+               free_reserved_area((void *)start, (void *)end, 0, "initrd");
        }
 }
 
 
 {
        if (!keep_initrd) {
                poison_init_mem((void *)start, PAGE_ALIGN(end) - start);
-               free_reserved_area(start, end, 0, "initrd");
+               free_reserved_area((void *)start, (void *)end, 0, "initrd");
        }
 }
 
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, 0, "initrd");
+       free_reserved_area((void *)start, (void *)end, 0, "initrd");
 }
 #endif
 
 void __init free_initrd_mem(unsigned long start, unsigned long end)
 {
 #ifndef CONFIG_MPU
-       free_reserved_area(start, end, 0, "initrd");
+       free_reserved_area((void *)start, (void *)end, 0, "initrd");
 #endif
 }
 #endif
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void __init free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, 0, "initrd");
+       free_reserved_area((void *)start, (void *)end, 0, "initrd");
 }
 #endif
 
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void __init free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, 0, "initrd");
+       free_reserved_area((void *)start, (void *)end, 0, "initrd");
 } /* end free_initrd_mem() */
 #endif
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, 0, "initrd");
+       free_reserved_area((void *)start, (void *)end, 0, "initrd");
 }
 #endif
 
 
 void
 free_initmem (void)
 {
-       free_reserved_area((unsigned long)ia64_imva(__init_begin),
-                          (unsigned long)ia64_imva(__init_end),
+       free_reserved_area(ia64_imva(__init_begin), ia64_imva(__init_end),
                           0, "unused kernel");
 }
 
 
  *======================================================================*/
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, 0, "initrd");
+       free_reserved_area((void *)start, (void *)end, 0, "initrd");
 }
 #endif
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, 0, "initrd");
+       free_reserved_area((void *)start, (void *)end, 0, "initrd");
 }
 #endif
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, POISON_FREE_INITMEM, "initrd");
+       free_reserved_area((void *)start, (void *)end, POISON_FREE_INITMEM,
+                          "initrd");
 }
 #endif
 
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, 0, "initrd");
+       free_reserved_area((void *)start, (void *)end, 0, "initrd");
 }
 #endif
 
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, POISON_FREE_INITMEM, "initrd");
+       free_reserved_area((void *)start, (void *)end, POISON_FREE_INITMEM,
+                          "initrd");
 }
 #endif
 
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, POISON_FREE_INITMEM, "initrd");
+       free_reserved_area((void *)start, (void *)end, POISON_FREE_INITMEM,
+                          "initrd");
 }
 #endif
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, 0, "initrd");
+       free_reserved_area((void *)start, (void *)end, 0, "initrd");
 }
 #endif
 
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       num_physpages += free_reserved_area(start, end, 0, "initrd");
+       num_physpages += free_reserved_area((void *)start, (void *)end, 0,
+                                           "initrd");
 }
 #endif
 
        end = (ulong)&kvm_tmp[ARRAY_SIZE(kvm_tmp)] & PAGE_MASK;
 
        /* Free the tmp space we don't need */
-       free_reserved_area(start, end, 0, NULL);
+       free_reserved_area((void *)start, (void *)end, 0, NULL);
 }
 
 static int __init kvm_guest_init(void)
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void __init free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, 0, "initrd");
+       free_reserved_area((void *)start, (void *)end, 0, "initrd");
 }
 #endif
 
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void __init free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, POISON_FREE_INITMEM, "initrd");
+       free_reserved_area((void *)start, (void *)end, POISON_FREE_INITMEM,
+                          "initrd");
 }
 #endif
 
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, POISON_FREE_INITMEM, "initrd");
+       free_reserved_area((void *)start, (void *)end, POISON_FREE_INITMEM,
+                          "initrd");
 }
 #endif
 
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, 0, "initrd");
+       free_reserved_area((void *)start, (void *)end, 0, "initrd");
 }
 #endif
 
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       num_physpages += free_reserved_area(start, end, POISON_FREE_INITMEM,
-                                           "initrd");
+       num_physpages += free_reserved_area((void *)start, (void *)end,
+                                           POISON_FREE_INITMEM, "initrd");
 }
 #endif
 
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       num_physpages += free_reserved_area(start, end, POISON_FREE_INITMEM,
-                                           "initrd");
+       num_physpages += free_reserved_area((void *)start, (void *)end,
+                                           POISON_FREE_INITMEM, "initrd");
 }
 #endif
 
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       free_reserved_area(start, end, 0, "initrd");
+       free_reserved_area((void *)start, (void *)end, 0, "initrd");
 }
 #endif
 
 
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
        if (!keep_initrd)
-               free_reserved_area(start, end, 0, "initrd");
+               free_reserved_area((void *)start, (void *)end, 0, "initrd");
 }
 
 static int __init keepinitrd_setup(char *__unused)
 
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
        if (initrd_is_mapped)
-               free_reserved_area(start, end, 0, "initrd");
+               free_reserved_area((void *)start, (void *)end, 0, "initrd");
 }
 #endif
 
 
  * "poison" if it's non-zero.
  * Return pages freed into the buddy system.
  */
-extern unsigned long free_reserved_area(unsigned long start, unsigned long end,
+extern unsigned long free_reserved_area(void *start, void *end,
                                        int poison, char *s);
 #ifdef CONFIG_HIGHMEM
 /*
 {
        extern char __init_begin[], __init_end[];
 
-       return free_reserved_area(PAGE_ALIGN((unsigned long)&__init_begin) ,
-                                 ((unsigned long)&__init_end) & PAGE_MASK,
+       return free_reserved_area(&__init_begin, &__init_end,
                                  poison, "unused kernel");
 }
 
 
 
 #endif /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */
 
-unsigned long free_reserved_area(unsigned long start, unsigned long end,
-                                int poison, char *s)
+unsigned long free_reserved_area(void *start, void *end, int poison, char *s)
 {
-       unsigned long pages, pos;
+       void *pos;
+       unsigned long pages = 0;
 
-       pos = start = PAGE_ALIGN(start);
-       end &= PAGE_MASK;
-       for (pages = 0; pos < end; pos += PAGE_SIZE, pages++) {
+       start = (void *)PAGE_ALIGN((unsigned long)start);
+       end = (void *)((unsigned long)end & PAGE_MASK);
+       for (pos = start; pos < end; pos += PAGE_SIZE, pages++) {
                if (poison)
-                       memset((void *)pos, poison, PAGE_SIZE);
-               free_reserved_page(virt_to_page((void *)pos));
+                       memset(pos, poison, PAGE_SIZE);
+               free_reserved_page(virt_to_page(pos));
        }
 
        if (pages && s)
-               pr_info("Freeing %s memory: %ldK (%lx - %lx)\n",
+               pr_info("Freeing %s memory: %ldK (%p - %p)\n",
                        s, pages << (PAGE_SHIFT - 10), start, end);
 
        return pages;
 }
+EXPORT_SYMBOL(free_reserved_area);
 
 #ifdef CONFIG_HIGHMEM
 void free_highmem_page(struct page *page)