]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/arm/mm/mmu.c
ARM: mm: clean up membank size limit checks
[karo-tx-linux.git] / arch / arm / mm / mmu.c
index ae249d1ab1d3456b760b34df12f67dc97be8bc3e..280f91d02de252179cbfea0a8741a39f26505fb9 100644 (file)
@@ -992,10 +992,15 @@ 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;
 
                if (bank->start >= vmalloc_limit)
                        highmem = 1;
+               else
+                       size_limit = vmalloc_limit - bank->start;
 
                bank->highmem = highmem;
 
@@ -1004,8 +1009,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");
@@ -1014,12 +1018,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
                /*
@@ -1037,14 +1041,13 @@ void __init sanity_check_meminfo(void)
                 * Check whether this memory bank would partially overlap
                 * the vmalloc area.
                 */
-               if (bank->start + bank->size > vmalloc_limit)
-                       unsigned long newsize = vmalloc_limit - 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)