• Home
  • Raw
  • Download

Lines Matching refs:mm

52 static struct drm_mm_node *drm_mm_kmalloc(struct drm_mm *mm, int atomic)  in drm_mm_kmalloc()  argument
62 spin_lock(&mm->unused_lock); in drm_mm_kmalloc()
63 if (list_empty(&mm->unused_nodes)) in drm_mm_kmalloc()
67 list_entry(mm->unused_nodes.next, in drm_mm_kmalloc()
70 --mm->num_unused; in drm_mm_kmalloc()
72 spin_unlock(&mm->unused_lock); in drm_mm_kmalloc()
82 int drm_mm_pre_get(struct drm_mm *mm) in drm_mm_pre_get() argument
86 spin_lock(&mm->unused_lock); in drm_mm_pre_get()
87 while (mm->num_unused < MM_UNUSED_TARGET) { in drm_mm_pre_get()
88 spin_unlock(&mm->unused_lock); in drm_mm_pre_get()
90 spin_lock(&mm->unused_lock); in drm_mm_pre_get()
93 int ret = (mm->num_unused < 2) ? -ENOMEM : 0; in drm_mm_pre_get()
94 spin_unlock(&mm->unused_lock); in drm_mm_pre_get()
97 ++mm->num_unused; in drm_mm_pre_get()
98 list_add_tail(&node->node_list, &mm->unused_nodes); in drm_mm_pre_get()
100 spin_unlock(&mm->unused_lock); in drm_mm_pre_get()
110 struct drm_mm *mm = hole_node->mm; in drm_mm_insert_helper() local
118 if (mm->color_adjust) in drm_mm_insert_helper()
119 mm->color_adjust(hole_node, color, &adj_start, &adj_end); in drm_mm_insert_helper()
134 node->mm = mm; in drm_mm_insert_helper()
145 list_add(&node->hole_stack, &mm->hole_stack); in drm_mm_insert_helper()
150 struct drm_mm_node *drm_mm_create_block(struct drm_mm *mm, in drm_mm_create_block() argument
160 drm_mm_for_each_hole(hole, mm, hole_start, hole_end) { in drm_mm_create_block()
164 node = drm_mm_kmalloc(mm, atomic); in drm_mm_create_block()
170 node->mm = mm; in drm_mm_create_block()
183 list_add(&node->hole_stack, &mm->hole_stack); in drm_mm_create_block()
203 node = drm_mm_kmalloc(hole_node->mm, atomic); in drm_mm_get_block_generic()
218 int drm_mm_insert_node_generic(struct drm_mm *mm, struct drm_mm_node *node, in drm_mm_insert_node_generic() argument
224 hole_node = drm_mm_search_free_generic(mm, size, alignment, in drm_mm_insert_node_generic()
234 int drm_mm_insert_node(struct drm_mm *mm, struct drm_mm_node *node, in drm_mm_insert_node() argument
237 return drm_mm_insert_node_generic(mm, node, size, alignment, 0); in drm_mm_insert_node()
247 struct drm_mm *mm = hole_node->mm; in drm_mm_insert_helper_range() local
260 if (mm->color_adjust) in drm_mm_insert_helper_range()
261 mm->color_adjust(hole_node, color, &adj_start, &adj_end); in drm_mm_insert_helper_range()
276 node->mm = mm; in drm_mm_insert_helper_range()
288 list_add(&node->hole_stack, &mm->hole_stack); in drm_mm_insert_helper_range()
303 node = drm_mm_kmalloc(hole_node->mm, atomic); in drm_mm_get_block_range_generic()
319 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
325 hole_node = drm_mm_search_free_in_range_generic(mm, in drm_mm_insert_node_in_range_generic()
338 int drm_mm_insert_node_in_range(struct drm_mm *mm, struct drm_mm_node *node, in drm_mm_insert_node_in_range() argument
342 return drm_mm_insert_node_in_range_generic(mm, node, size, alignment, 0, start, end); in drm_mm_insert_node_in_range()
351 struct drm_mm *mm = node->mm; in drm_mm_remove_node() local
371 list_add(&prev_node->hole_stack, &mm->hole_stack); in drm_mm_remove_node()
373 list_move(&prev_node->hole_stack, &mm->hole_stack); in drm_mm_remove_node()
388 struct drm_mm *mm = node->mm; in drm_mm_put_block() local
392 spin_lock(&mm->unused_lock); in drm_mm_put_block()
393 if (mm->num_unused < MM_UNUSED_TARGET) { in drm_mm_put_block()
394 list_add(&node->node_list, &mm->unused_nodes); in drm_mm_put_block()
395 ++mm->num_unused; in drm_mm_put_block()
398 spin_unlock(&mm->unused_lock); in drm_mm_put_block()
417 struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm, in drm_mm_search_free_generic() argument
429 BUG_ON(mm->scanned_blocks); in drm_mm_search_free_generic()
434 drm_mm_for_each_hole(entry, mm, adj_start, adj_end) { in drm_mm_search_free_generic()
435 if (mm->color_adjust) { in drm_mm_search_free_generic()
436 mm->color_adjust(entry, color, &adj_start, &adj_end); in drm_mm_search_free_generic()
457 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
471 BUG_ON(mm->scanned_blocks); in drm_mm_search_free_in_range_generic()
476 drm_mm_for_each_hole(entry, mm, adj_start, adj_end) { in drm_mm_search_free_in_range_generic()
482 if (mm->color_adjust) { in drm_mm_search_free_in_range_generic()
483 mm->color_adjust(entry, color, &adj_start, &adj_end); in drm_mm_search_free_in_range_generic()
512 new->mm = old->mm; in drm_mm_replace_node()
531 void drm_mm_init_scan(struct drm_mm *mm, in drm_mm_init_scan() argument
536 mm->scan_color = color; in drm_mm_init_scan()
537 mm->scan_alignment = alignment; in drm_mm_init_scan()
538 mm->scan_size = size; in drm_mm_init_scan()
539 mm->scanned_blocks = 0; in drm_mm_init_scan()
540 mm->scan_hit_start = 0; in drm_mm_init_scan()
541 mm->scan_hit_end = 0; in drm_mm_init_scan()
542 mm->scan_check_range = 0; in drm_mm_init_scan()
543 mm->prev_scanned_node = NULL; in drm_mm_init_scan()
556 void drm_mm_init_scan_with_range(struct drm_mm *mm, in drm_mm_init_scan_with_range() argument
563 mm->scan_color = color; in drm_mm_init_scan_with_range()
564 mm->scan_alignment = alignment; in drm_mm_init_scan_with_range()
565 mm->scan_size = size; in drm_mm_init_scan_with_range()
566 mm->scanned_blocks = 0; in drm_mm_init_scan_with_range()
567 mm->scan_hit_start = 0; in drm_mm_init_scan_with_range()
568 mm->scan_hit_end = 0; in drm_mm_init_scan_with_range()
569 mm->scan_start = start; in drm_mm_init_scan_with_range()
570 mm->scan_end = end; in drm_mm_init_scan_with_range()
571 mm->scan_check_range = 1; in drm_mm_init_scan_with_range()
572 mm->prev_scanned_node = NULL; in drm_mm_init_scan_with_range()
584 struct drm_mm *mm = node->mm; in drm_mm_scan_add_block() local
589 mm->scanned_blocks++; in drm_mm_scan_add_block()
601 node->node_list.next = &mm->prev_scanned_node->node_list; in drm_mm_scan_add_block()
602 mm->prev_scanned_node = node; in drm_mm_scan_add_block()
607 if (mm->scan_check_range) { in drm_mm_scan_add_block()
608 if (adj_start < mm->scan_start) in drm_mm_scan_add_block()
609 adj_start = mm->scan_start; in drm_mm_scan_add_block()
610 if (adj_end > mm->scan_end) in drm_mm_scan_add_block()
611 adj_end = mm->scan_end; in drm_mm_scan_add_block()
614 if (mm->color_adjust) in drm_mm_scan_add_block()
615 mm->color_adjust(prev_node, mm->scan_color, in drm_mm_scan_add_block()
619 mm->scan_size, mm->scan_alignment)) { in drm_mm_scan_add_block()
620 mm->scan_hit_start = hole_start; in drm_mm_scan_add_block()
621 mm->scan_hit_end = hole_end; in drm_mm_scan_add_block()
645 struct drm_mm *mm = node->mm; in drm_mm_scan_remove_block() local
648 mm->scanned_blocks--; in drm_mm_scan_remove_block()
659 return (drm_mm_hole_node_end(node) > mm->scan_hit_start && in drm_mm_scan_remove_block()
660 node->start < mm->scan_hit_end); in drm_mm_scan_remove_block()
664 int drm_mm_clean(struct drm_mm * mm) in drm_mm_clean() argument
666 struct list_head *head = &mm->head_node.node_list; in drm_mm_clean()
672 int drm_mm_init(struct drm_mm * mm, unsigned long start, unsigned long size) in drm_mm_init() argument
674 INIT_LIST_HEAD(&mm->hole_stack); in drm_mm_init()
675 INIT_LIST_HEAD(&mm->unused_nodes); in drm_mm_init()
676 mm->num_unused = 0; in drm_mm_init()
677 mm->scanned_blocks = 0; in drm_mm_init()
678 spin_lock_init(&mm->unused_lock); in drm_mm_init()
681 INIT_LIST_HEAD(&mm->head_node.node_list); in drm_mm_init()
682 INIT_LIST_HEAD(&mm->head_node.hole_stack); in drm_mm_init()
683 mm->head_node.hole_follows = 1; in drm_mm_init()
684 mm->head_node.scanned_block = 0; in drm_mm_init()
685 mm->head_node.scanned_prev_free = 0; in drm_mm_init()
686 mm->head_node.scanned_next_free = 0; in drm_mm_init()
687 mm->head_node.mm = mm; in drm_mm_init()
688 mm->head_node.start = start + size; in drm_mm_init()
689 mm->head_node.size = start - mm->head_node.start; in drm_mm_init()
690 list_add_tail(&mm->head_node.hole_stack, &mm->hole_stack); in drm_mm_init()
692 mm->color_adjust = NULL; in drm_mm_init()
698 void drm_mm_takedown(struct drm_mm * mm) in drm_mm_takedown() argument
702 if (!list_empty(&mm->head_node.node_list)) { in drm_mm_takedown()
707 spin_lock(&mm->unused_lock); in drm_mm_takedown()
708 list_for_each_entry_safe(entry, next, &mm->unused_nodes, node_list) { in drm_mm_takedown()
711 --mm->num_unused; in drm_mm_takedown()
713 spin_unlock(&mm->unused_lock); in drm_mm_takedown()
715 BUG_ON(mm->num_unused != 0); in drm_mm_takedown()
719 void drm_mm_debug_table(struct drm_mm *mm, const char *prefix) in drm_mm_debug_table() argument
725 hole_start = drm_mm_hole_node_start(&mm->head_node); in drm_mm_debug_table()
726 hole_end = drm_mm_hole_node_end(&mm->head_node); in drm_mm_debug_table()
734 drm_mm_for_each_node(entry, mm) { in drm_mm_debug_table()
774 int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm) in drm_mm_dump_table() argument
779 total_free += drm_mm_dump_hole(m, &mm->head_node); in drm_mm_dump_table()
781 drm_mm_for_each_node(entry, mm) { in drm_mm_dump_table()