ARM: 5747/1: Fix the start_pg value in free_memmap()
authorCatalin Marinas <catalin.marinas@arm.com>
Tue, 6 Oct 2009 16:57:22 +0000 (17:57 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Wed, 7 Oct 2009 12:13:00 +0000 (13:13 +0100)
If sparsemem is enabled, the start_pfn passed to the free_memmap()
function corresponds to an area of memory not known to the kernel and
pfn_to_page returns a wrong value. The (start_pfn - 1), however, is
known to the kernel.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/init.c

index 877c492..40940d7 100644 (file)
@@ -483,7 +483,7 @@ free_memmap(int node, unsigned long start_pfn, unsigned long end_pfn)
        /*
         * Convert start_pfn/end_pfn to a struct page pointer.
         */
-       start_pg = pfn_to_page(start_pfn);
+       start_pg = pfn_to_page(start_pfn - 1) + 1;
        end_pg = pfn_to_page(end_pfn);
 
        /*