Lines Matching refs:node

107 static noinline void save_stack(struct drm_mm_node *node)  in save_stack()  argument
115 node->stack = stack_depot_save(entries, n, GFP_NOWAIT); in save_stack()
120 struct drm_mm_node *node; in show_leaks() local
127 list_for_each_entry(node, drm_mm_nodes(mm), node_list) { in show_leaks()
128 if (!node->stack) { in show_leaks()
130 node->start, node->size); in show_leaks()
134 stack_depot_snprint(node->stack, buf, BUFSZ, 0); in show_leaks()
136 node->start, node->size, buf); in show_leaks()
145 static void save_stack(struct drm_mm_node *node) { } in save_stack() argument
149 #define START(node) ((node)->start) argument
150 #define LAST(node) ((node)->start + (node)->size - 1) argument
165 struct drm_mm_node *node) in drm_mm_interval_tree_add_node() argument
172 node->__subtree_last = LAST(node); in drm_mm_interval_tree_add_node()
178 if (parent->__subtree_last >= node->__subtree_last) in drm_mm_interval_tree_add_node()
181 parent->__subtree_last = node->__subtree_last; in drm_mm_interval_tree_add_node()
197 if (parent->__subtree_last < node->__subtree_last) in drm_mm_interval_tree_add_node()
198 parent->__subtree_last = node->__subtree_last; in drm_mm_interval_tree_add_node()
199 if (node->start < parent->start) { in drm_mm_interval_tree_add_node()
207 rb_link_node(&node->rb, rb, link); in drm_mm_interval_tree_add_node()
208 rb_insert_augmented_cached(&node->rb, &mm->interval_tree, leftmost, in drm_mm_interval_tree_add_node()
221 struct drm_mm_node *node) in insert_hole_size() argument
224 u64 x = node->hole_size; in insert_hole_size()
237 rb_link_node(&node->rb_hole_size, rb, link); in insert_hole_size()
238 rb_insert_color_cached(&node->rb_hole_size, root, first); in insert_hole_size()
245 static void insert_hole_addr(struct rb_root *root, struct drm_mm_node *node) in RB_DECLARE_CALLBACKS_MAX()
248 u64 start = HOLE_ADDR(node), subtree_max_hole = node->subtree_max_hole; in RB_DECLARE_CALLBACKS_MAX()
262 rb_link_node(&node->rb_hole_addr, rb_parent, link); in RB_DECLARE_CALLBACKS_MAX()
263 rb_insert_augmented(&node->rb_hole_addr, root, &augment_callbacks); in RB_DECLARE_CALLBACKS_MAX()
266 static void add_hole(struct drm_mm_node *node) in add_hole() argument
268 struct drm_mm *mm = node->mm; in add_hole()
270 node->hole_size = in add_hole()
271 __drm_mm_hole_node_end(node) - __drm_mm_hole_node_start(node); in add_hole()
272 node->subtree_max_hole = node->hole_size; in add_hole()
273 DRM_MM_BUG_ON(!drm_mm_hole_follows(node)); in add_hole()
275 insert_hole_size(&mm->holes_size, node); in add_hole()
276 insert_hole_addr(&mm->holes_addr, node); in add_hole()
278 list_add(&node->hole_stack, &mm->hole_stack); in add_hole()
281 static void rm_hole(struct drm_mm_node *node) in rm_hole() argument
283 DRM_MM_BUG_ON(!drm_mm_hole_follows(node)); in rm_hole()
285 list_del(&node->hole_stack); in rm_hole()
286 rb_erase_cached(&node->rb_hole_size, &node->mm->holes_size); in rm_hole()
287 rb_erase_augmented(&node->rb_hole_addr, &node->mm->holes_addr, in rm_hole()
289 node->hole_size = 0; in rm_hole()
290 node->subtree_max_hole = 0; in rm_hole()
292 DRM_MM_BUG_ON(drm_mm_hole_follows(node)); in rm_hole()
311 struct drm_mm_node *node = in best_hole() local
314 if (size <= node->hole_size) { in best_hole()
315 best = node; in best_hole()
333 struct drm_mm_node *node = NULL; in find_hole_addr() local
341 node = rb_hole_addr_to_node(rb); in find_hole_addr()
342 hole_start = __drm_mm_hole_node_start(node); in find_hole_addr()
345 rb = node->rb_hole_addr.rb_left; in find_hole_addr()
346 else if (addr > hole_start + node->hole_size) in find_hole_addr()
347 rb = node->rb_hole_addr.rb_right; in find_hole_addr()
352 return node; in find_hole_addr()
392 struct rb_node *parent, *node = &entry->rb_hole_addr; \
394 if (!entry || RB_EMPTY_NODE(node)) \
397 if (usable_hole_addr(node->first, size)) { \
398 node = node->first; \
399 while (usable_hole_addr(node->last, size)) \
400 node = node->last; \
401 return rb_hole_addr_to_node(node); \
404 while ((parent = rb_parent(node)) && node == parent->first) \
405 node = parent; \
415 struct drm_mm_node *node, in DECLARE_NEXT_HOLE_ADDR()
422 return rb_hole_size_to_node(rb_prev(&node->rb_hole_size)); in DECLARE_NEXT_HOLE_ADDR()
425 return next_hole_low_addr(node, size); in DECLARE_NEXT_HOLE_ADDR()
428 return next_hole_high_addr(node, size); in DECLARE_NEXT_HOLE_ADDR()
431 node = list_next_entry(node, hole_stack); in DECLARE_NEXT_HOLE_ADDR()
432 return &node->hole_stack == &mm->hole_stack ? NULL : node; in DECLARE_NEXT_HOLE_ADDR()
450 int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node) in drm_mm_reserve_node() argument
457 end = node->start + node->size; in drm_mm_reserve_node()
458 if (unlikely(end <= node->start)) in drm_mm_reserve_node()
462 hole = find_hole_addr(mm, node->start, 0); in drm_mm_reserve_node()
470 mm->color_adjust(hole, node->color, &adj_start, &adj_end); in drm_mm_reserve_node()
472 if (adj_start > node->start || adj_end < end) in drm_mm_reserve_node()
475 node->mm = mm; in drm_mm_reserve_node()
477 __set_bit(DRM_MM_NODE_ALLOCATED_BIT, &node->flags); in drm_mm_reserve_node()
478 list_add(&node->node_list, &hole->node_list); in drm_mm_reserve_node()
479 drm_mm_interval_tree_add_node(hole, node); in drm_mm_reserve_node()
480 node->hole_size = 0; in drm_mm_reserve_node()
483 if (node->start > hole_start) in drm_mm_reserve_node()
486 add_hole(node); in drm_mm_reserve_node()
488 save_stack(node); in drm_mm_reserve_node()
515 struct drm_mm_node * const node, in drm_mm_insert_node_in_range() argument
590 node->mm = mm; in drm_mm_insert_node_in_range()
591 node->size = size; in drm_mm_insert_node_in_range()
592 node->start = adj_start; in drm_mm_insert_node_in_range()
593 node->color = color; in drm_mm_insert_node_in_range()
594 node->hole_size = 0; in drm_mm_insert_node_in_range()
596 __set_bit(DRM_MM_NODE_ALLOCATED_BIT, &node->flags); in drm_mm_insert_node_in_range()
597 list_add(&node->node_list, &hole->node_list); in drm_mm_insert_node_in_range()
598 drm_mm_interval_tree_add_node(hole, node); in drm_mm_insert_node_in_range()
604 add_hole(node); in drm_mm_insert_node_in_range()
606 save_stack(node); in drm_mm_insert_node_in_range()
614 static inline bool drm_mm_node_scanned_block(const struct drm_mm_node *node) in drm_mm_node_scanned_block() argument
616 return test_bit(DRM_MM_NODE_SCANNED_BIT, &node->flags); in drm_mm_node_scanned_block()
627 void drm_mm_remove_node(struct drm_mm_node *node) in drm_mm_remove_node() argument
629 struct drm_mm *mm = node->mm; in drm_mm_remove_node()
632 DRM_MM_BUG_ON(!drm_mm_node_allocated(node)); in drm_mm_remove_node()
633 DRM_MM_BUG_ON(drm_mm_node_scanned_block(node)); in drm_mm_remove_node()
635 prev_node = list_prev_entry(node, node_list); in drm_mm_remove_node()
637 if (drm_mm_hole_follows(node)) in drm_mm_remove_node()
638 rm_hole(node); in drm_mm_remove_node()
640 drm_mm_interval_tree_remove(node, &mm->interval_tree); in drm_mm_remove_node()
641 list_del(&node->node_list); in drm_mm_remove_node()
647 clear_bit_unlock(DRM_MM_NODE_ALLOCATED_BIT, &node->flags); in drm_mm_remove_node()
781 struct drm_mm_node *node) in drm_mm_scan_add_block() argument
789 DRM_MM_BUG_ON(node->mm != mm); in drm_mm_scan_add_block()
790 DRM_MM_BUG_ON(!drm_mm_node_allocated(node)); in drm_mm_scan_add_block()
791 DRM_MM_BUG_ON(drm_mm_node_scanned_block(node)); in drm_mm_scan_add_block()
792 __set_bit(DRM_MM_NODE_SCANNED_BIT, &node->flags); in drm_mm_scan_add_block()
800 hole = list_prev_entry(node, node_list); in drm_mm_scan_add_block()
801 DRM_MM_BUG_ON(list_next_entry(hole, node_list) != node); in drm_mm_scan_add_block()
802 __list_del_entry(&node->node_list); in drm_mm_scan_add_block()
872 struct drm_mm_node *node) in drm_mm_scan_remove_block() argument
876 DRM_MM_BUG_ON(node->mm != scan->mm); in drm_mm_scan_remove_block()
877 DRM_MM_BUG_ON(!drm_mm_node_scanned_block(node)); in drm_mm_scan_remove_block()
878 __clear_bit(DRM_MM_NODE_SCANNED_BIT, &node->flags); in drm_mm_scan_remove_block()
880 DRM_MM_BUG_ON(!node->mm->scan_active); in drm_mm_scan_remove_block()
881 node->mm->scan_active--; in drm_mm_scan_remove_block()
891 prev_node = list_prev_entry(node, node_list); in drm_mm_scan_remove_block()
893 list_next_entry(node, node_list)); in drm_mm_scan_remove_block()
894 list_add(&node->node_list, &prev_node->node_list); in drm_mm_scan_remove_block()
896 return (node->start + node->size > scan->hit_start && in drm_mm_scan_remove_block()
897 node->start < scan->hit_end); in drm_mm_scan_remove_block()