Lines Matching refs:type

204 bool __init_memblock memblock_overlaps_region(struct memblock_type *type,  in memblock_overlaps_region()  argument
211 for (i = 0; i < type->cnt; i++) in memblock_overlaps_region()
212 if (memblock_addrs_overlap(base, size, type->regions[i].base, in memblock_overlaps_region()
213 type->regions[i].size)) in memblock_overlaps_region()
363 static void __init_memblock memblock_remove_region(struct memblock_type *type, unsigned long r) in memblock_remove_region() argument
365 type->total_size -= type->regions[r].size; in memblock_remove_region()
366 memmove(&type->regions[r], &type->regions[r + 1], in memblock_remove_region()
367 (type->cnt - (r + 1)) * sizeof(type->regions[r])); in memblock_remove_region()
368 type->cnt--; in memblock_remove_region()
371 if (type->cnt == 0) { in memblock_remove_region()
372 WARN_ON(type->total_size != 0); in memblock_remove_region()
373 type->regions[0].base = 0; in memblock_remove_region()
374 type->regions[0].size = 0; in memblock_remove_region()
375 type->regions[0].flags = 0; in memblock_remove_region()
376 memblock_set_region_node(&type->regions[0], MAX_NUMNODES); in memblock_remove_region()
427 static int __init_memblock memblock_double_array(struct memblock_type *type, in memblock_double_array() argument
441 panic("memblock: cannot resize %s array\n", type->name); in memblock_double_array()
444 old_size = type->max * sizeof(struct memblock_region); in memblock_double_array()
454 if (type == &memblock.memory) in memblock_double_array()
465 if (type != &memblock.reserved) in memblock_double_array()
487 type->name, type->max, type->max * 2); in memblock_double_array()
493 type->name, type->max * 2, &addr, &new_end); in memblock_double_array()
500 memcpy(new_array, type->regions, old_size); in memblock_double_array()
501 memset(new_array + type->max, 0, old_size); in memblock_double_array()
502 old_array = type->regions; in memblock_double_array()
503 type->regions = new_array; in memblock_double_array()
504 type->max <<= 1; in memblock_double_array()
533 static void __init_memblock memblock_merge_regions(struct memblock_type *type, in memblock_merge_regions() argument
540 end_rgn = min(end_rgn, type->cnt - 1); in memblock_merge_regions()
542 struct memblock_region *this = &type->regions[i]; in memblock_merge_regions()
543 struct memblock_region *next = &type->regions[i + 1]; in memblock_merge_regions()
556 memmove(next, next + 1, (type->cnt - (i + 2)) * sizeof(*next)); in memblock_merge_regions()
557 type->cnt--; in memblock_merge_regions()
574 static void __init_memblock memblock_insert_region(struct memblock_type *type, in memblock_insert_region() argument
580 struct memblock_region *rgn = &type->regions[idx]; in memblock_insert_region()
582 BUG_ON(type->cnt >= type->max); in memblock_insert_region()
583 memmove(rgn + 1, rgn, (type->cnt - idx) * sizeof(*rgn)); in memblock_insert_region()
588 type->cnt++; in memblock_insert_region()
589 type->total_size += size; in memblock_insert_region()
608 static int __init_memblock memblock_add_range(struct memblock_type *type, in memblock_add_range() argument
622 if (type->regions[0].size == 0) { in memblock_add_range()
623 WARN_ON(type->cnt != 0 || type->total_size); in memblock_add_range()
624 type->regions[0].base = base; in memblock_add_range()
625 type->regions[0].size = size; in memblock_add_range()
626 type->regions[0].flags = flags; in memblock_add_range()
627 memblock_set_region_node(&type->regions[0], nid); in memblock_add_range()
628 type->total_size = size; in memblock_add_range()
629 type->cnt = 1; in memblock_add_range()
640 if (type->cnt * 2 + 1 <= type->max) in memblock_add_range()
652 for_each_memblock_type(idx, type, rgn) { in memblock_add_range()
674 memblock_insert_region(type, idx++, base, in memblock_add_range()
690 memblock_insert_region(type, idx, base, end - base, in memblock_add_range()
703 while (type->cnt + nr_new > type->max) in memblock_add_range()
704 if (memblock_double_array(type, obase, size) < 0) in memblock_add_range()
709 memblock_merge_regions(type, start_rgn, end_rgn); in memblock_add_range()
810 static int __init_memblock memblock_isolate_range(struct memblock_type *type, in memblock_isolate_range() argument
824 while (type->cnt + 2 > type->max) in memblock_isolate_range()
825 if (memblock_double_array(type, base, size) < 0) in memblock_isolate_range()
828 for_each_memblock_type(idx, type, rgn) { in memblock_isolate_range()
844 type->total_size -= base - rbase; in memblock_isolate_range()
845 memblock_insert_region(type, idx, rbase, base - rbase, in memblock_isolate_range()
855 type->total_size -= end - rbase; in memblock_isolate_range()
856 memblock_insert_region(type, idx--, rbase, end - rbase, in memblock_isolate_range()
870 static int __init_memblock memblock_remove_range(struct memblock_type *type, in memblock_remove_range() argument
876 ret = memblock_isolate_range(type, base, size, &start_rgn, &end_rgn); in memblock_remove_range()
881 memblock_remove_region(type, i); in memblock_remove_range()
997 static int __init_memblock memblock_setclr_flag(struct memblock_type *type, in memblock_setclr_flag() argument
1002 ret = memblock_isolate_range(type, base, size, &start_rgn, &end_rgn); in memblock_setclr_flag()
1007 struct memblock_region *r = &type->regions[i]; in memblock_setclr_flag()
1015 memblock_merge_regions(type, start_rgn, end_rgn); in memblock_setclr_flag()
1140 static bool should_skip_region(struct memblock_type *type, in should_skip_region() argument
1147 if (type != memblock_memory) in should_skip_region()
1383 struct memblock_type *type = &memblock.memory; in __next_mem_pfn_range() local
1387 while (++*idx < type->cnt) { in __next_mem_pfn_range()
1388 r = &type->regions[*idx]; in __next_mem_pfn_range()
1396 if (*idx >= type->cnt) { in __next_mem_pfn_range()
1423 struct memblock_type *type, int nid) in memblock_set_node() argument
1429 ret = memblock_isolate_range(type, base, size, &start_rgn, &end_rgn); in memblock_set_node()
1434 memblock_set_region_node(&type->regions[i], nid); in memblock_set_node()
1436 memblock_merge_regions(type, start_rgn, end_rgn); in memblock_set_node()
1992 static int __init_memblock memblock_search(struct memblock_type *type, phys_addr_t addr) in memblock_search() argument
1994 unsigned int left = 0, right = type->cnt; in memblock_search()
1999 if (addr < type->regions[mid].base) in memblock_search()
2001 else if (addr >= (type->regions[mid].base + in memblock_search()
2002 type->regions[mid].size)) in memblock_search()
2032 struct memblock_type *type = &memblock.memory; in memblock_search_pfn_nid() local
2033 int mid = memblock_search(type, PFN_PHYS(pfn)); in memblock_search_pfn_nid()
2038 *start_pfn = PFN_DOWN(type->regions[mid].base); in memblock_search_pfn_nid()
2039 *end_pfn = PFN_DOWN(type->regions[mid].base + type->regions[mid].size); in memblock_search_pfn_nid()
2041 return memblock_get_region_node(&type->regions[mid]); in memblock_search_pfn_nid()
2116 static void __init_memblock memblock_dump(struct memblock_type *type) in memblock_dump() argument
2123 pr_info(" %s.cnt = 0x%lx\n", type->name, type->cnt); in memblock_dump()
2125 for_each_memblock_type(idx, type, rgn) { in memblock_dump()
2138 type->name, idx, &base, &end, &size, nid_buf, flags); in memblock_dump()
2766 struct memblock_type *type = m->private; in memblock_debug_show() local
2772 for (i = 0; i < type->cnt; i++) { in memblock_debug_show()
2773 reg = &type->regions[i]; in memblock_debug_show()