Lines Matching refs:mm

118 static void show_leaks(struct drm_mm *mm)  in show_leaks()  argument
129 list_for_each_entry(node, drm_mm_nodes(mm), node_list) { in show_leaks()
149 static void show_leaks(struct drm_mm *mm) { } in show_leaks() argument
160 __drm_mm_interval_first(const struct drm_mm *mm, u64 start, u64 last) in INTERVAL_TREE_DEFINE()
162 return drm_mm_interval_tree_iter_first((struct rb_root_cached *)&mm->interval_tree, in INTERVAL_TREE_DEFINE()
163 start, last) ?: (struct drm_mm_node *)&mm->head_node; in INTERVAL_TREE_DEFINE()
170 struct drm_mm *mm = hole_node->mm; in drm_mm_interval_tree_add_node() local
193 link = &mm->interval_tree.rb_root.rb_node; in drm_mm_interval_tree_add_node()
211 rb_insert_augmented_cached(&node->rb, &mm->interval_tree, leftmost, in drm_mm_interval_tree_add_node()
260 struct drm_mm *mm = node->mm; in add_hole() local
266 insert_hole_size(&mm->holes_size, node); in add_hole()
267 RB_INSERT(mm->holes_addr, rb_hole_addr, HOLE_ADDR); in add_hole()
269 list_add(&node->hole_stack, &mm->hole_stack); in add_hole()
277 rb_erase_cached(&node->rb_hole_size, &node->mm->holes_size); in rm_hole()
278 rb_erase(&node->rb_hole_addr, &node->mm->holes_addr); in rm_hole()
299 static struct drm_mm_node *best_hole(struct drm_mm *mm, u64 size) in best_hole() argument
301 struct rb_node *rb = mm->holes_size.rb_root.rb_node; in best_hole()
319 static struct drm_mm_node *find_hole(struct drm_mm *mm, u64 addr) in find_hole() argument
321 struct rb_node *rb = mm->holes_addr.rb_node; in find_hole()
342 first_hole(struct drm_mm *mm, in first_hole() argument
349 return best_hole(mm, size); in first_hole()
352 return find_hole(mm, start); in first_hole()
355 return find_hole(mm, end); in first_hole()
358 return list_first_entry_or_null(&mm->hole_stack, in first_hole()
365 next_hole(struct drm_mm *mm, in next_hole() argument
382 return &node->hole_stack == &mm->hole_stack ? NULL : node; in next_hole()
400 int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node) in drm_mm_reserve_node() argument
412 hole = find_hole(mm, node->start); in drm_mm_reserve_node()
419 if (mm->color_adjust) in drm_mm_reserve_node()
420 mm->color_adjust(hole, node->color, &adj_start, &adj_end); in drm_mm_reserve_node()
425 node->mm = mm; in drm_mm_reserve_node()
464 int drm_mm_insert_node_in_range(struct drm_mm * const mm, in drm_mm_insert_node_in_range() argument
480 if (rb_to_hole_size_or_zero(rb_first_cached(&mm->holes_size)) < size) in drm_mm_insert_node_in_range()
490 for (hole = first_hole(mm, range_start, range_end, size, mode); in drm_mm_insert_node_in_range()
492 hole = once ? NULL : next_hole(mm, hole, mode)) { in drm_mm_insert_node_in_range()
506 if (mm->color_adjust) in drm_mm_insert_node_in_range()
507 mm->color_adjust(hole, color, &col_start, &col_end); in drm_mm_insert_node_in_range()
540 node->mm = mm; in drm_mm_insert_node_in_range()
574 struct drm_mm *mm = node->mm; in drm_mm_remove_node() local
585 drm_mm_interval_tree_remove(node, &mm->interval_tree); in drm_mm_remove_node()
606 struct drm_mm *mm = old->mm; in drm_mm_replace_node() local
613 rb_replace_node_cached(&old->rb, &new->rb, &mm->interval_tree); in drm_mm_replace_node()
619 &mm->holes_size); in drm_mm_replace_node()
622 &mm->holes_addr); in drm_mm_replace_node()
681 struct drm_mm *mm, in drm_mm_scan_init_with_range() argument
691 DRM_MM_BUG_ON(mm->scan_active); in drm_mm_scan_init_with_range()
693 scan->mm = mm; in drm_mm_scan_init_with_range()
727 struct drm_mm *mm = scan->mm; in drm_mm_scan_add_block() local
733 DRM_MM_BUG_ON(node->mm != mm); in drm_mm_scan_add_block()
737 mm->scan_active++; in drm_mm_scan_add_block()
753 if (mm->color_adjust) in drm_mm_scan_add_block()
754 mm->color_adjust(hole, scan->color, &col_start, &col_end); in drm_mm_scan_add_block()
820 DRM_MM_BUG_ON(node->mm != scan->mm); in drm_mm_scan_remove_block()
824 DRM_MM_BUG_ON(!node->mm->scan_active); in drm_mm_scan_remove_block()
825 node->mm->scan_active--; in drm_mm_scan_remove_block()
858 struct drm_mm *mm = scan->mm; in drm_mm_scan_color_evict() local
862 DRM_MM_BUG_ON(list_empty(&mm->hole_stack)); in drm_mm_scan_color_evict()
864 if (!mm->color_adjust) in drm_mm_scan_color_evict()
872 list_for_each_entry(hole, &mm->hole_stack, hole_stack) { in drm_mm_scan_color_evict()
882 DRM_MM_BUG_ON(&hole->hole_stack == &mm->hole_stack); in drm_mm_scan_color_evict()
883 if (unlikely(&hole->hole_stack == &mm->hole_stack)) in drm_mm_scan_color_evict()
889 mm->color_adjust(hole, scan->color, &hole_start, &hole_end); in drm_mm_scan_color_evict()
907 void drm_mm_init(struct drm_mm *mm, u64 start, u64 size) in drm_mm_init() argument
911 mm->color_adjust = NULL; in drm_mm_init()
913 INIT_LIST_HEAD(&mm->hole_stack); in drm_mm_init()
914 mm->interval_tree = RB_ROOT_CACHED; in drm_mm_init()
915 mm->holes_size = RB_ROOT_CACHED; in drm_mm_init()
916 mm->holes_addr = RB_ROOT; in drm_mm_init()
919 INIT_LIST_HEAD(&mm->head_node.node_list); in drm_mm_init()
920 mm->head_node.allocated = false; in drm_mm_init()
921 mm->head_node.mm = mm; in drm_mm_init()
922 mm->head_node.start = start + size; in drm_mm_init()
923 mm->head_node.size = -size; in drm_mm_init()
924 add_hole(&mm->head_node); in drm_mm_init()
926 mm->scan_active = 0; in drm_mm_init()
937 void drm_mm_takedown(struct drm_mm *mm) in drm_mm_takedown() argument
939 if (WARN(!drm_mm_clean(mm), in drm_mm_takedown()
941 show_leaks(mm); in drm_mm_takedown()
963 void drm_mm_print(const struct drm_mm *mm, struct drm_printer *p) in drm_mm_print() argument
968 total_free += drm_mm_dump_hole(p, &mm->head_node); in drm_mm_print()
970 drm_mm_for_each_node(entry, mm) { in drm_mm_print()