Lines Matching full:regions
40 * Memblock is a method of managing memory regions during the early
45 * regions. There are several types of these collections:
51 * * ``reserved`` - describes the regions that were allocated
59 * which contains an array of memory regions along with
67 * arrays during addition of new regions. This feature should be used
117 .memory.regions = memblock_memory_init_regions,
121 .reserved.regions = memblock_reserved_init_regions,
131 .regions = memblock_physmem_init_regions,
146 for (i = 0, rgn = &memblock_type->regions[0]; \
148 i++, rgn = &memblock_type->regions[i])
196 if (memblock_addrs_overlap(base, size, type->regions[i].base, in memblock_overlaps_region()
197 type->regions[i].size)) in memblock_overlaps_region()
349 type->total_size -= type->regions[r].size; in memblock_remove_region()
350 memmove(&type->regions[r], &type->regions[r + 1], in memblock_remove_region()
351 (type->cnt - (r + 1)) * sizeof(type->regions[r])); in memblock_remove_region()
357 type->regions[0].base = 0; in memblock_remove_region()
358 type->regions[0].size = 0; in memblock_remove_region()
359 type->regions[0].flags = 0; in memblock_remove_region()
360 memblock_set_region_node(&type->regions[0], MAX_NUMNODES); in memblock_remove_region()
372 if (memblock.reserved.regions != memblock_reserved_init_regions) { in memblock_discard()
373 addr = __pa(memblock.reserved.regions); in memblock_discard()
377 kfree(memblock.reserved.regions); in memblock_discard()
382 if (memblock.memory.regions != memblock_memory_init_regions) { in memblock_discard()
383 addr = __pa(memblock.memory.regions); in memblock_discard()
387 kfree(memblock.memory.regions); in memblock_discard()
397 * memblock_double_array - double the size of the memblock regions array
398 * @type: memblock type of the regions array being doubled
402 * Double the size of the @type regions array. If memblock is being used to
403 * allocate memory for a new reserved regions array and there is a previously
421 /* We don't allow resizing until we know about the reserved regions in memblock_double_array()
448 /* only exclude range when trying to double reserved.regions */ in memblock_double_array()
484 memcpy(new_array, type->regions, old_size); in memblock_double_array()
486 old_array = type->regions; in memblock_double_array()
487 type->regions = new_array; in memblock_double_array()
511 * memblock_merge_regions - merge neighboring compatible regions
515 * Scan @type and merge neighboring compatible regions in [@start_rgn - 1, @end_rgn)
526 struct memblock_region *this = &type->regions[i]; in memblock_merge_regions()
527 struct memblock_region *next = &type->regions[i + 1]; in memblock_merge_regions()
564 struct memblock_region *rgn = &type->regions[idx]; in memblock_insert_region()
586 * existing regions. @type is guaranteed to be minimal (all neighbouring
587 * compatible regions are merged) after the addition.
606 if (type->regions[0].size == 0) { in memblock_add_range()
608 type->regions[0].base = base; in memblock_add_range()
609 type->regions[0].size = size; in memblock_add_range()
610 type->regions[0].flags = flags; in memblock_add_range()
611 memblock_set_region_node(&type->regions[0], nid); in memblock_add_range()
618 * The worst case is when new range overlaps all existing regions, in memblock_add_range()
619 * then we'll need type->cnt + 1 empty regions in @type. So if in memblock_add_range()
621 * that there is enough empty regions in @type, and we can insert in memblock_add_range()
622 * regions directly. in memblock_add_range()
630 * then with %true. The first counts the number of regions needed in memblock_add_range()
785 * Walk @type and ensure that regions don't cross the boundaries defined by
786 * [@base, @base + @size). Crossing regions are split at the boundaries,
787 * which may create at most two more regions. The index of the first
807 /* we'll create at most two more regions */ in memblock_isolate_range()
956 struct memblock_region *r = &type->regions[i]; in memblock_setclr_flag()
1014 * The memory regions marked with %MEMBLOCK_NOMAP will not be added to the
1015 * direct mapping of the physical memory. These regions will still be
1048 * struct pages will not be initialized for reserved memory regions marked with
1065 /* we never skip regions when iterating memblock.reserved or physmem */ in should_skip_region()
1069 /* only memory regions are associated with nodes, check it */ in should_skip_region()
1073 /* skip hotpluggable memory regions if needed */ in should_skip_region()
1078 /* if we want mirror memory skip non-mirror memory regions */ in should_skip_region()
1107 * areas before each region in type_b. For example, if type_b regions
1112 * The upper 32bit indexes the following regions.
1128 struct memblock_region *m = &type_a->regions[idx_a]; in __next_mem_range()
1155 r = &type_b->regions[idx_b]; in __next_mem_range()
1166 /* if the two regions intersect, we're done */ in __next_mem_range()
1229 struct memblock_region *m = &type_a->regions[idx_a]; in __next_mem_range_rev()
1256 r = &type_b->regions[idx_b]; in __next_mem_range_rev()
1267 /* if the two regions intersect, we're done */ in __next_mem_range_rev()
1300 r = &type->regions[*idx]; in __next_mem_pfn_range()
1322 * memblock_set_node - set node ID on memblock regions
1328 * Set the nid of memblock @type regions in [@base, @base + @size) to @nid.
1329 * Regions which cross the area boundaries are split as necessary.
1346 memblock_set_region_node(&type->regions[i], nid); in memblock_set_node()
1433 * from the regions with mirroring enabled and then retried from any
1782 return memblock.memory.regions[0].base; in memblock_start_of_DRAM()
1789 return (memblock.memory.regions[idx].base + memblock.memory.regions[idx].size); in memblock_end_of_DRAM()
1799 * the memory memblock regions, if the @limit exceeds the total size in __find_max_addr()
1800 * of those regions, max_addr will keep original value PHYS_ADDR_MAX in __find_max_addr()
1826 /* truncate both memory and reserved regions */ in memblock_enforce_memory_limit()
1851 /* remove all the MAP regions */ in memblock_cap_memory_range()
1853 if (!memblock_is_nomap(&memblock.memory.regions[i])) in memblock_cap_memory_range()
1857 if (!memblock_is_nomap(&memblock.memory.regions[i])) in memblock_cap_memory_range()
1860 /* truncate the reserved regions */ in memblock_cap_memory_range()
1889 if (addr < type->regions[mid].base) in memblock_search()
1891 else if (addr >= (type->regions[mid].base + in memblock_search()
1892 type->regions[mid].size)) in memblock_search()
1916 return !memblock_is_nomap(&memblock.memory.regions[i]); in memblock_is_map_memory()
1928 *start_pfn = PFN_DOWN(type->regions[mid].base); in memblock_search_pfn_nid()
1929 *end_pfn = PFN_DOWN(type->regions[mid].base + type->regions[mid].size); in memblock_search_pfn_nid()
1931 return memblock_get_region_node(&type->regions[mid]); in memblock_search_pfn_nid()
1951 return (memblock.memory.regions[idx].base + in memblock_is_region_memory()
1952 memblock.memory.regions[idx].size) >= end; in memblock_is_region_memory()
1990 r - memblock.memory.regions); in memblock_trim_memory()
2197 * pages for the NOMAP regions as PageReserved in memmap_init_reserved_pages()
2220 * initialize struct pages for reserved regions that don't have in memmap_init_reserved_pages()
2472 reg = &type->regions[i]; in memblock_debug_show()