diff options
| author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2012-11-16 11:41:51 +0200 | 
|---|---|---|
| committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2012-11-16 11:41:51 +0200 | 
| commit | 3c3dd225819112e56554162c6b37e61a31924e0c (patch) | |
| tree | 5bcd3a63010af2cd5bb946b5af21ef27f1dcfe3c /mm/memblock.c | |
| parent | a915d4ca24b814daee9cddbc42cd41f59fe4fa8f (diff) | |
| parent | 3d70f8c617a436c7146ecb81df2265b4626dfe89 (diff) | |
Merge tag 'v3.7-rc4'
Merge Linux 3.7-rc4 to get fixes for CMA.
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)  {  | 
