Lines Matching refs:vma

18 #define vma_iter_prealloc(vmi, vma)					\  argument
19 (fail_prealloc ? -ENOMEM : mas_preallocate(&(vmi)->mas, (vma), GFP_KERNEL))
85 static int attach_vma(struct mm_struct *mm, struct vm_area_struct *vma) in attach_vma() argument
89 res = vma_link(mm, vma); in attach_vma()
91 vma_assert_attached(vma); in attach_vma()
95 static void detach_free_vma(struct vm_area_struct *vma) in detach_free_vma() argument
97 vma_mark_detached(vma); in detach_free_vma()
98 vm_area_free(vma); in detach_free_vma()
108 struct vm_area_struct *vma = alloc_vma(mm, start, end, pgoff, vm_flags); in alloc_and_link_vma() local
110 if (vma == NULL) in alloc_and_link_vma()
113 if (attach_vma(mm, vma)) { in alloc_and_link_vma()
114 detach_free_vma(vma); in alloc_and_link_vma()
123 vma->vm_lock_seq = UINT_MAX; in alloc_and_link_vma()
125 return vma; in alloc_and_link_vma()
131 struct vm_area_struct *vma; in merge_new() local
140 vma = vma_merge_new_range(vmg); in merge_new()
141 if (vma) in merge_new()
142 vma_assert_attached(vma); in merge_new()
144 return vma; in merge_new()
153 struct vm_area_struct *vma; in merge_existing() local
155 vma = vma_merge_existing_range(vmg); in merge_existing()
156 if (vma) in merge_existing()
157 vma_assert_attached(vma); in merge_existing()
158 return vma; in merge_existing()
251 struct vm_area_struct *vma; in cleanup_mm() local
258 for_each_vma(*vmi, vma) { in cleanup_mm()
259 detach_free_vma(vma); in cleanup_mm()
269 static bool vma_write_started(struct vm_area_struct *vma) in vma_write_started() argument
271 int seq = vma->vm_lock_seq; in vma_write_started()
274 vma->vm_lock_seq = UINT_MAX; in vma_write_started()
285 static void __vma_set_dummy_anon_vma(struct vm_area_struct *vma, in __vma_set_dummy_anon_vma() argument
289 vma->anon_vma = anon_vma; in __vma_set_dummy_anon_vma()
290 INIT_LIST_HEAD(&vma->anon_vma_chain); in __vma_set_dummy_anon_vma()
291 list_add(&avc->same_vma, &vma->anon_vma_chain); in __vma_set_dummy_anon_vma()
292 avc->anon_vma = vma->anon_vma; in __vma_set_dummy_anon_vma()
295 static void vma_set_dummy_anon_vma(struct vm_area_struct *vma, in vma_set_dummy_anon_vma() argument
298 __vma_set_dummy_anon_vma(vma, avc, &dummy_anon_vma); in vma_set_dummy_anon_vma()
303 struct vm_area_struct *vma; in test_simple_merge() local
321 vma = merge_new(&vmg); in test_simple_merge()
322 ASSERT_NE(vma, NULL); in test_simple_merge()
324 ASSERT_EQ(vma->vm_start, 0); in test_simple_merge()
325 ASSERT_EQ(vma->vm_end, 0x3000); in test_simple_merge()
326 ASSERT_EQ(vma->vm_pgoff, 0); in test_simple_merge()
327 ASSERT_EQ(vma->vm_flags, vm_flags); in test_simple_merge()
329 detach_free_vma(vma); in test_simple_merge()
337 struct vm_area_struct *vma; in test_simple_modify() local
349 vma = vma_modify_flags(&vmi, init_vma, init_vma, in test_simple_modify()
351 ASSERT_NE(vma, NULL); in test_simple_modify()
353 ASSERT_EQ(vma, init_vma); in test_simple_modify()
355 ASSERT_EQ(vma->vm_start, 0x1000); in test_simple_modify()
356 ASSERT_EQ(vma->vm_end, 0x2000); in test_simple_modify()
357 ASSERT_EQ(vma->vm_pgoff, 1); in test_simple_modify()
365 vma = vma_iter_load(&vmi); in test_simple_modify()
367 ASSERT_EQ(vma->vm_start, 0); in test_simple_modify()
368 ASSERT_EQ(vma->vm_end, 0x1000); in test_simple_modify()
369 ASSERT_EQ(vma->vm_pgoff, 0); in test_simple_modify()
371 detach_free_vma(vma); in test_simple_modify()
374 vma = vma_next(&vmi); in test_simple_modify()
376 ASSERT_EQ(vma->vm_start, 0x1000); in test_simple_modify()
377 ASSERT_EQ(vma->vm_end, 0x2000); in test_simple_modify()
378 ASSERT_EQ(vma->vm_pgoff, 1); in test_simple_modify()
380 detach_free_vma(vma); in test_simple_modify()
383 vma = vma_next(&vmi); in test_simple_modify()
385 ASSERT_EQ(vma->vm_start, 0x2000); in test_simple_modify()
386 ASSERT_EQ(vma->vm_end, 0x3000); in test_simple_modify()
387 ASSERT_EQ(vma->vm_pgoff, 2); in test_simple_modify()
389 detach_free_vma(vma); in test_simple_modify()
399 struct vm_area_struct *vma = alloc_vma(&mm, 0, 0x1000, 0, vm_flags); in test_simple_expand() local
403 .target = vma, in test_simple_expand()
409 ASSERT_FALSE(attach_vma(&mm, vma)); in test_simple_expand()
413 ASSERT_EQ(vma->vm_start, 0); in test_simple_expand()
414 ASSERT_EQ(vma->vm_end, 0x3000); in test_simple_expand()
415 ASSERT_EQ(vma->vm_pgoff, 0); in test_simple_expand()
417 detach_free_vma(vma); in test_simple_expand()
427 struct vm_area_struct *vma = alloc_vma(&mm, 0, 0x3000, 0, vm_flags); in test_simple_shrink() local
430 ASSERT_FALSE(attach_vma(&mm, vma)); in test_simple_shrink()
432 ASSERT_FALSE(vma_shrink(&vmi, vma, 0, 0x1000, 0)); in test_simple_shrink()
434 ASSERT_EQ(vma->vm_start, 0); in test_simple_shrink()
435 ASSERT_EQ(vma->vm_end, 0x1000); in test_simple_shrink()
436 ASSERT_EQ(vma->vm_pgoff, 0); in test_simple_shrink()
438 detach_free_vma(vma); in test_simple_shrink()
469 struct vm_area_struct *vma, *vma_a, *vma_b, *vma_c, *vma_d; in test_merge_new() local
513 vma = try_merge_new_vma(&mm, &vmg, 0x2000, 0x3000, 2, vm_flags, &merged); in test_merge_new()
514 ASSERT_EQ(vma, vma_a); in test_merge_new()
517 ASSERT_EQ(vma->vm_start, 0); in test_merge_new()
518 ASSERT_EQ(vma->vm_end, 0x4000); in test_merge_new()
519 ASSERT_EQ(vma->vm_pgoff, 0); in test_merge_new()
520 ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); in test_merge_new()
521 ASSERT_TRUE(vma_write_started(vma)); in test_merge_new()
530 vma = try_merge_new_vma(&mm, &vmg, 0x4000, 0x5000, 4, vm_flags, &merged); in test_merge_new()
531 ASSERT_EQ(vma, vma_a); in test_merge_new()
534 ASSERT_EQ(vma->vm_start, 0); in test_merge_new()
535 ASSERT_EQ(vma->vm_end, 0x5000); in test_merge_new()
536 ASSERT_EQ(vma->vm_pgoff, 0); in test_merge_new()
537 ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); in test_merge_new()
538 ASSERT_TRUE(vma_write_started(vma)); in test_merge_new()
549 vma = try_merge_new_vma(&mm, &vmg, 0x6000, 0x7000, 6, vm_flags, &merged); in test_merge_new()
550 ASSERT_EQ(vma, vma_d); in test_merge_new()
553 ASSERT_EQ(vma->vm_start, 0x6000); in test_merge_new()
554 ASSERT_EQ(vma->vm_end, 0x9000); in test_merge_new()
555 ASSERT_EQ(vma->vm_pgoff, 6); in test_merge_new()
556 ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); in test_merge_new()
557 ASSERT_TRUE(vma_write_started(vma)); in test_merge_new()
567 vma = try_merge_new_vma(&mm, &vmg, 0x5000, 0x6000, 5, vm_flags, &merged); in test_merge_new()
568 ASSERT_EQ(vma, vma_a); in test_merge_new()
571 ASSERT_EQ(vma->vm_start, 0); in test_merge_new()
572 ASSERT_EQ(vma->vm_end, 0x9000); in test_merge_new()
573 ASSERT_EQ(vma->vm_pgoff, 0); in test_merge_new()
574 ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); in test_merge_new()
575 ASSERT_TRUE(vma_write_started(vma)); in test_merge_new()
585 vma = try_merge_new_vma(&mm, &vmg, 0xa000, 0xb000, 0xa, vm_flags, &merged); in test_merge_new()
586 ASSERT_EQ(vma, vma_c); in test_merge_new()
589 ASSERT_EQ(vma->vm_start, 0xa000); in test_merge_new()
590 ASSERT_EQ(vma->vm_end, 0xc000); in test_merge_new()
591 ASSERT_EQ(vma->vm_pgoff, 0xa); in test_merge_new()
592 ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); in test_merge_new()
593 ASSERT_TRUE(vma_write_started(vma)); in test_merge_new()
602 vma = try_merge_new_vma(&mm, &vmg, 0x9000, 0xa000, 0x9, vm_flags, &merged); in test_merge_new()
603 ASSERT_EQ(vma, vma_a); in test_merge_new()
606 ASSERT_EQ(vma->vm_start, 0); in test_merge_new()
607 ASSERT_EQ(vma->vm_end, 0xc000); in test_merge_new()
608 ASSERT_EQ(vma->vm_pgoff, 0); in test_merge_new()
609 ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); in test_merge_new()
610 ASSERT_TRUE(vma_write_started(vma)); in test_merge_new()
622 for_each_vma(vmi, vma) { in test_merge_new()
623 ASSERT_NE(vma, NULL); in test_merge_new()
624 ASSERT_EQ(vma->vm_start, 0); in test_merge_new()
625 ASSERT_EQ(vma->vm_end, 0xc000); in test_merge_new()
626 ASSERT_EQ(vma->vm_pgoff, 0); in test_merge_new()
627 ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); in test_merge_new()
629 detach_free_vma(vma); in test_merge_new()
652 struct vm_area_struct *vma_left, *vma; in test_vma_merge_special_flags() local
681 vma = merge_new(&vmg); in test_vma_merge_special_flags()
682 ASSERT_EQ(vma, NULL); in test_vma_merge_special_flags()
694 vma = alloc_and_link_vma(&mm, 0x3000, 0x4000, 3, vm_flags); in test_vma_merge_special_flags()
695 ASSERT_NE(vma, NULL); in test_vma_merge_special_flags()
696 vmg.middle = vma; in test_vma_merge_special_flags()
703 vma = merge_existing(&vmg); in test_vma_merge_special_flags()
704 ASSERT_EQ(vma, NULL); in test_vma_merge_special_flags()
724 struct vm_area_struct *vma_prev, *vma_next, *vma; in test_vma_merge_with_close() local
820 vma = alloc_and_link_vma(&mm, 0x3000, 0x5000, 3, vm_flags); in test_vma_merge_with_close()
821 vma->vm_ops = &vm_ops; in test_vma_merge_with_close()
825 vmg.middle = vma; in test_vma_merge_with_close()
847 vma = alloc_and_link_vma(&mm, 0x3000, 0x5000, 3, vm_flags); in test_vma_merge_with_close()
849 vma->vm_ops = &vm_ops; in test_vma_merge_with_close()
852 vmg.middle = vma; in test_vma_merge_with_close()
876 vma = alloc_and_link_vma(&mm, 0x3000, 0x5000, 3, vm_flags); in test_vma_merge_with_close()
878 vma->vm_ops = &vm_ops; in test_vma_merge_with_close()
882 vmg.middle = vma; in test_vma_merge_with_close()
902 vma = alloc_and_link_vma(&mm, 0x3000, 0x5000, 3, vm_flags); in test_vma_merge_with_close()
908 vmg.middle = vma; in test_vma_merge_with_close()
935 struct vm_area_struct *vma; in test_vma_merge_new_with_close() local
962 vma = merge_new(&vmg); in test_vma_merge_new_with_close()
963 ASSERT_NE(vma, NULL); in test_vma_merge_new_with_close()
965 ASSERT_EQ(vma->vm_start, 0); in test_vma_merge_new_with_close()
966 ASSERT_EQ(vma->vm_end, 0x5000); in test_vma_merge_new_with_close()
967 ASSERT_EQ(vma->vm_pgoff, 0); in test_vma_merge_new_with_close()
968 ASSERT_EQ(vma->vm_ops, &vm_ops); in test_vma_merge_new_with_close()
969 ASSERT_TRUE(vma_write_started(vma)); in test_vma_merge_new_with_close()
981 struct vm_area_struct *vma, *vma_prev, *vma_next; in test_merge_existing() local
1001 vma = alloc_and_link_vma(&mm, 0x2000, 0x6000, 2, vm_flags); in test_merge_existing()
1002 vma->vm_ops = &vm_ops; /* This should have no impact. */ in test_merge_existing()
1006 vmg.middle = vma; in test_merge_existing()
1007 vmg.prev = vma; in test_merge_existing()
1008 vma_set_dummy_anon_vma(vma, &avc); in test_merge_existing()
1015 ASSERT_EQ(vma->vm_start, 0x2000); in test_merge_existing()
1016 ASSERT_EQ(vma->vm_end, 0x3000); in test_merge_existing()
1017 ASSERT_EQ(vma->vm_pgoff, 2); in test_merge_existing()
1018 ASSERT_TRUE(vma_write_started(vma)); in test_merge_existing()
1035 vma = alloc_and_link_vma(&mm, 0x2000, 0x6000, 2, vm_flags); in test_merge_existing()
1039 vmg.middle = vma; in test_merge_existing()
1040 vma_set_dummy_anon_vma(vma, &avc); in test_merge_existing()
1065 vma = alloc_and_link_vma(&mm, 0x3000, 0x7000, 3, vm_flags); in test_merge_existing()
1066 vma->vm_ops = &vm_ops; /* This should have no impact. */ in test_merge_existing()
1069 vmg.middle = vma; in test_merge_existing()
1070 vma_set_dummy_anon_vma(vma, &avc); in test_merge_existing()
1077 ASSERT_EQ(vma->vm_start, 0x6000); in test_merge_existing()
1078 ASSERT_EQ(vma->vm_end, 0x7000); in test_merge_existing()
1079 ASSERT_EQ(vma->vm_pgoff, 6); in test_merge_existing()
1081 ASSERT_TRUE(vma_write_started(vma)); in test_merge_existing()
1099 vma = alloc_and_link_vma(&mm, 0x3000, 0x7000, 3, vm_flags); in test_merge_existing()
1102 vmg.middle = vma; in test_merge_existing()
1103 vma_set_dummy_anon_vma(vma, &avc); in test_merge_existing()
1128 vma = alloc_and_link_vma(&mm, 0x3000, 0x7000, 3, vm_flags); in test_merge_existing()
1132 vmg.middle = vma; in test_merge_existing()
1133 vma_set_dummy_anon_vma(vma, &avc); in test_merge_existing()
1162 vma = alloc_and_link_vma(&mm, 0x3000, 0x8000, 3, vm_flags); in test_merge_existing()
1166 vmg.prev = vma; in test_merge_existing()
1167 vmg.middle = vma; in test_merge_existing()
1172 vmg.prev = vma; in test_merge_existing()
1173 vmg.middle = vma; in test_merge_existing()
1178 vmg.prev = vma; in test_merge_existing()
1179 vmg.middle = vma; in test_merge_existing()
1184 vmg.prev = vma; in test_merge_existing()
1185 vmg.middle = vma; in test_merge_existing()
1190 vmg.prev = vma; in test_merge_existing()
1191 vmg.middle = vma; in test_merge_existing()
1196 vmg.prev = vma; in test_merge_existing()
1197 vmg.middle = vma; in test_merge_existing()
1211 struct vm_area_struct *vma, *vma_prev, *vma_next; in test_anon_vma_non_mergeable() local
1233 vma = alloc_and_link_vma(&mm, 0x3000, 0x7000, 3, vm_flags); in test_anon_vma_non_mergeable()
1244 vmg.middle = vma; in test_anon_vma_non_mergeable()
1305 struct vm_area_struct *vma_prev, *vma_next, *vma; in test_dup_anon_vma() local
1343 vma = alloc_and_link_vma(&mm, 0x3000, 0x5000, 3, vm_flags); in test_dup_anon_vma()
1353 vmg.middle = vma; in test_dup_anon_vma()
1376 vma = alloc_and_link_vma(&mm, 0x3000, 0x5000, 3, vm_flags); in test_dup_anon_vma()
1379 vma_set_dummy_anon_vma(vma, &dummy_anon_vma_chain); in test_dup_anon_vma()
1382 vmg.middle = vma; in test_dup_anon_vma()
1405 vma = alloc_and_link_vma(&mm, 0x3000, 0x8000, 3, vm_flags); in test_dup_anon_vma()
1407 vma_set_dummy_anon_vma(vma, &dummy_anon_vma_chain); in test_dup_anon_vma()
1410 vmg.middle = vma; in test_dup_anon_vma()
1432 vma = alloc_and_link_vma(&mm, 0, 0x5000, 0, vm_flags); in test_dup_anon_vma()
1435 vma_set_dummy_anon_vma(vma, &dummy_anon_vma_chain); in test_dup_anon_vma()
1437 vmg.prev = vma; in test_dup_anon_vma()
1438 vmg.middle = vma; in test_dup_anon_vma()
1463 struct vm_area_struct *vma_prev, *vma; in test_vmi_prealloc_fail() local
1472 vma = alloc_and_link_vma(&mm, 0x3000, 0x5000, 3, vm_flags); in test_vmi_prealloc_fail()
1473 vma->anon_vma = &dummy_anon_vma; in test_vmi_prealloc_fail()
1477 vmg.middle = vma; in test_vmi_prealloc_fail()
1478 vma_set_dummy_anon_vma(vma, &avc); in test_vmi_prealloc_fail()
1500 vma = alloc_and_link_vma(&mm, 0x3000, 0x5000, 3, vm_flags); in test_vmi_prealloc_fail()
1501 vma->anon_vma = &dummy_anon_vma; in test_vmi_prealloc_fail()
1505 vmg.next = vma; in test_vmi_prealloc_fail()
1524 struct vm_area_struct *vma; in test_merge_extend() local
1526 vma = alloc_and_link_vma(&mm, 0, 0x1000, 0, vm_flags); in test_merge_extend()
1538 ASSERT_EQ(vma_merge_extend(&vmi, vma, 0x2000), vma); in test_merge_extend()
1539 ASSERT_EQ(vma->vm_start, 0); in test_merge_extend()
1540 ASSERT_EQ(vma->vm_end, 0x4000); in test_merge_extend()
1541 ASSERT_EQ(vma->vm_pgoff, 0); in test_merge_extend()
1542 ASSERT_TRUE(vma_write_started(vma)); in test_merge_extend()
1555 struct vm_area_struct *vma, *vma_new, *vma_next; in test_copy_vma() local
1559 vma = alloc_and_link_vma(&mm, 0x3000, 0x5000, 3, vm_flags); in test_copy_vma()
1560 vma_new = copy_vma(&vma, 0, 0x2000, 0, &need_locks); in test_copy_vma()
1561 ASSERT_NE(vma_new, vma); in test_copy_vma()
1571 vma = alloc_and_link_vma(&mm, 0, 0x2000, 0, vm_flags); in test_copy_vma()
1573 vma_new = copy_vma(&vma, 0x4000, 0x2000, 4, &need_locks); in test_copy_vma()
1587 struct vm_area_struct *vma_prev, *vma; in test_expand_only_mode() local
1607 vma = vma_merge_new_range(&vmg); in test_expand_only_mode()
1608 ASSERT_NE(vma, NULL); in test_expand_only_mode()
1609 ASSERT_EQ(vma, vma_prev); in test_expand_only_mode()
1611 ASSERT_EQ(vma->vm_start, 0x3000); in test_expand_only_mode()
1612 ASSERT_EQ(vma->vm_end, 0x9000); in test_expand_only_mode()
1613 ASSERT_EQ(vma->vm_pgoff, 3); in test_expand_only_mode()
1614 ASSERT_TRUE(vma_write_started(vma)); in test_expand_only_mode()
1616 vma_assert_attached(vma); in test_expand_only_mode()
1626 struct vm_area_struct *vma; in test_mmap_region_basic() local
1657 for_each_vma(vmi, vma) { in test_mmap_region_basic()
1658 if (vma->vm_start == 0x300000) { in test_mmap_region_basic()
1659 ASSERT_EQ(vma->vm_end, 0x306000); in test_mmap_region_basic()
1660 ASSERT_EQ(vma->vm_pgoff, 0x300); in test_mmap_region_basic()
1661 } else if (vma->vm_start == 0x24d000) { in test_mmap_region_basic()
1662 ASSERT_EQ(vma->vm_end, 0x253000); in test_mmap_region_basic()
1663 ASSERT_EQ(vma->vm_pgoff, 0x24d); in test_mmap_region_basic()