return 0;
 }
 
-static int __ref __offline_pages(unsigned long start_pfn,
-                 unsigned long end_pfn)
+int __ref offline_pages(unsigned long start_pfn, unsigned long nr_pages)
 {
-       unsigned long pfn, nr_pages = 0;
-       unsigned long offlined_pages = 0;
+       const unsigned long end_pfn = start_pfn + nr_pages;
+       unsigned long pfn, system_ram_pages = 0, offlined_pages = 0;
        int ret, node, nr_isolate_pageblock;
        unsigned long flags;
        struct zone *zone;
         * memory holes PG_reserved, don't need pfn_valid() checks, and can
         * avoid using walk_system_ram_range() later.
         */
-       walk_system_ram_range(start_pfn, end_pfn - start_pfn, &nr_pages,
+       walk_system_ram_range(start_pfn, nr_pages, &system_ram_pages,
                              count_system_ram_pages_cb);
-       if (nr_pages != end_pfn - start_pfn) {
+       if (system_ram_pages != nr_pages) {
                ret = -EINVAL;
                reason = "memory holes";
                goto failed_removal;
        return ret;
 }
 
-int offline_pages(unsigned long start_pfn, unsigned long nr_pages)
-{
-       return __offline_pages(start_pfn, start_pfn + nr_pages);
-}
-
 static int check_memblock_offlined_cb(struct memory_block *mem, void *arg)
 {
        int ret = !is_memblock_offlined(mem);