| /linux/mm/ |
| H A D | rmap.c | 90 static inline struct anon_vma *anon_vma_alloc(void) in anon_vma_alloc() 92 struct anon_vma *anon_vma; in anon_vma_alloc() local 94 anon_vma = kmem_cache_alloc(anon_vma_cachep, GFP_KERNEL); in anon_vma_alloc() 95 if (anon_vma) { in anon_vma_alloc() 96 atomic_set(&anon_vma->refcount, 1); in anon_vma_alloc() 97 anon_vma->num_children = 0; in anon_vma_alloc() 98 anon_vma->num_active_vmas = 0; in anon_vma_alloc() 99 anon_vma->parent = anon_vma; in anon_vma_alloc() 104 anon_vma->root = anon_vma; in anon_vma_alloc() 107 return anon_vma; in anon_vma_alloc() [all …]
|
| H A D | interval_tree.c | 99 struct anon_vma *anon_vma) in INTERVAL_TREE_DEFINE() 105 __anon_rmap_tree_insert(avc, &anon_vma->rb_root); in INTERVAL_TREE_DEFINE() 109 struct anon_vma *anon_vma) in anon_rmap_tree_remove() argument 111 __anon_rmap_tree_remove(avc, &anon_vma->rb_root); in anon_rmap_tree_remove() 115 anon_rmap_tree_iter_first(struct anon_vma *anon_vma, in anon_rmap_tree_iter_first() argument 118 return __anon_rmap_tree_iter_first(&anon_vma->rb_root, in anon_rmap_tree_iter_first()
|
| H A D | vma.c | 103 return vma && vma->anon_vma && !list_is_singular(&vma->anon_vma_chain); in vma_is_fork_child() 132 struct anon_vma *tgt_anon = tgt->anon_vma; in is_mergeable_anon_vma() 133 struct anon_vma *src_anon = vmg->anon_vma; in is_mergeable_anon_vma() 140 VM_WARN_ON(src && src_anon != src->anon_vma); in is_mergeable_anon_vma() 176 vp->anon_vma = vma->anon_vma; in init_multi_vma_prep() 193 if (!vp->anon_vma && adjust) in init_multi_vma_prep() 194 vp->anon_vma = adjust->anon_vma; in init_multi_vma_prep() 196 VM_WARN_ON(vp->anon_vma && adjust && adjust->anon_vma && in init_multi_vma_prep() 197 vp->anon_vma != adjust->anon_vma); in init_multi_vma_prep() 321 anon_rmap_tree_remove(avc, avc->anon_vma); in anon_rmap_tree_pre_update_vma() [all …]
|
| H A D | internal.h | 280 static inline void get_anon_vma(struct anon_vma *anon_vma) in get_anon_vma() argument 282 atomic_inc(&anon_vma->refcount); in get_anon_vma() 285 void __put_anon_vma(struct anon_vma *anon_vma); 287 static inline void put_anon_vma(struct anon_vma *anon_vma) in put_anon_vma() argument 289 if (atomic_dec_and_test(&anon_vma->refcount)) in put_anon_vma() 290 __put_anon_vma(anon_vma); in put_anon_vma() 293 static inline void anon_vma_lock_write(struct anon_vma *anon_vma) in anon_vma_lock_write() argument 295 down_write(&anon_vma->root->rwsem); in anon_vma_lock_write() 298 static inline int anon_vma_trylock_write(struct anon_vma *anon_vma) in anon_vma_trylock_write() argument 300 return down_write_trylock(&anon_vma->root->rwsem); in anon_vma_trylock_write() [all …]
|
| H A D | migrate.c | 1157 int old_folio_state, struct anon_vma *anon_vma) in __migrate_folio_record() argument 1159 dst->migrate_info = (unsigned long)anon_vma | old_folio_state; in __migrate_folio_record() 1163 int *old_folio_state, struct anon_vma **anon_vmap) in __migrate_folio_extract() 1167 *anon_vmap = (struct anon_vma *)(info & ~FOLIO_OLD_STATES); in __migrate_folio_extract() 1174 struct anon_vma *anon_vma, bool locked, struct list_head *ret) in migrate_folio_undo_src() argument 1179 if (anon_vma) in migrate_folio_undo_src() 1180 put_anon_vma(anon_vma); in migrate_folio_undo_src() 1221 struct anon_vma *anon_vma = NULL; in migrate_folio_unmap() local 1298 anon_vma = folio_get_anon_vma(src); in migrate_folio_unmap() 1313 __migrate_folio_record(dst, old_folio_state, anon_vma); in migrate_folio_unmap() [all …]
|
| H A D | vma.h | 25 struct anon_vma *anon_vma; member 115 struct anon_vma *anon_vma; member 274 if (vma->anon_vma) in assert_sane_pgoff() 350 .anon_vma = vma_->anon_vma, \ 540 struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *vma);
|
| H A D | ksm.c | 205 struct anon_vma *anon_vma; /* for reverse mapping, when stable */ member 780 if (!vma || !(vma->vm_flags & VM_MERGEABLE) || !vma->anon_vma) in find_mergeable_vma() 800 put_anon_vma(rmap_item->anon_vma); in break_cow() 917 put_anon_vma(rmap_item->anon_vma); in remove_node_from_stable_tree() 1071 put_anon_vma(rmap_item->anon_vma); in remove_rmap_item_from_tree() 1243 if (!(vma->vm_flags & VM_MERGEABLE) || !vma->anon_vma) in unmerge_and_remove_all_rmap_items() 1626 rmap_item->anon_vma = vma->anon_vma; in try_to_merge_with_ksm_page() 1628 get_anon_vma(vma->anon_vma); in try_to_merge_with_ksm_page() 2693 if (!vma->anon_vma) in scan_get_next_rmap_item() 2884 if (vma->anon_vma) { in __ksm_del_vma() [all …]
|
| H A D | vma_init.c | 52 dest->anon_vma = src->anon_vma; in vm_area_init_from()
|
| H A D | mremap.c | 147 if (vma->anon_vma) in take_rmap_locks() 148 anon_vma_lock_write(vma->anon_vma); in take_rmap_locks() 153 if (vma->anon_vma) in drop_rmap_locks() 154 anon_vma_unlock_write(vma->anon_vma); in drop_rmap_locks()
|
| H A D | huge_memory.c | 267 if (!vma->anon_vma) in __thp_vma_allowable_orders() 2177 VM_BUG_ON_VMA(!vma->anon_vma, vma); in do_huge_pmd_wp_page() 4154 struct anon_vma *anon_vma = NULL; in __folio_split() local 4197 anon_vma = folio_get_anon_vma(folio); in __folio_split() 4198 if (!anon_vma) { in __folio_split() 4202 anon_vma_lock_write(anon_vma); in __folio_split() 4234 anon_vma = NULL; in __folio_split() 4323 if (anon_vma) { in __folio_split() 4324 anon_vma_unlock_write(anon_vma); in __folio_split() 4325 put_anon_vma(anon_vma); in __folio_split()
|
| H A D | khugepaged.c | 1097 if (expect_anon && (!(*vmap)->anon_vma || !vma_is_anonymous(*vmap))) in hugepage_vma_revalidate() 1359 anon_vma_lock_write(vma->anon_vma); in collapse_huge_page() 1417 anon_vma_unlock_write(vma->anon_vma); in collapse_huge_page() 1463 anon_vma_unlock_write(vma->anon_vma); in collapse_huge_page() 2103 if (READ_ONCE(vma->anon_vma)) in file_backed_vma_is_retractable()
|
| H A D | madvise.c | 1156 VM_WARN_ON_ONCE(!vma->anon_vma && in madvise_guard_install() 1619 prepares_anon_vma(madv_behavior->behavior) && !vma->anon_vma) in is_vma_lock_sufficient()
|
| /linux/tools/testing/vma/include/ |
| H A D | custom.h | 26 struct anon_vma { 27 struct anon_vma *root; 37 /* For testing purposes, indicate that the anon_vma was unlinked. */ struct 38 vma->anon_vma->was_unlinked = true; argument 58 /* For testing purposes. We indicate that an anon_vma has been cloned. */ 59 if (src->anon_vma != NULL) { in vma_start_write_killable() 60 dst->anon_vma = src->anon_vma; in vma_start_write_killable() 61 dst->anon_vma->was_cloned = true; in vma_start_write_killable() 69 struct anon_vma *anon_vm in anon_vma_clone() 48 was_unlinkedanon_vma unlink_anon_vmas() argument 80 struct anon_vma *anon_vma = calloc(1, sizeof(struct anon_vma)); __anon_vma_prepare() local [all...] |
| H A D | stubs.h | 17 struct anon_vma; 135 static inline void anon_vma_unlock_write(struct anon_vma *anon_vma) in anon_vma_unlock_write() argument 275 struct anon_vma *anon_vma) in anon_vma_interval_tree_insert() 280 struct anon_vma *anon_vma) in anon_vma_interval_tree_remove() 297 static inline void anon_vma_lock_write(struct anon_vma *anon_vma) in anon_vma_lock_write() argument
|
| H A D | dup.h | 57 struct anon_vma *anon_vma; member 590 struct anon_vma *anon_vma; /* Serialized by page_table_lock */ member
|
| /linux/tools/testing/vma/ |
| H A D | shared.c | 12 struct anon_vma dummy_anon_vma; 101 struct anon_vma_chain *avc, struct anon_vma *anon_vma) in __vma_set_dummy_anon_vma() argument 103 vma->anon_vma = anon_vma; in __vma_set_dummy_anon_vma() 106 avc->anon_vma = vma->anon_vma; in __vma_set_dummy_anon_vma()
|
| H A D | shared.h | 85 extern struct anon_vma dummy_anon_vma; 122 * Helper function to reset the dummy anon_vma to indicate it has not been 137 struct anon_vma_chain *avc, struct anon_vma *anon_vma); 139 /* Provide a simple dummy VMA/anon_vma dummy setup for testing. */
|
| /linux/tools/testing/vma/tests/ |
| H A D | merge.c | 61 struct anon_vma *anon_vma) in vmg_set_range_anon_vma() argument 64 vmg->anon_vma = anon_vma; in vmg_set_range_anon_vma() 262 .anon_vma = &dummy_anon_vma, in __test_merge_new() 265 .anon_vma = &dummy_anon_vma, in __test_merge_new() 268 .anon_vma = &dummy_anon_vma, in __test_merge_new() 271 .anon_vma = &dummy_anon_vma, in __test_merge_new() 329 vma_b->anon_vma = &dummy_anon_vma; in __test_merge_new() 337 ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); in __test_merge_new() 357 ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); in __test_merge_new() 369 vma_d->anon_vma = &dummy_anon_vma; in __test_merge_new() [all …]
|
| /linux/include/linux/ |
| H A D | rmap.h | 32 struct anon_vma { struct 33 struct anon_vma *root; /* Root of this anon_vma tree */ argument 55 struct anon_vma *parent; /* Parent of this anon_vma */ argument 85 struct anon_vma *anon_vma; member 393 struct anon_vma *anon_vma; in __folio_rmap_sanity_checks() local 395 anon_vma = (void *)(mapping - FOLIO_MAPPING_ANON); in __folio_rmap_sanity_checks() 396 VM_WARN_ON_FOLIO(atomic_read(&anon_vma->refcount) == 0, folio); in __folio_rmap_sanity_checks() 964 struct anon_vma *(*anon_lock)(const struct folio *folio, 971 struct anon_vma *folio_lock_anon_vma_read(const struct folio *folio,
|
| H A D | mm.h | 43 struct anon_vma; 4198 struct anon_vma *anon_vma); 4200 struct anon_vma *anon_vma); 4202 anon_rmap_tree_iter_first(struct anon_vma *anon_vma, 4211 #define anon_rmap_tree_foreach(avc, anon_vma, pgoff_start, pgoff_last) \ argument 4212 for (avc = anon_rmap_tree_iter_first(anon_vma, pgoff_start, pgoff_last); \
|
| H A D | mm_types.h | 983 struct anon_vma *anon_vma; /* Serialized by page_table_lock */ member
|
| /linux/Documentation/translations/zh_CN/admin-guide/mm/ |
| H A D | ksm.rst | 194 制,因为do_swap_page()不能做所有的锁,而需要重组一个跨anon_vma的KSM页。
|
| /linux/Documentation/translations/zh_TW/admin-guide/mm/ |
| H A D | ksm.rst | 194 制,因爲do_swap_page()不能做所有的鎖,而需要重組一個跨anon_vma的KSM頁。
|
| /linux/Documentation/admin-guide/mm/ |
| H A D | ksm.rst | 290 cannot do all the locking needed to reconstitute a cross-anon_vma KSM page.
|
| /linux/fs/ |
| H A D | coredump.c | 1632 if ((!IS_ENABLED(CONFIG_MMU) || vma->anon_vma) && FILTER(ANON_PRIVATE)) in vma_dump_size()
|