ARM: 6914/1: sparsemem: fix highmem detection when using SPARSEMEM
[pandora-kernel.git] / arch / arm / mm / mmu.c
index 08a9236..9d9e736 100644 (file)
@@ -763,15 +763,12 @@ static void __init sanity_check_meminfo(void)
 {
        int i, j, highmem = 0;
 
-       lowmem_limit = __pa(vmalloc_min - 1) + 1;
-       memblock_set_current_limit(lowmem_limit);
-
        for (i = 0, j = 0; i < meminfo.nr_banks; i++) {
                struct membank *bank = &meminfo.bank[j];
                *bank = meminfo.bank[i];
 
 #ifdef CONFIG_HIGHMEM
-               if (__va(bank->start) > vmalloc_min ||
+               if (__va(bank->start) >= vmalloc_min ||
                    __va(bank->start) < (void *)PAGE_OFFSET)
                        highmem = 1;
 
@@ -829,6 +826,9 @@ static void __init sanity_check_meminfo(void)
                        bank->size = newsize;
                }
 #endif
+               if (!bank->highmem && bank->start + bank->size > lowmem_limit)
+                       lowmem_limit = bank->start + bank->size;
+
                j++;
        }
 #ifdef CONFIG_HIGHMEM
@@ -852,6 +852,7 @@ static void __init sanity_check_meminfo(void)
        }
 #endif
        meminfo.nr_banks = j;
+       memblock_set_current_limit(lowmem_limit);
 }
 
 static inline void prepare_page_table(void)