free_memmap(unsigned long start_pfn, unsigned long end_pfn)
 {
        struct page *start_pg, *end_pg;
-       unsigned long pg, pgend;
+       phys_addr_t pg, pgend;
 
        /*
         * Convert start_pfn/end_pfn to a struct page pointer.
         * Convert to physical addresses, and
         * round start upwards and end downwards.
         */
-       pg = (unsigned long)PAGE_ALIGN(__pa(start_pg));
-       pgend = (unsigned long)__pa(end_pg) & PAGE_MASK;
+       pg = PAGE_ALIGN(__pa(start_pg));
+       pgend = __pa(end_pg) & PAGE_MASK;
 
        /*
         * If there are free pages between these,