diff --git a/mm/sparse.c b/mm/sparse.c
index fac95f2..31e5282 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -713,8 +713,12 @@ static void free_section_usemap(struct page *memmap, unsigned long *usemap)
 		struct page *memmap_page;
 		memmap_page = virt_to_page(memmap);
 
+#ifdef CONFIG_SPARSEMEM_VMEMMAP
+		nr_pages = PAGES_PER_SECTION;
+#else
 		nr_pages = PAGE_ALIGN(PAGES_PER_SECTION * sizeof(struct page))
 			>> PAGE_SHIFT;
+#endif
 
 		free_map_bootmem(memmap_page, nr_pages);
 	}
