Lines Matching defs:mm

118 static void show_leaks(struct drm_mm *mm)
129 list_for_each_entry(node, drm_mm_nodes(mm), node_list) {
149 static void show_leaks(struct drm_mm *mm) { }
184 __drm_mm_interval_first(const struct drm_mm *mm, u64 start, u64 last)
186 return drm_mm_interval_tree_iter_first((struct rb_root_cached *)&mm->interval_tree,
187 start, last) ?: (struct drm_mm_node *)&mm->head_node;
194 struct drm_mm *mm = hole_node->mm;
217 link = &mm->interval_tree.rb_root.rb_node;
236 rb_insert_augmented_cached(&node->rb, &mm->interval_tree, leftmost,
239 rb_insert_color_cached(&node->rb, &mm->interval_tree, leftmost);
288 struct drm_mm *mm = node->mm;
294 insert_hole_size(&mm->holes_size, node);
295 DRM_RB_INSERT(mm->holes_addr, rb_hole_addr, HOLE_ADDR);
297 list_add(&node->hole_stack, &mm->hole_stack);
305 rb_erase_cached(&node->rb_hole_size, &node->mm->holes_size);
306 rb_erase(&node->rb_hole_addr, &node->mm->holes_addr);
327 static struct drm_mm_node *best_hole(struct drm_mm *mm, u64 size)
329 struct rb_node *rb = mm->holes_size.rb_root.rb_node;
347 static struct drm_mm_node *find_hole(struct drm_mm *mm, u64 addr)
349 struct rb_node *rb = mm->holes_addr.rb_node;
370 first_hole(struct drm_mm *mm,
377 return best_hole(mm, size);
380 return find_hole(mm, start);
383 return find_hole(mm, end);
386 return list_first_entry_or_null(&mm->hole_stack,
393 next_hole(struct drm_mm *mm,
410 return &node->hole_stack == &mm->hole_stack ? NULL : node;
416 * @mm: drm_mm allocator to insert @node into
428 int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node)
440 hole = find_hole(mm, node->start);
447 if (mm->color_adjust)
448 mm->color_adjust(hole, node->color, &adj_start, &adj_end);
453 node->mm = mm;
478 * @mm: drm_mm to allocate from
492 int drm_mm_insert_node_in_range(struct drm_mm * const mm,
508 if (rb_to_hole_size_or_zero(rb_first_cached(&mm->holes_size)) < size)
518 for (hole = first_hole(mm, range_start, range_end, size, mode);
520 hole = once ? NULL : next_hole(mm, hole, mode)) {
534 if (mm->color_adjust)
535 mm->color_adjust(hole, color, &col_start, &col_end);
568 node->mm = mm;
607 struct drm_mm *mm = node->mm;
618 drm_mm_interval_tree_remove(node, &mm->interval_tree);
640 struct drm_mm *mm = old->mm;
648 rb_replace_node_cached(&old->rb, &new->rb, &mm->interval_tree);
654 &mm->holes_size);
657 &mm->holes_addr);
699 * @mm: drm_mm to scan
715 struct drm_mm *mm,
725 DRM_MM_BUG_ON(mm->scan_active);
727 scan->mm = mm;
761 struct drm_mm *mm = scan->mm;
767 DRM_MM_BUG_ON(node->mm != mm);
771 mm->scan_active++;
787 if (mm->color_adjust)
788 mm->color_adjust(hole, scan->color, &col_start, &col_end);
854 DRM_MM_BUG_ON(node->mm != scan->mm);
858 DRM_MM_BUG_ON(!node->mm->scan_active);
859 node->mm->scan_active--;
885 * mm.color_adjust is being used.
892 struct drm_mm *mm = scan->mm;
896 DRM_MM_BUG_ON(list_empty(&mm->hole_stack));
898 if (!mm->color_adjust)
906 list_for_each_entry(hole, &mm->hole_stack, hole_stack) {
916 DRM_MM_BUG_ON(&hole->hole_stack == &mm->hole_stack);
917 if (unlikely(&hole->hole_stack == &mm->hole_stack))
923 mm->color_adjust(hole, scan->color, &hole_start, &hole_end);
934 * drm_mm_init - initialize a drm-mm allocator
935 * @mm: the drm_mm structure to initialize
936 * @start: start of the range managed by @mm
937 * @size: end of the range managed by @mm
939 * Note that @mm must be cleared to 0 before calling this function.
941 void drm_mm_init(struct drm_mm *mm, u64 start, u64 size)
945 mm->color_adjust = NULL;
947 INIT_LIST_HEAD(&mm->hole_stack);
948 mm->interval_tree = RB_ROOT_CACHED;
949 mm->holes_size = RB_ROOT_CACHED;
950 mm->holes_addr = RB_ROOT;
953 INIT_LIST_HEAD(&mm->head_node.node_list);
954 mm->head_node.flags = 0;
955 mm->head_node.mm = mm;
956 mm->head_node.start = start + size;
957 mm->head_node.size = -size;
958 add_hole(&mm->head_node);
960 mm->scan_active = 0;
966 * @mm: drm_mm allocator to clean up
971 void drm_mm_takedown(struct drm_mm *mm)
973 if (WARN(!drm_mm_clean(mm),
975 show_leaks(mm);
994 * @mm: drm_mm allocator to print
997 void drm_mm_print(const struct drm_mm *mm, struct drm_printer *p)
1002 total_free += drm_mm_dump_hole(p, &mm->head_node);
1004 drm_mm_for_each_node(entry, mm) {