ARM: move initialization of the high_memory variable earlier
authorNicolas Pitre <nicolas.pitre@linaro.org>
Mon, 19 Sep 2011 02:40:00 +0000 (22:40 -0400)
committerGrazvydas Ignotas <notasas@gmail.com>
Tue, 26 Feb 2013 17:50:59 +0000 (19:50 +0200)
Some upcoming changes must know the VMALLOC_START value, which is based
on high_memory, before bootmem_init() is called.

The best location to set it is in sanity_check_meminfo() where the needed
computation is already done, and in the non MMU case it is trivial to do
now that the meminfo array is already sorted at that point.

Signed-off-by: Nicolas Pitre <nicolas.pitre@linaro.org>
arch/arm/mm/init.c
arch/arm/mm/mmu.c
arch/arm/mm/nommu.c

index d366051..786addd 100644 (file)
@@ -381,8 +381,6 @@ void __init bootmem_init(void)
         */
        arm_bootmem_free(min, max_low, max_high);
 
-       high_memory = __va(((phys_addr_t)max_low << PAGE_SHIFT) - 1) + 1;
-
        /*
         * This doesn't seem to be used by the Linux memory manager any
         * more, but is used by ll_rw_block.  If we can get rid of it, we
index 886bf90..cabbc23 100644 (file)
@@ -925,6 +925,7 @@ void __init sanity_check_meminfo(void)
        }
 #endif
        meminfo.nr_banks = j;
+       high_memory = __va(lowmem_limit - 1) + 1;
        memblock_set_current_limit(lowmem_limit);
 }
 
index 8841751..4fc6794 100644 (file)
@@ -29,6 +29,8 @@ void __init arm_mm_memblock_reserve(void)
 
 void __init sanity_check_meminfo(void)
 {
+       phys_addr_t end = bank_phys_end(&meminfo.bank[meminfo.nr_banks - 1]);
+       high_memory = __va(end - 1) + 1;
 }
 
 /*