Lines Matching refs:mm
46 static bool assert_no_holes(struct kunit *test, const struct drm_mm *mm) in assert_no_holes() argument
53 drm_mm_for_each_hole(hole, mm, hole_start, hole_end) in assert_no_holes()
61 drm_mm_for_each_node(hole, mm) { in assert_no_holes()
71 static bool assert_one_hole(struct kunit *test, const struct drm_mm *mm, u64 start, u64 end) in assert_one_hole() argument
82 drm_mm_for_each_hole(hole, mm, hole_start, hole_end) { in assert_one_hole()
100 static bool assert_continuous(struct kunit *test, const struct drm_mm *mm, u64 size) in assert_continuous() argument
106 if (!assert_no_holes(test, mm)) in assert_continuous()
111 drm_mm_for_each_node(node, mm) { in assert_continuous()
130 drm_mm_for_each_node_in_range(check, mm, addr, addr + size) { in assert_continuous()
162 static bool assert_node(struct kunit *test, struct drm_mm_node *node, struct drm_mm *mm, in assert_node() argument
167 if (!drm_mm_node_allocated(node) || node->mm != mm) { in assert_node()
197 struct drm_mm mm; in drm_test_mm_init() local
201 memset(&mm, 0, sizeof(mm)); in drm_test_mm_init()
202 KUNIT_ASSERT_FALSE_MSG(test, drm_mm_initialized(&mm), in drm_test_mm_init()
205 memset(&mm, 0xff, sizeof(mm)); in drm_test_mm_init()
206 drm_mm_init(&mm, 0, size); in drm_test_mm_init()
207 if (!drm_mm_initialized(&mm)) { in drm_test_mm_init()
212 if (!drm_mm_clean(&mm)) { in drm_test_mm_init()
218 if (!assert_one_hole(test, &mm, 0, size)) { in drm_test_mm_init()
226 if (drm_mm_reserve_node(&mm, &tmp)) { in drm_test_mm_init()
232 if (!assert_no_holes(test, &mm)) { in drm_test_mm_init()
239 if (!assert_one_hole(test, &mm, 0, size)) { in drm_test_mm_init()
245 drm_mm_takedown(&mm); in drm_test_mm_init()
250 struct drm_mm mm; in drm_test_mm_debug() local
257 drm_mm_init(&mm, 0, 4096); in drm_test_mm_debug()
262 KUNIT_ASSERT_FALSE_MSG(test, drm_mm_reserve_node(&mm, &nodes[0]), in drm_test_mm_debug()
268 KUNIT_ASSERT_FALSE_MSG(test, drm_mm_reserve_node(&mm, &nodes[1]), in drm_test_mm_debug()
281 static bool expect_reserve_fail(struct kunit *test, struct drm_mm *mm, struct drm_mm_node *node) in expect_reserve_fail() argument
285 err = drm_mm_reserve_node(mm, node); in expect_reserve_fail()
301 static bool noinline_for_stack check_reserve_boundaries(struct kunit *test, struct drm_mm *mm, in check_reserve_boundaries() argument
333 if (!expect_reserve_fail(test, mm, set_node(&tmp, boundaries[n].start, in check_reserve_boundaries()
347 struct drm_mm mm; in __drm_test_mm_reserve() local
370 drm_mm_init(&mm, 0, count * size); in __drm_test_mm_reserve()
372 if (!check_reserve_boundaries(test, &mm, count, size)) in __drm_test_mm_reserve()
379 err = drm_mm_reserve_node(&mm, &nodes[n]); in __drm_test_mm_reserve()
393 if (!expect_reserve_fail(test, &mm, &nodes[n])) in __drm_test_mm_reserve()
398 if (!assert_continuous(test, &mm, size)) in __drm_test_mm_reserve()
404 if (!expect_reserve_fail(test, &mm, set_node(&tmp, order[n] * size, 1))) in __drm_test_mm_reserve()
409 err = drm_mm_reserve_node(&mm, &nodes[order[n]]); in __drm_test_mm_reserve()
418 if (!assert_continuous(test, &mm, size)) in __drm_test_mm_reserve()
423 if (!expect_reserve_fail(test, &mm, set_node(&tmp, 0, size * count))) in __drm_test_mm_reserve()
427 if (!expect_reserve_fail(test, &mm, set_node(&tmp, size * n, size * (count - n)))) in __drm_test_mm_reserve()
440 err = drm_mm_reserve_node(&mm, node); in __drm_test_mm_reserve()
451 if (!assert_continuous(test, &mm, size)) in __drm_test_mm_reserve()
457 drm_mm_for_each_node_safe(node, next, &mm) in __drm_test_mm_reserve()
459 drm_mm_takedown(&mm); in __drm_test_mm_reserve()
482 static bool expect_insert(struct kunit *test, struct drm_mm *mm, in expect_insert() argument
488 err = drm_mm_insert_node_generic(mm, node, in expect_insert()
498 if (!assert_node(test, node, mm, size, alignment, color)) { in expect_insert()
506 static bool expect_insert_fail(struct kunit *test, struct drm_mm *mm, u64 size) in expect_insert_fail() argument
511 err = drm_mm_insert_node(mm, &tmp, size); in expect_insert_fail()
531 struct drm_mm mm; in __drm_test_mm_insert() local
550 drm_mm_init(&mm, 0, count * size); in __drm_test_mm_insert()
558 if (!expect_insert(test, &mm, node, size, 0, n, mode)) { in __drm_test_mm_insert()
573 if (!assert_node(test, &nodes[n], &mm, size, 0, n)) { in __drm_test_mm_insert()
590 if (!assert_continuous(test, &mm, size)) in __drm_test_mm_insert()
594 if (!expect_insert_fail(test, &mm, size)) in __drm_test_mm_insert()
602 if (!expect_insert(test, &mm, &nodes[n], size, 0, n, mode)) { in __drm_test_mm_insert()
615 if (!assert_continuous(test, &mm, size)) in __drm_test_mm_insert()
628 if (!expect_insert(test, &mm, node, size, 0, n, mode)) { in __drm_test_mm_insert()
638 if (!assert_continuous(test, &mm, size)) in __drm_test_mm_insert()
641 if (!expect_insert_fail(test, &mm, size)) in __drm_test_mm_insert()
645 drm_mm_for_each_node_safe(node, next, &mm) in __drm_test_mm_insert()
647 DRM_MM_BUG_ON(!drm_mm_clean(&mm)); in __drm_test_mm_insert()
654 drm_mm_for_each_node_safe(node, next, &mm) in __drm_test_mm_insert()
656 drm_mm_takedown(&mm); in __drm_test_mm_insert()
701 static bool expect_insert_in_range(struct kunit *test, struct drm_mm *mm, struct drm_mm_node *node, in expect_insert_in_range() argument
707 err = drm_mm_insert_node_in_range(mm, node, in expect_insert_in_range()
719 if (!assert_node(test, node, mm, size, alignment, color)) { in expect_insert_in_range()
727 static bool expect_insert_in_range_fail(struct kunit *test, struct drm_mm *mm, in expect_insert_in_range_fail() argument
733 err = drm_mm_insert_node_in_range(mm, &tmp, size, 0, 0, range_start, range_end, in expect_insert_in_range_fail()
752 static bool assert_contiguous_in_range(struct kunit *test, struct drm_mm *mm, in assert_contiguous_in_range() argument
758 if (!expect_insert_in_range_fail(test, mm, size, start, end)) in assert_contiguous_in_range()
762 drm_mm_for_each_node(node, mm) { in assert_contiguous_in_range()
791 node = __drm_mm_interval_first(mm, 0, start - 1); in assert_contiguous_in_range()
800 node = __drm_mm_interval_first(mm, end, U64_MAX); in assert_contiguous_in_range()
815 struct drm_mm mm; in __drm_test_mm_insert_range() local
833 drm_mm_init(&mm, 0, count * size); in __drm_test_mm_insert_range()
840 if (!expect_insert_in_range(test, &mm, &nodes[n], size, size, n, in __drm_test_mm_insert_range()
849 if (!assert_contiguous_in_range(test, &mm, size, start, end)) { in __drm_test_mm_insert_range()
861 if (!expect_insert_in_range(test, &mm, &nodes[n], size, size, n, in __drm_test_mm_insert_range()
875 if (!assert_contiguous_in_range(test, &mm, size, start, end)) { in __drm_test_mm_insert_range()
882 drm_mm_for_each_node_safe(node, next, &mm) in __drm_test_mm_insert_range()
884 DRM_MM_BUG_ON(!drm_mm_clean(&mm)); in __drm_test_mm_insert_range()
891 drm_mm_for_each_node_safe(node, next, &mm) in __drm_test_mm_insert_range()
893 drm_mm_takedown(&mm); in __drm_test_mm_insert_range()
900 struct drm_mm mm; in insert_outside_range() local
905 drm_mm_init(&mm, start, size); in insert_outside_range()
907 if (!expect_insert_in_range_fail(test, &mm, 1, 0, start)) in insert_outside_range()
910 if (!expect_insert_in_range_fail(test, &mm, size, in insert_outside_range()
914 if (!expect_insert_in_range_fail(test, &mm, size, in insert_outside_range()
918 if (!expect_insert_in_range_fail(test, &mm, 1, end, end + size)) in insert_outside_range()
921 drm_mm_takedown(&mm); in insert_outside_range()
950 static int prepare_frag(struct kunit *test, struct drm_mm *mm, struct drm_mm_node *nodes, in prepare_frag() argument
957 if (!expect_insert(test, mm, &nodes[i], size, 0, i, mode) != 0) { in prepare_frag()
972 static u64 get_insert_time(struct kunit *test, struct drm_mm *mm, in get_insert_time() argument
982 if (!expect_insert(test, mm, &nodes[i], size, 0, i, mode) != 0) { in get_insert_time()
993 struct drm_mm mm; in drm_test_mm_frag() local
1012 drm_mm_init(&mm, 1, U64_MAX - 2); in drm_test_mm_frag()
1020 if (prepare_frag(test, &mm, nodes, insert_size, mode)) in drm_test_mm_frag()
1023 insert_time1 = get_insert_time(test, &mm, insert_size, in drm_test_mm_frag()
1028 insert_time2 = get_insert_time(test, &mm, (insert_size * 2), in drm_test_mm_frag()
1042 drm_mm_for_each_node_safe(node, next, &mm) in drm_test_mm_frag()
1047 drm_mm_for_each_node_safe(node, next, &mm) in drm_test_mm_frag()
1049 drm_mm_takedown(&mm); in drm_test_mm_frag()
1057 struct drm_mm mm; in drm_test_mm_align() local
1069 drm_mm_init(&mm, 1, U64_MAX - 2); in drm_test_mm_align()
1077 if (!expect_insert(test, &mm, &nodes[i], size, prime, i, mode)) { in drm_test_mm_align()
1086 drm_mm_for_each_node_safe(node, next, &mm) in drm_test_mm_align()
1088 DRM_MM_BUG_ON(!drm_mm_clean(&mm)); in drm_test_mm_align()
1094 drm_mm_for_each_node_safe(node, next, &mm) in drm_test_mm_align()
1096 drm_mm_takedown(&mm); in drm_test_mm_align()
1102 struct drm_mm mm; in drm_test_mm_align_pot() local
1108 drm_mm_init(&mm, 1, U64_MAX - 2); in drm_test_mm_align_pot()
1121 if (!expect_insert(test, &mm, node, size, align, bit, &insert_modes[0])) { in drm_test_mm_align_pot()
1130 drm_mm_for_each_node_safe(node, next, &mm) { in drm_test_mm_align_pot()
1134 drm_mm_takedown(&mm); in drm_test_mm_align_pot()
1153 static void show_holes(struct kunit *test, const struct drm_mm *mm, int count) in show_holes() argument
1158 drm_mm_for_each_hole(hole, mm, hole_start, hole_end) { in show_holes()
1232 static bool evict_nothing(struct kunit *test, struct drm_mm *mm, in evict_nothing() argument
1241 drm_mm_scan_init(&scan, mm, 1, 0, 0, 0); in evict_nothing()
1261 drm_mm_for_each_node(node, mm) { in evict_nothing()
1275 return assert_continuous(test, mm, nodes[0].node.size); in evict_nothing()
1278 static bool evict_everything(struct kunit *test, struct drm_mm *mm, in evict_everything() argument
1287 drm_mm_scan_init(&scan, mm, total_size, 0, 0, 0); in evict_everything()
1311 if (!assert_one_hole(test, mm, 0, total_size)) in evict_everything()
1315 err = drm_mm_reserve_node(mm, &e->node); in evict_everything()
1323 return assert_continuous(test, mm, nodes[0].node.size); in evict_everything()
1326 static int evict_something(struct kunit *test, struct drm_mm *mm, in evict_something() argument
1337 drm_mm_scan_init_with_range(&scan, mm, size, alignment, 0, range_start, in evict_something()
1343 err = drm_mm_insert_node_generic(mm, &tmp, size, alignment, 0, in evict_something()
1349 show_holes(test, mm, 3); in evict_something()
1360 if (!assert_node(test, &tmp, mm, size, alignment, 0) || in evict_something()
1374 err = drm_mm_reserve_node(mm, &e->node); in evict_something()
1382 if (!assert_continuous(test, mm, nodes[0].node.size)) { in evict_something()
1395 struct drm_mm mm; in drm_test_mm_evict() local
1414 drm_mm_init(&mm, 0, size); in drm_test_mm_evict()
1416 if (drm_mm_insert_node(&mm, &nodes[n].node, 1)) { in drm_test_mm_evict()
1423 if (!evict_nothing(test, &mm, size, nodes)) { in drm_test_mm_evict()
1427 if (!evict_everything(test, &mm, size, nodes)) { in drm_test_mm_evict()
1435 if (evict_something(test, &mm, 0, U64_MAX, nodes, order, size, n, 1, in drm_test_mm_evict()
1445 if (evict_something(test, &mm, 0, U64_MAX, nodes, order, size, in drm_test_mm_evict()
1460 if (evict_something(test, &mm, 0, U64_MAX, nodes, order, size, in drm_test_mm_evict()
1473 drm_mm_for_each_node_safe(node, next, &mm) in drm_test_mm_evict()
1475 drm_mm_takedown(&mm); in drm_test_mm_evict()
1489 struct drm_mm mm; in drm_test_mm_evict_range() local
1505 drm_mm_init(&mm, 0, size); in drm_test_mm_evict_range()
1507 if (drm_mm_insert_node(&mm, &nodes[n].node, 1)) { in drm_test_mm_evict_range()
1516 if (evict_something(test, &mm, range_start, range_end, nodes, in drm_test_mm_evict_range()
1527 if (evict_something(test, &mm, range_start, range_end, nodes, in drm_test_mm_evict_range()
1542 if (evict_something(test, &mm, range_start, range_end, nodes, in drm_test_mm_evict_range()
1555 drm_mm_for_each_node_safe(node, next, &mm) in drm_test_mm_evict_range()
1557 drm_mm_takedown(&mm); in drm_test_mm_evict_range()
1576 struct drm_mm mm; in drm_test_mm_topdown() local
1597 drm_mm_init(&mm, 0, size * count); in drm_test_mm_topdown()
1599 if (!expect_insert(test, &mm, &nodes[n], size, 0, n, topdown)) { in drm_test_mm_topdown()
1611 if (!assert_one_hole(test, &mm, 0, size * (count - n - 1))) in drm_test_mm_topdown()
1615 if (!assert_continuous(test, &mm, size)) in drm_test_mm_topdown()
1630 if (!expect_insert(test, &mm, node, size, 0, 0, topdown)) { in drm_test_mm_topdown()
1658 drm_mm_for_each_node_safe(node, next, &mm) in drm_test_mm_topdown()
1660 DRM_MM_BUG_ON(!drm_mm_clean(&mm)); in drm_test_mm_topdown()
1665 drm_mm_for_each_node_safe(node, next, &mm) in drm_test_mm_topdown()
1667 drm_mm_takedown(&mm); in drm_test_mm_topdown()
1683 struct drm_mm mm; in drm_test_mm_bottomup() local
1703 drm_mm_init(&mm, 0, size * count); in drm_test_mm_bottomup()
1705 if (!expect_insert(test, &mm, &nodes[n], size, 0, n, bottomup)) { in drm_test_mm_bottomup()
1711 if (!assert_one_hole(test, &mm, size * (n + 1), size * count)) in drm_test_mm_bottomup()
1715 if (!assert_continuous(test, &mm, size)) in drm_test_mm_bottomup()
1730 if (!expect_insert(test, &mm, node, size, 0, 0, bottomup)) { in drm_test_mm_bottomup()
1750 drm_mm_for_each_node_safe(node, next, &mm) in drm_test_mm_bottomup()
1752 DRM_MM_BUG_ON(!drm_mm_clean(&mm)); in drm_test_mm_bottomup()
1757 drm_mm_for_each_node_safe(node, next, &mm) in drm_test_mm_bottomup()
1759 drm_mm_takedown(&mm); in drm_test_mm_bottomup()
1769 struct drm_mm mm; in drm_test_mm_once() local
1772 drm_mm_init(&mm, 0, 7); in drm_test_mm_once()
1777 if (drm_mm_reserve_node(&mm, &rsvd_lo)) { in drm_test_mm_once()
1785 if (drm_mm_reserve_node(&mm, &rsvd_hi)) { in drm_test_mm_once()
1796 if (drm_mm_insert_node_generic(&mm, &node, 2, 0, 0, mode)) { in drm_test_mm_once()
1807 drm_mm_takedown(&mm); in drm_test_mm_once()
1850 struct drm_mm mm; in drm_test_mm_color() local
1861 drm_mm_init(&mm, 0, U64_MAX); in drm_test_mm_color()
1868 if (!expect_insert(test, &mm, node, n, 0, n, &insert_modes[0])) { in drm_test_mm_color()
1875 drm_mm_for_each_node_safe(node, nn, &mm) { in drm_test_mm_color()
1888 mm.color_adjust = separate_adjacent_colors; in drm_test_mm_color()
1899 if (drm_mm_reserve_node(&mm, node)) { in drm_test_mm_color()
1917 if (drm_mm_reserve_node(&mm, node) != -ENOSPC) { in drm_test_mm_color()
1926 if (drm_mm_reserve_node(&mm, node)) { in drm_test_mm_color()
1939 if (!expect_insert(test, &mm, node, n, n, n, mode)) { in drm_test_mm_color()
1946 drm_mm_for_each_node_safe(node, nn, &mm) { in drm_test_mm_color()
1976 drm_mm_for_each_node_safe(node, nn, &mm) { in drm_test_mm_color()
1980 drm_mm_takedown(&mm); in drm_test_mm_color()
1983 static int evict_color(struct kunit *test, struct drm_mm *mm, u64 range_start, in evict_color() argument
1994 drm_mm_scan_init_with_range(&scan, mm, size, alignment, color, range_start, in evict_color()
2000 err = drm_mm_insert_node_generic(mm, &tmp, size, alignment, color, in evict_color()
2007 show_holes(test, mm, 3); in evict_color()
2021 if (!assert_node(test, &tmp, mm, size, alignment, color)) { in evict_color()
2033 err = drm_mm_reserve_node(mm, &e->node); in evict_color()
2051 struct drm_mm mm; in drm_test_mm_color_evict() local
2069 drm_mm_init(&mm, 0, 2 * total_size - 1); in drm_test_mm_color_evict()
2070 mm.color_adjust = separate_adjacent_colors; in drm_test_mm_color_evict()
2072 if (!expect_insert(test, &mm, &nodes[n].node, in drm_test_mm_color_evict()
2083 if (evict_color(test, &mm, 0, U64_MAX, nodes, order, total_size, in drm_test_mm_color_evict()
2092 if (evict_color(test, &mm, 0, U64_MAX, nodes, order, total_size, in drm_test_mm_color_evict()
2106 if (evict_color(test, &mm, 0, U64_MAX, nodes, order, total_size, in drm_test_mm_color_evict()
2118 drm_mm_for_each_node_safe(node, next, &mm) in drm_test_mm_color_evict()
2120 drm_mm_takedown(&mm); in drm_test_mm_color_evict()
2135 struct drm_mm mm; in drm_test_mm_color_evict_range() local
2151 drm_mm_init(&mm, 0, 2 * total_size - 1); in drm_test_mm_color_evict_range()
2152 mm.color_adjust = separate_adjacent_colors; in drm_test_mm_color_evict_range()
2154 if (!expect_insert(test, &mm, &nodes[n].node, in drm_test_mm_color_evict_range()
2165 if (evict_color(test, &mm, range_start, range_end, nodes, order, in drm_test_mm_color_evict_range()
2176 if (evict_color(test, &mm, range_start, range_end, nodes, order, in drm_test_mm_color_evict_range()
2191 if (evict_color(test, &mm, range_start, range_end, nodes, order, in drm_test_mm_color_evict_range()
2204 drm_mm_for_each_node_safe(node, next, &mm) in drm_test_mm_color_evict_range()
2206 drm_mm_takedown(&mm); in drm_test_mm_color_evict_range()