diff options
| author | Ingo Molnar <mingo@kernel.org> | 2012-11-14 08:49:49 +0100 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2012-11-14 08:49:49 +0100 |
| commit | a7a0aaa17ace589897021d668e09d474e7fc4c4d (patch) | |
| tree | 41de5bb6fb7135d950ef8b344e1e02d1208449c8 /mm/memblock.c | |
| parent | 38ca9c927c7d3db61f57e3d3a9334958c3af6e9a (diff) | |
| parent | 77b67063bb6bce6d475e910d3b886a606d0d91f7 (diff) | |
| download | olio-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.c | 24 |
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) { |