Lines Matching +full:memory +full:- +full:region
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
6 * Logical memory blocks.
28 * enum memblock_flags - definition of memory region attributes
30 * @MEMBLOCK_HOTPLUG: memory region indicated in the firmware-provided memory
31 * map during early boot as hot(un)pluggable system RAM (e.g., memory range
33 * commandline, try keeping this memory region hotunpluggable. Does not apply
35 * @MEMBLOCK_MIRROR: mirrored region
37 * reserved in the memory map; refer to memblock_mark_nomap() description
39 * @MEMBLOCK_DRIVER_MANAGED: memory region that is always detected and added
40 * via a driver, and never indicated in the firmware-provided memory map as
43 * @MEMBLOCK_RSRV_NOINIT: memory region for which struct pages are
48 MEMBLOCK_HOTPLUG = 0x1, /* hotpluggable region */
49 MEMBLOCK_MIRROR = 0x2, /* mirrored region */
56 * struct memblock_region - represents a memory region
57 * @base: base address of the region
58 * @size: size of the region
59 * @flags: memory region attributes
72 * struct memblock_type - collection of memory regions of certain type
77 * @name: the memory type symbolic name
88 * struct memblock - memblock allocator metadata
91 * @memory: usable memory regions
92 * @reserved: reserved memory regions
97 struct memblock_type memory; member
165 * for_each_physmem_range - iterate through physmem areas not included in type.
178 * __for_each_mem_range - iterate through memblock areas from type_a and not
184 * @flags: pick from blocks based on memory attributes
198 * __for_each_mem_range_rev - reverse iterate through memblock areas from
204 * @flags: pick from blocks based on memory attributes
219 * for_each_mem_range - iterate through memory areas.
225 __for_each_mem_range(i, &memblock.memory, NULL, NUMA_NO_NODE, \
230 * for_each_mem_range_rev - reverse iterate through memblock areas from
237 __for_each_mem_range_rev(i, &memblock.memory, NULL, NUMA_NO_NODE, \
242 * for_each_reserved_mem_range - iterate over all reserved memblock areas
256 return m->flags & MEMBLOCK_HOTPLUG; in memblock_is_hotpluggable()
261 return m->flags & MEMBLOCK_MIRROR; in memblock_is_mirror()
266 return m->flags & MEMBLOCK_NOMAP; in memblock_is_nomap()
271 return m->flags & MEMBLOCK_RSRV_NOINIT; in memblock_is_reserved_noinit()
276 return m->flags & MEMBLOCK_DRIVER_MANAGED; in memblock_is_driver_managed()
285 * for_each_mem_pfn_range - early memory pfn range iterator
292 * Walks over configured memory ranges.
295 for (i = -1, __next_mem_pfn_range(&i, nid, p_start, p_end, p_nid); \
304 * for_each_free_mem_pfn_range_in_zone_from - iterate through zone specific
307 * @zone: zone in which all of the memory blocks reside
311 * Walks over free (memory && !reserved) areas of memblock in a specific
322 * for_each_free_mem_range - iterate through free memblock areas
325 * @flags: pick from blocks based on memory attributes
330 * Walks over free (memory && !reserved) areas of memblock. Available as
334 __for_each_mem_range(i, &memblock.memory, &memblock.reserved, \
338 * for_each_free_mem_range_reverse - rev-iterate through free memblock areas
341 * @flags: pick from blocks based on memory attributes
346 * Walks over free (memory && !reserved) areas of memblock in reverse
351 __for_each_mem_range_rev(i, &memblock.memory, &memblock.reserved, \
360 r->nid = nid; in memblock_set_region_node()
365 return r->nid; in memblock_get_region_node()
461 * Set the allocation direction to bottom-up or top-down.
469 * Check if the allocation direction is bottom-up or not.
470 * if this is true, that said, memblock will allocate memory
471 * in bottom-up direction.
495 * memblock_set_current_limit - Set the current allocation limit to allow
508 * While the memory MEMBLOCKs should always be page aligned, the reserved
514 * memblock_region_memory_base_pfn - get the lowest pfn of the memory region
517 * Return: the lowest pfn intersecting with the memory region
521 return PFN_UP(reg->base); in memblock_region_memory_base_pfn()
525 * memblock_region_memory_end_pfn - get the end pfn of the memory region
528 * Return: the end_pfn of the reserved region
532 return PFN_DOWN(reg->base + reg->size); in memblock_region_memory_end_pfn()
536 * memblock_region_reserved_base_pfn - get the lowest pfn of the reserved region
539 * Return: the lowest pfn intersecting with the reserved region
543 return PFN_DOWN(reg->base); in memblock_region_reserved_base_pfn()
547 * memblock_region_reserved_end_pfn - get the end pfn of the reserved region
550 * Return: the end_pfn of the reserved region
554 return PFN_UP(reg->base + reg->size); in memblock_region_reserved_end_pfn()
558 * for_each_mem_region - iterate over memory regions
559 * @region: loop variable
561 #define for_each_mem_region(region) \ argument
562 for (region = memblock.memory.regions; \
563 region < (memblock.memory.regions + memblock.memory.cnt); \
564 region++)
567 * for_each_reserved_mem_region - itereate over reserved memory regions
568 * @region: loop variable
570 #define for_each_reserved_mem_region(region) \ argument
571 for (region = memblock.reserved.regions; \
572 region < (memblock.reserved.regions + memblock.reserved.cnt); \
573 region++)