Lines Matching refs:regions
39 * Memblock is a method of managing memory regions during the early
44 * regions. There are several types of these collections:
50 * * ``reserved`` - describes the regions that were allocated
58 * which contains an array of memory regions along with
66 * arrays during addition of new regions. This feature should be used
116 .memory.regions = memblock_memory_init_regions,
121 .reserved.regions = memblock_reserved_init_regions,
132 .regions = memblock_physmem_init_regions,
148 for (i = 0, rgn = &memblock_type->regions[0]; \
150 i++, rgn = &memblock_type->regions[i])
198 if (memblock_addrs_overlap(base, size, type->regions[i].base,
199 type->regions[i].size))
351 type->total_size -= type->regions[r].size;
352 memmove(&type->regions[r], &type->regions[r + 1],
353 (type->cnt - (r + 1)) * sizeof(type->regions[r]));
360 type->regions[0].base = 0;
361 type->regions[0].size = 0;
362 type->regions[0].flags = 0;
363 memblock_set_region_node(&type->regions[0], MAX_NUMNODES);
375 if (memblock.reserved.regions != memblock_reserved_init_regions) {
376 addr = __pa(memblock.reserved.regions);
380 kfree(memblock.reserved.regions);
385 if (memblock.memory.regions != memblock_memory_init_regions) {
386 addr = __pa(memblock.memory.regions);
390 kfree(memblock.memory.regions);
400 * memblock_double_array - double the size of the memblock regions array
401 * @type: memblock type of the regions array being doubled
405 * Double the size of the @type regions array. If memblock is being used to
406 * allocate memory for a new reserved regions array and there is a previously
424 /* We don't allow resizing until we know about the reserved regions
451 /* only exclude range when trying to double reserved.regions */
480 memcpy(new_array, type->regions, old_size);
482 old_array = type->regions;
483 type->regions = new_array;
507 * memblock_merge_regions - merge neighboring compatible regions
511 * Scan @type and merge neighboring compatible regions in [@start_rgn - 1, @end_rgn)
522 struct memblock_region *this = &type->regions[i];
523 struct memblock_region *next = &type->regions[i + 1];
560 struct memblock_region *rgn = &type->regions[idx];
582 * existing regions. @type is guaranteed to be minimal (all neighbouring
583 * compatible regions are merged) after the addition.
602 if (type->regions[0].size == 0) {
604 type->regions[0].base = base;
605 type->regions[0].size = size;
606 type->regions[0].flags = flags;
607 memblock_set_region_node(&type->regions[0], nid);
613 * The worst case is when new range overlaps all existing regions,
614 * then we'll need type->cnt + 1 empty regions in @type. So if
616 * that there is enough empty regions in @type, and we can insert
617 * regions directly.
625 * then with %true. The first counts the number of regions needed
746 * Walk @type and ensure that regions don't cross the boundaries defined by
747 * [@base, @base + @size). Crossing regions are split at the boundaries,
748 * which may create at most two more regions. The index of the first
767 /* we'll create at most two more regions */
916 struct memblock_region *r = &type->regions[i];
974 * The memory regions marked with %MEMBLOCK_NOMAP will not be added to the
975 * direct mapping of the physical memory. These regions will still be
1007 /* we never skip regions when iterating memblock.reserved or physmem */
1011 /* only memory regions are associated with nodes, check it */
1015 /* skip hotpluggable memory regions if needed */
1020 /* if we want mirror memory skip non-mirror memory regions */
1049 * areas before each region in type_b. For example, if type_b regions
1054 * The upper 32bit indexes the following regions.
1074 struct memblock_region *m = &type_a->regions[idx_a];
1101 r = &type_b->regions[idx_b];
1112 /* if the two regions intersect, we're done */
1178 struct memblock_region *m = &type_a->regions[idx_a];
1205 r = &type_b->regions[idx_b];
1216 /* if the two regions intersect, we're done */
1249 r = &type->regions[*idx];
1271 * memblock_set_node - set node ID on memblock regions
1277 * Set the nid of memblock @type regions in [@base, @base + @size) to @nid.
1295 memblock_set_region_node(&type->regions[i], nid);
1382 * from the regions with mirroring enabled and then retried from any
1693 return memblock.memory.regions[0].base;
1700 return (memblock.memory.regions[idx].base + memblock.memory.regions[idx].size);
1710 * the memory memblock regions, if the @limit exceeds the total size
1711 * of those regions, max_addr will keep original value PHYS_ADDR_MAX
1737 /* truncate both memory and reserved regions */
1762 /* remove all the MAP regions */
1764 if (!memblock_is_nomap(&memblock.memory.regions[i]))
1768 if (!memblock_is_nomap(&memblock.memory.regions[i]))
1771 /* truncate the reserved regions */
1800 if (addr < type->regions[mid].base)
1802 else if (addr >= (type->regions[mid].base +
1803 type->regions[mid].size))
1827 return !memblock_is_nomap(&memblock.memory.regions[i]);
1839 *start_pfn = PFN_DOWN(type->regions[mid].base);
1840 *end_pfn = PFN_DOWN(type->regions[mid].base + type->regions[mid].size);
1842 return memblock_get_region_node(&type->regions[mid]);
1862 return (memblock.memory.regions[idx].base +
1863 memblock.memory.regions[idx].size) >= end;
1901 r - memblock.memory.regions);
2104 * pages for the NOMAP regions as PageReserved
2117 /* initialize struct pages for the reserved regions */
2206 reg = &type->regions[i];