summaryrefslogtreecommitdiff
path: root/mm/memblock.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2012-11-14 08:49:49 +0100
committerIngo Molnar <mingo@kernel.org>2012-11-14 08:49:49 +0100
commita7a0aaa17ace589897021d668e09d474e7fc4c4d (patch)
tree41de5bb6fb7135d950ef8b344e1e02d1208449c8 /mm/memblock.c
parent38ca9c927c7d3db61f57e3d3a9334958c3af6e9a (diff)
parent77b67063bb6bce6d475e910d3b886a606d0d91f7 (diff)
downloadolio-linux-3.10-a7a0aaa17ace589897021d668e09d474e7fc4c4d.tar.xz
olio-linux-3.10-a7a0aaa17ace589897021d668e09d474e7fc4c4d.zip
Merge tag 'v3.7-rc5' into sched/core
Merge Linux 3.7-rc5, to pick up fixes. Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'mm/memblock.c')
-rw-r--r--mm/memblock.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/mm/memblock.c b/mm/memblock.c
index 931eef145af..625905523c2 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -930,6 +930,30 @@ int __init_memblock memblock_is_region_reserved(phys_addr_t base, phys_addr_t si
return memblock_overlaps_region(&memblock.reserved, base, size) >= 0;
}
+void __init_memblock memblock_trim_memory(phys_addr_t align)
+{
+ int i;
+ phys_addr_t start, end, orig_start, orig_end;
+ struct memblock_type *mem = &memblock.memory;
+
+ for (i = 0; i < mem->cnt; i++) {
+ orig_start = mem->regions[i].base;
+ orig_end = mem->regions[i].base + mem->regions[i].size;
+ start = round_up(orig_start, align);
+ end = round_down(orig_end, align);
+
+ if (start == orig_start && end == orig_end)
+ continue;
+
+ if (start < end) {
+ mem->regions[i].base = start;
+ mem->regions[i].size = end - start;
+ } else {
+ memblock_remove_region(mem, i);
+ i--;
+ }
+ }
+}
void __init_memblock memblock_set_current_limit(phys_addr_t limit)
{