diff options
author | Cyril Chemparathy <cyril@ti.com> | 2012-07-20 13:16:41 -0400 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2013-05-30 11:02:30 -0400 |
commit | 28d4bf7a2929c5e525171d249e12662e21130ec3 (patch) | |
tree | 0d603e2c33ce17862101aa0c7e3e7a4c6c4075da /arch/arm/mm | |
parent | adf2e9fda34c1cfff2ee4e47078b1e142adb2c30 (diff) |
ARM: mm: clean up membank size limit checks
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.
Signed-off-by: Cyril Chemparathy <cyril@ti.com>
Signed-off-by: Vitaly Andrianov <vitalya@ti.com>
Acked-by: Nicolas Pitre <nico@linaro.org>
Tested-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Tested-by: Subash Patel <subash.rp@samsung.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/arm/mm')
-rw-r--r-- | arch/arm/mm/mmu.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index ae249d1ab1d3..280f91d02de2 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
@@ -992,10 +992,15 @@ void __init sanity_check_meminfo(void) | |||
992 | 992 | ||
993 | for (i = 0, j = 0; i < meminfo.nr_banks; i++) { | 993 | for (i = 0, j = 0; i < meminfo.nr_banks; i++) { |
994 | struct membank *bank = &meminfo.bank[j]; | 994 | struct membank *bank = &meminfo.bank[j]; |
995 | phys_addr_t size_limit; | ||
996 | |||
995 | *bank = meminfo.bank[i]; | 997 | *bank = meminfo.bank[i]; |
998 | size_limit = bank->size; | ||
996 | 999 | ||
997 | if (bank->start >= vmalloc_limit) | 1000 | if (bank->start >= vmalloc_limit) |
998 | highmem = 1; | 1001 | highmem = 1; |
1002 | else | ||
1003 | size_limit = vmalloc_limit - bank->start; | ||
999 | 1004 | ||
1000 | bank->highmem = highmem; | 1005 | bank->highmem = highmem; |
1001 | 1006 | ||
@@ -1004,8 +1009,7 @@ void __init sanity_check_meminfo(void) | |||
1004 | * Split those memory banks which are partially overlapping | 1009 | * Split those memory banks which are partially overlapping |
1005 | * the vmalloc area greatly simplifying things later. | 1010 | * the vmalloc area greatly simplifying things later. |
1006 | */ | 1011 | */ |
1007 | if (!highmem && bank->start < vmalloc_limit && | 1012 | if (!highmem && bank->size > size_limit) { |
1008 | bank->size > vmalloc_limit - bank->start) { | ||
1009 | if (meminfo.nr_banks >= NR_BANKS) { | 1013 | if (meminfo.nr_banks >= NR_BANKS) { |
1010 | printk(KERN_CRIT "NR_BANKS too low, " | 1014 | printk(KERN_CRIT "NR_BANKS too low, " |
1011 | "ignoring high memory\n"); | 1015 | "ignoring high memory\n"); |
@@ -1014,12 +1018,12 @@ void __init sanity_check_meminfo(void) | |||
1014 | (meminfo.nr_banks - i) * sizeof(*bank)); | 1018 | (meminfo.nr_banks - i) * sizeof(*bank)); |
1015 | meminfo.nr_banks++; | 1019 | meminfo.nr_banks++; |
1016 | i++; | 1020 | i++; |
1017 | bank[1].size -= vmalloc_limit - bank->start; | 1021 | bank[1].size -= size_limit; |
1018 | bank[1].start = vmalloc_limit; | 1022 | bank[1].start = vmalloc_limit; |
1019 | bank[1].highmem = highmem = 1; | 1023 | bank[1].highmem = highmem = 1; |
1020 | j++; | 1024 | j++; |
1021 | } | 1025 | } |
1022 | bank->size = vmalloc_limit - bank->start; | 1026 | bank->size = size_limit; |
1023 | } | 1027 | } |
1024 | #else | 1028 | #else |
1025 | /* | 1029 | /* |
@@ -1037,14 +1041,13 @@ void __init sanity_check_meminfo(void) | |||
1037 | * Check whether this memory bank would partially overlap | 1041 | * Check whether this memory bank would partially overlap |
1038 | * the vmalloc area. | 1042 | * the vmalloc area. |
1039 | */ | 1043 | */ |
1040 | if (bank->start + bank->size > vmalloc_limit) | 1044 | if (bank->size > size_limit) { |
1041 | unsigned long newsize = vmalloc_limit - bank->start; | ||
1042 | printk(KERN_NOTICE "Truncating RAM at %.8llx-%.8llx " | 1045 | printk(KERN_NOTICE "Truncating RAM at %.8llx-%.8llx " |
1043 | "to -%.8llx (vmalloc region overlap).\n", | 1046 | "to -%.8llx (vmalloc region overlap).\n", |
1044 | (unsigned long long)bank->start, | 1047 | (unsigned long long)bank->start, |
1045 | (unsigned long long)bank->start + bank->size - 1, | 1048 | (unsigned long long)bank->start + bank->size - 1, |
1046 | (unsigned long long)bank->start + newsize - 1); | 1049 | (unsigned long long)bank->start + size_limit - 1); |
1047 | bank->size = newsize; | 1050 | bank->size = size_limit; |
1048 | } | 1051 | } |
1049 | #endif | 1052 | #endif |
1050 | if (!bank->highmem && bank->start + bank->size > arm_lowmem_limit) | 1053 | if (!bank->highmem && bank->start + bank->size > arm_lowmem_limit) |