Lines Matching refs:mm
93 static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm,
98 static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_mm *mm,
112 struct drm_mm *mm = hole_node->mm; in drm_mm_insert_helper() local
120 if (mm->color_adjust) in drm_mm_insert_helper()
121 mm->color_adjust(hole_node, color, &adj_start, &adj_end); in drm_mm_insert_helper()
149 node->mm = mm; in drm_mm_insert_helper()
160 list_add(&node->hole_stack, &mm->hole_stack); in drm_mm_insert_helper()
179 int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node) in drm_mm_reserve_node() argument
189 drm_mm_for_each_hole(hole, mm, hole_start, hole_end) { in drm_mm_reserve_node()
193 node->mm = mm; in drm_mm_reserve_node()
206 list_add(&node->hole_stack, &mm->hole_stack); in drm_mm_reserve_node()
232 int drm_mm_insert_node_generic(struct drm_mm *mm, struct drm_mm_node *node, in drm_mm_insert_node_generic() argument
240 hole_node = drm_mm_search_free_generic(mm, size, alignment, in drm_mm_insert_node_generic()
257 struct drm_mm *mm = hole_node->mm; in drm_mm_insert_helper_range() local
270 if (mm->color_adjust) in drm_mm_insert_helper_range()
271 mm->color_adjust(hole_node, color, &adj_start, &adj_end); in drm_mm_insert_helper_range()
296 node->mm = mm; in drm_mm_insert_helper_range()
310 list_add(&node->hole_stack, &mm->hole_stack); in drm_mm_insert_helper_range()
332 int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, struct drm_mm_node *node, in drm_mm_insert_node_in_range_generic() argument
341 hole_node = drm_mm_search_free_in_range_generic(mm, in drm_mm_insert_node_in_range_generic()
364 struct drm_mm *mm = node->mm; in drm_mm_remove_node() local
387 list_add(&prev_node->hole_stack, &mm->hole_stack); in drm_mm_remove_node()
389 list_move(&prev_node->hole_stack, &mm->hole_stack); in drm_mm_remove_node()
413 static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm, in drm_mm_search_free_generic() argument
425 BUG_ON(mm->scanned_blocks); in drm_mm_search_free_generic()
430 __drm_mm_for_each_hole(entry, mm, adj_start, adj_end, in drm_mm_search_free_generic()
434 if (mm->color_adjust) { in drm_mm_search_free_generic()
435 mm->color_adjust(entry, color, &adj_start, &adj_end); in drm_mm_search_free_generic()
455 static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_mm *mm, in drm_mm_search_free_in_range_generic() argument
469 BUG_ON(mm->scanned_blocks); in drm_mm_search_free_in_range_generic()
474 __drm_mm_for_each_hole(entry, mm, adj_start, adj_end, in drm_mm_search_free_in_range_generic()
483 if (mm->color_adjust) { in drm_mm_search_free_in_range_generic()
484 mm->color_adjust(entry, color, &adj_start, &adj_end); in drm_mm_search_free_in_range_generic()
518 new->mm = old->mm; in drm_mm_replace_node()
571 void drm_mm_init_scan(struct drm_mm *mm, in drm_mm_init_scan() argument
576 mm->scan_color = color; in drm_mm_init_scan()
577 mm->scan_alignment = alignment; in drm_mm_init_scan()
578 mm->scan_size = size; in drm_mm_init_scan()
579 mm->scanned_blocks = 0; in drm_mm_init_scan()
580 mm->scan_hit_start = 0; in drm_mm_init_scan()
581 mm->scan_hit_end = 0; in drm_mm_init_scan()
582 mm->scan_check_range = 0; in drm_mm_init_scan()
583 mm->prev_scanned_node = NULL; in drm_mm_init_scan()
604 void drm_mm_init_scan_with_range(struct drm_mm *mm, in drm_mm_init_scan_with_range() argument
611 mm->scan_color = color; in drm_mm_init_scan_with_range()
612 mm->scan_alignment = alignment; in drm_mm_init_scan_with_range()
613 mm->scan_size = size; in drm_mm_init_scan_with_range()
614 mm->scanned_blocks = 0; in drm_mm_init_scan_with_range()
615 mm->scan_hit_start = 0; in drm_mm_init_scan_with_range()
616 mm->scan_hit_end = 0; in drm_mm_init_scan_with_range()
617 mm->scan_start = start; in drm_mm_init_scan_with_range()
618 mm->scan_end = end; in drm_mm_init_scan_with_range()
619 mm->scan_check_range = 1; in drm_mm_init_scan_with_range()
620 mm->prev_scanned_node = NULL; in drm_mm_init_scan_with_range()
636 struct drm_mm *mm = node->mm; in drm_mm_scan_add_block() local
641 mm->scanned_blocks++; in drm_mm_scan_add_block()
653 node->node_list.next = &mm->prev_scanned_node->node_list; in drm_mm_scan_add_block()
654 mm->prev_scanned_node = node; in drm_mm_scan_add_block()
659 if (mm->scan_check_range) { in drm_mm_scan_add_block()
660 if (adj_start < mm->scan_start) in drm_mm_scan_add_block()
661 adj_start = mm->scan_start; in drm_mm_scan_add_block()
662 if (adj_end > mm->scan_end) in drm_mm_scan_add_block()
663 adj_end = mm->scan_end; in drm_mm_scan_add_block()
666 if (mm->color_adjust) in drm_mm_scan_add_block()
667 mm->color_adjust(prev_node, mm->scan_color, in drm_mm_scan_add_block()
671 mm->scan_size, mm->scan_alignment)) { in drm_mm_scan_add_block()
672 mm->scan_hit_start = hole_start; in drm_mm_scan_add_block()
673 mm->scan_hit_end = hole_end; in drm_mm_scan_add_block()
699 struct drm_mm *mm = node->mm; in drm_mm_scan_remove_block() local
702 mm->scanned_blocks--; in drm_mm_scan_remove_block()
713 return (drm_mm_hole_node_end(node) > mm->scan_hit_start && in drm_mm_scan_remove_block()
714 node->start < mm->scan_hit_end); in drm_mm_scan_remove_block()
726 bool drm_mm_clean(struct drm_mm * mm) in drm_mm_clean() argument
728 struct list_head *head = &mm->head_node.node_list; in drm_mm_clean()
742 void drm_mm_init(struct drm_mm * mm, u64 start, u64 size) in drm_mm_init() argument
744 INIT_LIST_HEAD(&mm->hole_stack); in drm_mm_init()
745 mm->scanned_blocks = 0; in drm_mm_init()
748 INIT_LIST_HEAD(&mm->head_node.node_list); in drm_mm_init()
749 INIT_LIST_HEAD(&mm->head_node.hole_stack); in drm_mm_init()
750 mm->head_node.hole_follows = 1; in drm_mm_init()
751 mm->head_node.scanned_block = 0; in drm_mm_init()
752 mm->head_node.scanned_prev_free = 0; in drm_mm_init()
753 mm->head_node.scanned_next_free = 0; in drm_mm_init()
754 mm->head_node.mm = mm; in drm_mm_init()
755 mm->head_node.start = start + size; in drm_mm_init()
756 mm->head_node.size = start - mm->head_node.start; in drm_mm_init()
757 list_add_tail(&mm->head_node.hole_stack, &mm->hole_stack); in drm_mm_init()
759 mm->color_adjust = NULL; in drm_mm_init()
770 void drm_mm_takedown(struct drm_mm * mm) in drm_mm_takedown() argument
772 WARN(!list_empty(&mm->head_node.node_list), in drm_mm_takedown()
799 void drm_mm_debug_table(struct drm_mm *mm, const char *prefix) in drm_mm_debug_table() argument
804 total_free += drm_mm_debug_hole(&mm->head_node, prefix); in drm_mm_debug_table()
806 drm_mm_for_each_node(entry, mm) { in drm_mm_debug_table()
841 int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm) in drm_mm_dump_table() argument
846 total_free += drm_mm_dump_hole(m, &mm->head_node); in drm_mm_dump_table()
848 drm_mm_for_each_node(entry, mm) { in drm_mm_dump_table()