xtensa: nommu: reserve memory below PLATFORM_DEFAULT_MEM_START
authorMax Filippov <jcmvbkbc@gmail.com>
Fri, 3 Oct 2014 23:46:34 +0000 (03:46 +0400)
committerMax Filippov <jcmvbkbc@gmail.com>
Tue, 21 Oct 2014 09:28:57 +0000 (13:28 +0400)
Memory accounting code can't handle pages below
PLATFORM_DEFAULT_MEM_START. Reserve those pages if they exist.
When PLATFORM_DEFAULT_MEM_START is zero reserve one page at address 0 to
make sure that successfull memory allocations don't return NULL.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
arch/xtensa/mm/init.c

index 77ed20209ca57232dd79afa60fe91210515746bf..5a084fa5b6088b7985b851f52463433cffacabe7 100644 (file)
@@ -239,6 +239,17 @@ void __init bootmem_init(void)
        unsigned long bootmap_start, bootmap_size;
        int i;
 
+       /* Reserve all memory below PLATFORM_DEFAULT_MEM_START, as memory
+        * accounting doesn't work for pages below that address.
+        *
+        * If PLATFORM_DEFAULT_MEM_START is zero reserve page at address 0:
+        * successfull allocations should never return NULL.
+        */
+       if (PLATFORM_DEFAULT_MEM_START)
+               mem_reserve(0, PLATFORM_DEFAULT_MEM_START, 0);
+       else
+               mem_reserve(0, 1, 0);
+
        sysmem_dump();
        max_low_pfn = max_pfn = 0;
        min_low_pfn = ~0;