|
@@ -1271,16 +1271,14 @@ phys_addr_t __init_memblock memblock_end_of_DRAM(void)
|
|
|
|
|
|
void __init memblock_enforce_memory_limit(phys_addr_t limit)
|
|
|
{
|
|
|
- unsigned long i;
|
|
|
phys_addr_t max_addr = (phys_addr_t)ULLONG_MAX;
|
|
|
+ struct memblock_region *r;
|
|
|
|
|
|
if (!limit)
|
|
|
return;
|
|
|
|
|
|
/* find out max address */
|
|
|
- for (i = 0; i < memblock.memory.cnt; i++) {
|
|
|
- struct memblock_region *r = &memblock.memory.regions[i];
|
|
|
-
|
|
|
+ for_each_memblock(memory, r) {
|
|
|
if (limit <= r->size) {
|
|
|
max_addr = r->base + limit;
|
|
|
break;
|
|
@@ -1379,13 +1377,12 @@ int __init_memblock memblock_is_region_reserved(phys_addr_t base, phys_addr_t si
|
|
|
|
|
|
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;
|
|
|
+ struct memblock_region *r;
|
|
|
|
|
|
- for (i = 0; i < mem->cnt; i++) {
|
|
|
- orig_start = mem->regions[i].base;
|
|
|
- orig_end = mem->regions[i].base + mem->regions[i].size;
|
|
|
+ for_each_memblock(memory, r) {
|
|
|
+ orig_start = r->base;
|
|
|
+ orig_end = r->base + r->size;
|
|
|
start = round_up(orig_start, align);
|
|
|
end = round_down(orig_end, align);
|
|
|
|
|
@@ -1393,11 +1390,12 @@ void __init_memblock memblock_trim_memory(phys_addr_t align)
|
|
|
continue;
|
|
|
|
|
|
if (start < end) {
|
|
|
- mem->regions[i].base = start;
|
|
|
- mem->regions[i].size = end - start;
|
|
|
+ r->base = start;
|
|
|
+ r->size = end - start;
|
|
|
} else {
|
|
|
- memblock_remove_region(mem, i);
|
|
|
- i--;
|
|
|
+ memblock_remove_region(&memblock.memory,
|
|
|
+ r - memblock.memory.regions);
|
|
|
+ r--;
|
|
|
}
|
|
|
}
|
|
|
}
|