ARM: mm: clean up membank size limit checks
Cyril Chemparathy [Fri, 20 Jul 2012 17:16:41 +0000 (13:16 -0400)]
This patch cleans up the highmem sanity check code by simplifying the range
checks with a pre-calculated size_limit.  This patch should otherwise have no
functional impact on behavior.

This patch also removes a redundant (bank->start < vmalloc_limit) check, since
this is already covered by the !highmem condition.

Change-Id: I6ee6ca1664aba3288af5c57280cf50d25407063a
Signed-off-by: Cyril Chemparathy <cyril@ti.com>
Signed-off-by: Vitaly Andrianov <vitalya@ti.com>
Signed-off-by: Alex Van Brunt <avanbrunt@nvidia.com>
Reviewed-on: http://git-master/r/195676
Reviewed-by: Adeel Raza <araza@nvidia.com>

arch/arm/mm/mmu.c

index f37003b..ec44381 100644 (file)
@@ -1025,7 +1025,10 @@ void __init sanity_check_meminfo(void)
 
        for (i = 0, j = 0; i < meminfo.nr_banks; i++) {
                struct membank *bank = &meminfo.bank[j];
+               phys_addr_t size_limit;
+
                *bank = meminfo.bank[i];
+               size_limit = bank->size;
 
 #ifdef CONFIG_SPARSEMEM
                if (pfn_to_section_nr(bank_pfn_start(bank)) !=
@@ -1051,6 +1054,8 @@ void __init sanity_check_meminfo(void)
 
                if (bank->start >= vmalloc_limit)
                        highmem = 1;
+               else
+                       size_limit = vmalloc_limit - bank->start;
 
                bank->highmem = highmem;
 
@@ -1059,8 +1064,7 @@ void __init sanity_check_meminfo(void)
                 * Split those memory banks which are partially overlapping
                 * the vmalloc area greatly simplifying things later.
                 */
-               if (!highmem && bank->start < vmalloc_limit &&
-                   bank->size > vmalloc_limit - bank->start) {
+               if (!highmem && bank->size > size_limit) {
                        if (meminfo.nr_banks >= NR_BANKS) {
                                printk(KERN_CRIT "NR_BANKS too low, "
                                                 "ignoring high memory\n");
@@ -1069,12 +1073,12 @@ void __init sanity_check_meminfo(void)
                                        (meminfo.nr_banks - i) * sizeof(*bank));
                                meminfo.nr_banks++;
                                i++;
-                               bank[1].size -= vmalloc_limit - bank->start;
+                               bank[1].size -= size_limit;
                                bank[1].start = vmalloc_limit;
                                bank[1].highmem = highmem = 1;
                                j++;
                        }
-                       bank->size = vmalloc_limit - bank->start;
+                       bank->size = size_limit;
                }
 #else
                /*
@@ -1092,15 +1096,13 @@ void __init sanity_check_meminfo(void)
                 * Check whether this memory bank would partially overlap
                 * the vmalloc area.
                 */
-               if (bank->start + bank->size - 1 >= vmalloc_min ||
-                   bank->start + bank->size - 1 <= bank->start) {
-                       unsigned long newsize = vmalloc_min - __va(bank->start);
+               if (bank->size > size_limit) {
                        printk(KERN_NOTICE "Truncating RAM at %.8llx-%.8llx "
                               "to -%.8llx (vmalloc region overlap).\n",
                               (unsigned long long)bank->start,
                               (unsigned long long)bank->start + bank->size - 1,
-                              (unsigned long long)bank->start + newsize - 1);
-                       bank->size = newsize;
+                              (unsigned long long)bank->start + size_limit - 1);
+                       bank->size = size_limit;
                }
 #endif
                if (!bank->highmem && bank->start + bank->size > arm_lowmem_limit)