Lines Matching refs:node

106 static noinline void save_stack(struct drm_mm_node *node)  in save_stack()  argument
121 node->stack = depot_save_stack(&trace, GFP_NOWAIT); in save_stack()
126 struct drm_mm_node *node; in show_leaks() local
134 list_for_each_entry(node, drm_mm_nodes(mm), node_list) { in show_leaks()
140 if (!node->stack) { in show_leaks()
142 node->start, node->size); in show_leaks()
146 depot_fetch_stack(node->stack, &trace); in show_leaks()
149 node->start, node->size, buf); in show_leaks()
158 static void save_stack(struct drm_mm_node *node) { } in save_stack() argument
162 #define START(node) ((node)->start) argument
163 #define LAST(node) ((node)->start + (node)->size - 1) argument
178 struct drm_mm_node *node) in drm_mm_interval_tree_add_node() argument
185 node->__subtree_last = LAST(node); in drm_mm_interval_tree_add_node()
191 if (parent->__subtree_last >= node->__subtree_last) in drm_mm_interval_tree_add_node()
194 parent->__subtree_last = node->__subtree_last; in drm_mm_interval_tree_add_node()
210 if (parent->__subtree_last < node->__subtree_last) in drm_mm_interval_tree_add_node()
211 parent->__subtree_last = node->__subtree_last; in drm_mm_interval_tree_add_node()
212 if (node->start < parent->start) { in drm_mm_interval_tree_add_node()
220 rb_link_node(&node->rb, rb, link); in drm_mm_interval_tree_add_node()
221 rb_insert_augmented_cached(&node->rb, &mm->interval_tree, leftmost, in drm_mm_interval_tree_add_node()
227 u64 x = expr(node); \
235 rb_link_node(&node->member, rb, link); \
236 rb_insert_color(&node->member, &root); \
248 struct drm_mm_node *node) in insert_hole_size() argument
251 u64 x = node->hole_size; in insert_hole_size()
264 rb_link_node(&node->rb_hole_size, rb, link); in insert_hole_size()
265 rb_insert_color_cached(&node->rb_hole_size, root, first); in insert_hole_size()
268 static void add_hole(struct drm_mm_node *node) in add_hole() argument
270 struct drm_mm *mm = node->mm; in add_hole()
272 node->hole_size = in add_hole()
273 __drm_mm_hole_node_end(node) - __drm_mm_hole_node_start(node); in add_hole()
274 DRM_MM_BUG_ON(!drm_mm_hole_follows(node)); in add_hole()
276 insert_hole_size(&mm->holes_size, node); in add_hole()
279 list_add(&node->hole_stack, &mm->hole_stack); in add_hole()
282 static void rm_hole(struct drm_mm_node *node) in rm_hole() argument
284 DRM_MM_BUG_ON(!drm_mm_hole_follows(node)); in rm_hole()
286 list_del(&node->hole_stack); in rm_hole()
287 rb_erase_cached(&node->rb_hole_size, &node->mm->holes_size); in rm_hole()
288 rb_erase(&node->rb_hole_addr, &node->mm->holes_addr); in rm_hole()
289 node->hole_size = 0; in rm_hole()
291 DRM_MM_BUG_ON(drm_mm_hole_follows(node)); in rm_hole()
315 struct drm_mm_node *node = in best_hole() local
318 if (size <= node->hole_size) { in best_hole()
319 best = node; in best_hole()
332 struct drm_mm_node *node = NULL; in find_hole() local
337 node = rb_hole_addr_to_node(rb); in find_hole()
338 hole_start = __drm_mm_hole_node_start(node); in find_hole()
341 rb = node->rb_hole_addr.rb_left; in find_hole()
342 else if (addr > hole_start + node->hole_size) in find_hole()
343 rb = node->rb_hole_addr.rb_right; in find_hole()
348 return node; in find_hole()
376 struct drm_mm_node *node, in next_hole() argument
382 return rb_hole_size_to_node(rb_prev(&node->rb_hole_size)); in next_hole()
385 return rb_hole_addr_to_node(rb_next(&node->rb_hole_addr)); in next_hole()
388 return rb_hole_addr_to_node(rb_prev(&node->rb_hole_addr)); in next_hole()
391 node = list_next_entry(node, hole_stack); in next_hole()
392 return &node->hole_stack == &mm->hole_stack ? NULL : node; in next_hole()
410 int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node) in drm_mm_reserve_node() argument
412 u64 end = node->start + node->size; in drm_mm_reserve_node()
417 end = node->start + node->size; in drm_mm_reserve_node()
418 if (unlikely(end <= node->start)) in drm_mm_reserve_node()
422 hole = find_hole(mm, node->start); in drm_mm_reserve_node()
430 mm->color_adjust(hole, node->color, &adj_start, &adj_end); in drm_mm_reserve_node()
432 if (adj_start > node->start || adj_end < end) in drm_mm_reserve_node()
435 node->mm = mm; in drm_mm_reserve_node()
437 list_add(&node->node_list, &hole->node_list); in drm_mm_reserve_node()
438 drm_mm_interval_tree_add_node(hole, node); in drm_mm_reserve_node()
439 node->allocated = true; in drm_mm_reserve_node()
440 node->hole_size = 0; in drm_mm_reserve_node()
443 if (node->start > hole_start) in drm_mm_reserve_node()
446 add_hole(node); in drm_mm_reserve_node()
448 save_stack(node); in drm_mm_reserve_node()
475 struct drm_mm_node * const node, in drm_mm_insert_node_in_range() argument
550 node->mm = mm; in drm_mm_insert_node_in_range()
551 node->size = size; in drm_mm_insert_node_in_range()
552 node->start = adj_start; in drm_mm_insert_node_in_range()
553 node->color = color; in drm_mm_insert_node_in_range()
554 node->hole_size = 0; in drm_mm_insert_node_in_range()
556 list_add(&node->node_list, &hole->node_list); in drm_mm_insert_node_in_range()
557 drm_mm_interval_tree_add_node(hole, node); in drm_mm_insert_node_in_range()
558 node->allocated = true; in drm_mm_insert_node_in_range()
564 add_hole(node); in drm_mm_insert_node_in_range()
566 save_stack(node); in drm_mm_insert_node_in_range()
582 void drm_mm_remove_node(struct drm_mm_node *node) in drm_mm_remove_node() argument
584 struct drm_mm *mm = node->mm; in drm_mm_remove_node()
587 DRM_MM_BUG_ON(!node->allocated); in drm_mm_remove_node()
588 DRM_MM_BUG_ON(node->scanned_block); in drm_mm_remove_node()
590 prev_node = list_prev_entry(node, node_list); in drm_mm_remove_node()
592 if (drm_mm_hole_follows(node)) in drm_mm_remove_node()
593 rm_hole(node); in drm_mm_remove_node()
595 drm_mm_interval_tree_remove(node, &mm->interval_tree); in drm_mm_remove_node()
596 list_del(&node->node_list); in drm_mm_remove_node()
597 node->allocated = false; in drm_mm_remove_node()
735 struct drm_mm_node *node) in drm_mm_scan_add_block() argument
743 DRM_MM_BUG_ON(node->mm != mm); in drm_mm_scan_add_block()
744 DRM_MM_BUG_ON(!node->allocated); in drm_mm_scan_add_block()
745 DRM_MM_BUG_ON(node->scanned_block); in drm_mm_scan_add_block()
746 node->scanned_block = true; in drm_mm_scan_add_block()
754 hole = list_prev_entry(node, node_list); in drm_mm_scan_add_block()
755 DRM_MM_BUG_ON(list_next_entry(hole, node_list) != node); in drm_mm_scan_add_block()
756 __list_del_entry(&node->node_list); in drm_mm_scan_add_block()
826 struct drm_mm_node *node) in drm_mm_scan_remove_block() argument
830 DRM_MM_BUG_ON(node->mm != scan->mm); in drm_mm_scan_remove_block()
831 DRM_MM_BUG_ON(!node->scanned_block); in drm_mm_scan_remove_block()
832 node->scanned_block = false; in drm_mm_scan_remove_block()
834 DRM_MM_BUG_ON(!node->mm->scan_active); in drm_mm_scan_remove_block()
835 node->mm->scan_active--; in drm_mm_scan_remove_block()
845 prev_node = list_prev_entry(node, node_list); in drm_mm_scan_remove_block()
847 list_next_entry(node, node_list)); in drm_mm_scan_remove_block()
848 list_add(&node->node_list, &prev_node->node_list); in drm_mm_scan_remove_block()
850 return (node->start + node->size > scan->hit_start && in drm_mm_scan_remove_block()
851 node->start < scan->hit_end); in drm_mm_scan_remove_block()