Lines Matching full:size
189 /* adjust *@size so that (@base + *@size) doesn't overflow, return new size */
190 static inline phys_addr_t memblock_cap_size(phys_addr_t base, phys_addr_t *size) in memblock_cap_size() argument
192 return *size = min(*size, PHYS_ADDR_MAX - base); in memblock_cap_size()
206 phys_addr_t base, phys_addr_t size) in memblock_overlaps_region() argument
210 memblock_cap_size(base, &size); in memblock_overlaps_region()
213 if (memblock_addrs_overlap(base, size, type->regions[i].base, in memblock_overlaps_region()
214 type->regions[i].size)) in memblock_overlaps_region()
224 * @size: size of free area to find
236 phys_addr_t size, phys_addr_t align, int nid, in __memblock_find_range_bottom_up() argument
247 if (cand < this_end && this_end - cand >= size) in __memblock_find_range_bottom_up()
259 * @size: size of free area to find
271 phys_addr_t size, phys_addr_t align, int nid, in __memblock_find_range_top_down() argument
282 if (this_end < size) in __memblock_find_range_top_down()
285 cand = round_down(this_end - size, align); in __memblock_find_range_top_down()
295 * @size: size of free area to find
303 * Find @size free area aligned to @align in the specified range and node.
308 static phys_addr_t __init_memblock memblock_find_in_range_node(phys_addr_t size, in memblock_find_in_range_node() argument
323 return __memblock_find_range_bottom_up(start, end, size, align, in memblock_find_in_range_node()
326 return __memblock_find_range_top_down(start, end, size, align, in memblock_find_in_range_node()
335 * @size: size of free area to find
338 * Find @size free area aligned to @align in the specified range.
344 phys_addr_t end, phys_addr_t size, in memblock_find_in_range() argument
351 ret = memblock_find_in_range_node(size, align, start, end, in memblock_find_in_range()
356 &size); in memblock_find_in_range()
366 type->total_size -= type->regions[r].size; in memblock_remove_region()
375 type->regions[0].size = 0; in memblock_remove_region()
387 phys_addr_t size; in memblock_discard() local
392 size = PAGE_ALIGN(sizeof(struct memblock_region) * in memblock_discard()
397 memblock_free(addr, size); in memblock_discard()
402 size = PAGE_ALIGN(sizeof(struct memblock_region) * in memblock_discard()
407 memblock_free(addr, size); in memblock_discard()
415 * memblock_double_array - double the size of the memblock regions array
418 * @new_area_size: size of memory range to avoid overlap with
420 * Double the size of the @type regions array. If memblock is being used to
445 /* Calculate new doubled size */ in memblock_double_array()
547 if (this->base + this->size != next->base || in memblock_merge_regions()
551 BUG_ON(this->base + this->size > next->base); in memblock_merge_regions()
556 this->size += next->size; in memblock_merge_regions()
569 * @size: size of the new region
573 * Insert new memblock region [@base, @base + @size) into @type at @idx.
578 phys_addr_t size, in memblock_insert_region() argument
587 rgn->size = size; in memblock_insert_region()
591 type->total_size += size; in memblock_insert_region()
598 * @size: size of the new region
602 * Add new memblock region [@base, @base + @size) into @type. The new region
611 phys_addr_t base, phys_addr_t size, in memblock_add_range() argument
616 phys_addr_t end = base + memblock_cap_size(base, &size); in memblock_add_range()
620 if (!size) in memblock_add_range()
624 if (type->regions[0].size == 0) { in memblock_add_range()
627 type->regions[0].size = size; in memblock_add_range()
630 type->total_size = size; in memblock_add_range()
656 phys_addr_t rend = rbase + rgn->size; in memblock_add_range()
706 if (memblock_double_array(type, obase, size) < 0) in memblock_add_range()
719 * @size: size of the new region
723 * Add new memblock region [@base, @base + @size) to the "memory"
729 int __init_memblock memblock_add_node(phys_addr_t base, phys_addr_t size, in memblock_add_node() argument
732 phys_addr_t end = base + size - 1; in memblock_add_node()
737 return memblock_add_range(&memblock.memory, base, size, nid, flags); in memblock_add_node()
743 * @size: size of the new region
745 * Add new memblock region [@base, @base + @size) to the "memory"
751 int __init_memblock memblock_add(phys_addr_t base, phys_addr_t size) in memblock_add() argument
753 phys_addr_t end = base + size - 1; in memblock_add()
758 return memblock_add_range(&memblock.memory, base, size, MAX_NUMNODES, 0); in memblock_add()
764 * @threshold_bytes: maximal memory size that can have unassigned node
799 * @size: size of range to isolate
804 * [@base, @base + @size). Crossing regions are split at the boundaries,
813 phys_addr_t base, phys_addr_t size, in memblock_isolate_range() argument
816 phys_addr_t end = base + memblock_cap_size(base, &size); in memblock_isolate_range()
822 if (!size) in memblock_isolate_range()
827 if (memblock_double_array(type, base, size) < 0) in memblock_isolate_range()
832 phys_addr_t rend = rbase + rgn->size; in memblock_isolate_range()
845 rgn->size -= base - rbase; in memblock_isolate_range()
856 rgn->size -= end - rbase; in memblock_isolate_range()
873 phys_addr_t base, phys_addr_t size) in memblock_remove_range() argument
878 ret = memblock_isolate_range(type, base, size, &start_rgn, &end_rgn); in memblock_remove_range()
887 int __init_memblock memblock_remove(phys_addr_t base, phys_addr_t size) in memblock_remove() argument
889 phys_addr_t end = base + size - 1; in memblock_remove()
894 return memblock_remove_range(&memblock.memory, base, size); in memblock_remove()
967 * @size: size of the boot memory block in bytes
973 void __init_memblock memblock_free(void *ptr, size_t size) in memblock_free() argument
976 memblock_phys_free(__pa(ptr), size); in memblock_free()
982 * @size: size of the boot memory block in bytes
988 int __init_memblock memblock_phys_free(phys_addr_t base, phys_addr_t size) in memblock_phys_free() argument
990 phys_addr_t end = base + size - 1; in memblock_phys_free()
996 kmemleak_free_part_phys(base, size); in memblock_phys_free()
999 ret = memblock_remove_range(&memblock.reserved, base, size); in memblock_phys_free()
1002 __free_reserved_area(base, base + size, -1); in memblock_phys_free()
1007 int __init_memblock __memblock_reserve(phys_addr_t base, phys_addr_t size, in __memblock_reserve() argument
1010 phys_addr_t end = base + size - 1; in __memblock_reserve()
1015 return memblock_add_range(&memblock.reserved, base, size, nid, flags); in __memblock_reserve()
1019 int __init_memblock memblock_physmem_add(phys_addr_t base, phys_addr_t size) in memblock_physmem_add() argument
1021 phys_addr_t end = base + size - 1; in memblock_physmem_add()
1026 return memblock_add_range(&physmem, base, size, MAX_NUMNODES, 0); in memblock_physmem_add()
1034 * @size: size of the region
1038 * This function isolates region [@base, @base + @size), and sets/clears flag
1043 phys_addr_t base, phys_addr_t size, int set, int flag) in memblock_setclr_flag() argument
1047 ret = memblock_isolate_range(type, base, size, &start_rgn, &end_rgn); in memblock_setclr_flag()
1067 * @size: the size of the region
1071 int __init_memblock memblock_mark_hotplug(phys_addr_t base, phys_addr_t size) in memblock_mark_hotplug() argument
1073 return memblock_setclr_flag(&memblock.memory, base, size, 1, MEMBLOCK_HOTPLUG); in memblock_mark_hotplug()
1079 * @size: the size of the region
1083 int __init_memblock memblock_clear_hotplug(phys_addr_t base, phys_addr_t size) in memblock_clear_hotplug() argument
1085 return memblock_setclr_flag(&memblock.memory, base, size, 0, MEMBLOCK_HOTPLUG); in memblock_clear_hotplug()
1091 * @size: the size of the region
1095 int __init_memblock memblock_mark_mirror(phys_addr_t base, phys_addr_t size) in memblock_mark_mirror() argument
1102 return memblock_setclr_flag(&memblock.memory, base, size, 1, MEMBLOCK_MIRROR); in memblock_mark_mirror()
1108 * @size: the size of the region
1120 int __init_memblock memblock_mark_nomap(phys_addr_t base, phys_addr_t size) in memblock_mark_nomap() argument
1122 return memblock_setclr_flag(&memblock.memory, base, size, 1, MEMBLOCK_NOMAP); in memblock_mark_nomap()
1128 * @size: the size of the region
1132 int __init_memblock memblock_clear_nomap(phys_addr_t base, phys_addr_t size) in memblock_clear_nomap() argument
1134 return memblock_setclr_flag(&memblock.memory, base, size, 0, MEMBLOCK_NOMAP); in memblock_clear_nomap()
1142 * @size: the size of the region
1156 int __init_memblock memblock_reserved_mark_noinit(phys_addr_t base, phys_addr_t size) in memblock_reserved_mark_noinit() argument
1158 return memblock_setclr_flag(&memblock.reserved, base, size, 1, in memblock_reserved_mark_noinit()
1167 * @size: the size of the region
1171 int __init_memblock memblock_reserved_mark_kern(phys_addr_t base, phys_addr_t size) in memblock_reserved_mark_kern() argument
1173 return memblock_setclr_flag(&memblock.reserved, base, size, 1, in memblock_reserved_mark_kern()
1180 * @size: the size of the region
1187 __init int memblock_mark_kho_scratch(phys_addr_t base, phys_addr_t size) in memblock_mark_kho_scratch() argument
1189 return memblock_setclr_flag(&memblock.memory, base, size, 1, in memblock_mark_kho_scratch()
1197 * @size: the size of the region
1201 __init int memblock_clear_kho_scratch(phys_addr_t base, phys_addr_t size) in memblock_clear_kho_scratch() argument
1203 return memblock_setclr_flag(&memblock.memory, base, size, 0, in memblock_clear_kho_scratch()
1286 phys_addr_t m_end = m->base + m->size; in __next_mem_range()
1311 r_start = idx_b ? r[-1].base + r[-1].size : 0; in __next_mem_range()
1387 phys_addr_t m_end = m->base + m->size; in __next_mem_range_rev()
1412 r_start = idx_b ? r[-1].base + r[-1].size : 0; in __next_mem_range_rev()
1458 if (PFN_UP(r->base) >= PFN_DOWN(r->base + r->size)) in __next_mem_pfn_range()
1471 *out_end_pfn = PFN_DOWN(r->base + r->size); in __next_mem_pfn_range()
1479 * @size: size of area to set node ID for
1483 * Set the nid of memblock @type regions in [@base, @base + @size) to @nid.
1489 int __init_memblock memblock_set_node(phys_addr_t base, phys_addr_t size, in memblock_set_node() argument
1496 ret = memblock_isolate_range(type, base, size, &start_rgn, &end_rgn); in memblock_set_node()
1508 static void memblock_prep_allocation(phys_addr_t start, phys_addr_t size, in memblock_prep_allocation() argument
1522 kmemleak_alloc_phys(start, size, 0); in memblock_prep_allocation()
1531 accept_memory(start, size); in memblock_prep_allocation()
1536 * @size: size of memory block to be allocated in bytes
1537 * @align: alignment of the region and block's size
1559 phys_addr_t __init memblock_alloc_range_nid(phys_addr_t size, in memblock_alloc_range_nid() argument
1573 void *vaddr = kzalloc_node(size, GFP_NOWAIT, nid); in memblock_alloc_range_nid()
1585 found = memblock_find_in_range_node(size, align, start, end, nid, in memblock_alloc_range_nid()
1587 if (found && !__memblock_reserve(found, size, nid, MEMBLOCK_RSRV_KERN)) in memblock_alloc_range_nid()
1591 found = memblock_find_in_range_node(size, align, start, in memblock_alloc_range_nid()
1594 if (found && !memblock_reserve_kern(found, size)) in memblock_alloc_range_nid()
1601 &size); in memblock_alloc_range_nid()
1608 memblock_prep_allocation(found, size, end != MEMBLOCK_ALLOC_NOLEAKTRACE); in memblock_alloc_range_nid()
1614 * @size: size of memory block to be allocated in bytes
1615 * @align: alignment of the region and block's size
1619 * Allocate @size bytes in the between @start and @end.
1624 phys_addr_t __init memblock_phys_alloc_range(phys_addr_t size, in memblock_phys_alloc_range() argument
1630 __func__, (u64)size, (u64)align, &start, &end, in memblock_phys_alloc_range()
1632 return memblock_alloc_range_nid(size, align, start, end, NUMA_NO_NODE, in memblock_phys_alloc_range()
1638 * @size: size of memory block to be allocated in bytes
1639 * @align: alignment of the region and block's size
1649 phys_addr_t __init memblock_phys_alloc_try_nid(phys_addr_t size, phys_addr_t align, int nid) in memblock_phys_alloc_try_nid() argument
1651 return memblock_alloc_range_nid(size, align, 0, in memblock_phys_alloc_try_nid()
1657 * @size: size of memory block to be allocated in bytes
1658 * @align: alignment of the region and block's size
1676 phys_addr_t size, phys_addr_t align, in memblock_alloc_internal() argument
1686 alloc = memblock_alloc_range_nid(size, align, min_addr, max_addr, nid, in memblock_alloc_internal()
1691 alloc = memblock_alloc_range_nid(size, align, 0, max_addr, nid, in memblock_alloc_internal()
1703 * @size: size of memory block to be allocated in bytes
1704 * @align: alignment of the region and block's size
1719 phys_addr_t size, phys_addr_t align, in memblock_alloc_exact_nid_raw() argument
1724 __func__, (u64)size, (u64)align, nid, &min_addr, in memblock_alloc_exact_nid_raw()
1727 return memblock_alloc_internal(size, align, min_addr, max_addr, nid, in memblock_alloc_exact_nid_raw()
1734 * @size: size of memory block to be allocated in bytes
1735 * @align: alignment of the region and block's size
1751 phys_addr_t size, phys_addr_t align, in memblock_alloc_try_nid_raw() argument
1756 __func__, (u64)size, (u64)align, nid, &min_addr, in memblock_alloc_try_nid_raw()
1759 return memblock_alloc_internal(size, align, min_addr, max_addr, nid, in memblock_alloc_try_nid_raw()
1765 * @size: size of the memory to be allocated in bytes
1770 * HugeTLB pages are always aligned by their size, so the alignment matches
1771 * @size. Since the memory is for userspace, mirrored memory is not used. The
1777 void * __init memblock_alloc_hugetlb(phys_addr_t size, int nid, bool exact_nid) in memblock_alloc_hugetlb() argument
1783 (u64)size, nid, exact_nid, (void *)_RET_IP_); in memblock_alloc_hugetlb()
1788 /* HugeTLB pages are always aligned by their size. */ in memblock_alloc_hugetlb()
1789 addr = memblock_find_in_range_node(size, size, start, end, nid, flags); in memblock_alloc_hugetlb()
1818 if (kho_scratch_overlap(addr, size)) { in memblock_alloc_hugetlb()
1820 start = addr + size; in memblock_alloc_hugetlb()
1827 if (__memblock_reserve(addr, size, nid, MEMBLOCK_RSRV_KERN | MEMBLOCK_RSRV_HUGETLB)) in memblock_alloc_hugetlb()
1830 memblock_prep_allocation(addr, size, true); in memblock_alloc_hugetlb()
1836 * @size: size of memory block to be allocated in bytes
1837 * @align: alignment of the region and block's size
1852 phys_addr_t size, phys_addr_t align, in memblock_alloc_try_nid() argument
1859 __func__, (u64)size, (u64)align, nid, &min_addr, in memblock_alloc_try_nid()
1861 ptr = memblock_alloc_internal(size, align, in memblock_alloc_try_nid()
1864 memset(ptr, 0, size); in memblock_alloc_try_nid()
1871 * @size: size of memory block to be allocated in bytes
1872 * @align: alignment of the region and block's size
1879 void *__init __memblock_alloc_or_panic(phys_addr_t size, phys_addr_t align, in __memblock_alloc_or_panic() argument
1882 void *addr = memblock_alloc(size, align); in __memblock_alloc_or_panic()
1885 panic("%s: Failed to allocate %pap bytes\n", func, &size); in __memblock_alloc_or_panic()
1909 phys_addr_t size = r->size; in memblock_reserved_hugetlb_size() local
1914 if (r->base + r->size > limit) in memblock_reserved_hugetlb_size()
1915 size = limit - r->base; in memblock_reserved_hugetlb_size()
1919 total += size; in memblock_reserved_hugetlb_size()
1931 phys_addr_t size = r->size; in memblock_reserved_kern_size() local
1936 if (r->base + r->size > limit) in memblock_reserved_kern_size()
1937 size = limit - r->base; in memblock_reserved_kern_size()
1941 total += size; in memblock_reserved_kern_size()
1975 return (memblock.memory.regions[idx].base + memblock.memory.regions[idx].size); in memblock_end_of_DRAM()
1984 * translate the memory @limit size into the max address within one of in __find_max_addr()
1985 * the memory memblock regions, if the @limit exceeds the total size in __find_max_addr()
1989 if (limit <= r->size) { in __find_max_addr()
1993 limit -= r->size; in __find_max_addr()
2008 /* @limit exceeds the total size of the memory, do nothing */ in memblock_enforce_memory_limit()
2019 void __init memblock_cap_memory_range(phys_addr_t base, phys_addr_t size) in memblock_cap_memory_range() argument
2024 if (!size) in memblock_cap_memory_range()
2032 ret = memblock_isolate_range(&memblock.memory, base, size, in memblock_cap_memory_range()
2049 base + size, PHYS_ADDR_MAX); in memblock_cap_memory_range()
2061 /* @limit exceeds the total size of the memory, do nothing */ in memblock_mem_limit_remove_map()
2078 type->regions[mid].size)) in memblock_search()
2115 *end_pfn = PFN_DOWN(type->regions[mid].base + type->regions[mid].size); in memblock_search_pfn_nid()
2123 * @size: size of region to check
2125 * Check if the region [@base, @base + @size) is a subset of a memory block.
2130 bool __init_memblock memblock_is_region_memory(phys_addr_t base, phys_addr_t size) in memblock_is_region_memory() argument
2133 phys_addr_t end = base + memblock_cap_size(base, &size); in memblock_is_region_memory()
2138 memblock.memory.regions[idx].size) >= end; in memblock_is_region_memory()
2144 * @size: size of region to check
2146 * Check if the region [@base, @base + @size) intersects a reserved
2152 bool __init_memblock memblock_is_region_reserved(phys_addr_t base, phys_addr_t size) in memblock_is_region_reserved() argument
2154 return memblock_overlaps_region(&memblock.reserved, base, size); in memblock_is_region_reserved()
2164 orig_end = r->base + r->size; in memblock_trim_memory()
2173 r->size = end - start; in memblock_trim_memory()
2194 phys_addr_t base, end, size; in memblock_dump() local
2205 size = rgn->size; in memblock_dump()
2206 end = base + size - 1; in memblock_dump()
2214 type->name, idx, &base, &end, &size, nid_buf, flags); in memblock_dump()
2221 pr_info(" memory size = %pa reserved size = %pa\n", in __memblock_dump_all()
2413 end = start + region->size; in memmap_init_reserved_pages()
2418 memblock_set_node(start, region->size, &memblock.reserved, nid); in memmap_init_reserved_pages()
2436 end = start + region->size; in memmap_init_reserved_pages()
2512 phys_addr_t size; member
2519 static void __init reserved_mem_add(phys_addr_t start, phys_addr_t size, in reserved_mem_add() argument
2526 map->size = size; in reserved_mem_add()
2537 if (!map->size) in reserve_mem_find_by_name_nolock()
2549 * @size: If found, holds the size of the address.
2551 * @start and @size are only updated if @name is found.
2555 int reserve_mem_find_by_name(const char *name, phys_addr_t *start, phys_addr_t *size) in reserve_mem_find_by_name() argument
2565 *size = map->size; in reserve_mem_find_by_name()
2575 * can be used as free memory. After released the reserved region size becomes 0.
2591 end = start + map->size; in reserve_mem_release_by_name()
2594 map->size = 0; in reserve_mem_release_by_name()
2621 unsigned int nr_pages = map->size >> PAGE_SHIFT; in reserved_mem_preserve()
2634 unsigned int nr_pages = map->size >> PAGE_SHIFT; in reserved_mem_preserve()
2670 err |= fdt_property(fdt, "size", &map->size, sizeof(map->size)); in prepare_kho_fdt()
2744 static bool __init reserve_mem_kho_revive(const char *name, phys_addr_t size, in reserve_mem_kho_revive() argument
2769 p_size = fdt_getprop(fdt, offset, "size", &len_size); in reserve_mem_kho_revive()
2781 if (*p_size != size) { in reserve_mem_kho_revive()
2782 pr_warn("KHO reserve-mem '%s' has wrong size (0x%lx != 0x%lx)\n", in reserve_mem_kho_revive()
2783 name, (long)*p_size, (long)size); in reserve_mem_kho_revive()
2787 reserved_mem_add(*p_start, size, name); in reserve_mem_kho_revive()
2793 static bool __init reserve_mem_kho_revive(const char *name, phys_addr_t size, in reserve_mem_kho_revive() argument
2805 phys_addr_t start, size, align, tmp; in reserve_mem() local
2820 size = memparse(p, &p); in reserve_mem()
2821 if (!size || p == oldp) in reserve_mem()
2832 * memblock_phys_alloc() doesn't like a zero size align, in reserve_mem()
2860 if (reserve_mem_kho_revive(name, size, align)) in reserve_mem()
2864 start = memblock_phys_alloc(size, align); in reserve_mem()
2870 reserved_mem_add(start, size, name); in reserve_mem()
2902 end = reg->base + reg->size - 1; in memblock_debug_show()
2958 if (!map->size) in memblock_reserve_mem_show()
2962 string_get_size(map->size, 1, STRING_UNITS_2, txtsz, sizeof(txtsz)); in memblock_reserve_mem_show()