/kernel/linux/linux-5.10/mm/ |
H A D | rmap.c | 29 * anon_vma->rwsem 44 * anon_vma->rwsem,mapping->i_mutex (memory_failure, collect_procs_anon) 86 static inline struct anon_vma *anon_vma_alloc(void) in anon_vma_alloc() 88 struct anon_vma *anon_vma; in anon_vma_alloc() local 90 anon_vma = kmem_cache_alloc(anon_vma_cachep, GFP_KERNEL); in anon_vma_alloc() 91 if (anon_vma) { in anon_vma_alloc() 92 atomic_set(&anon_vma->refcount, 1); in anon_vma_alloc() 93 anon_vma->num_children = 0; in anon_vma_alloc() 94 anon_vma in anon_vma_alloc() 106 anon_vma_free(struct anon_vma *anon_vma) anon_vma_free() argument 146 anon_vma_chain_link(struct vm_area_struct *vma, struct anon_vma_chain *avc, struct anon_vma *anon_vma) anon_vma_chain_link() argument 187 struct anon_vma *anon_vma, *allocated; __anon_vma_prepare() local 240 lock_anon_vma_root(struct anon_vma *root, struct anon_vma *anon_vma) lock_anon_vma_root() argument 282 struct anon_vma *anon_vma; anon_vma_clone() local 333 struct anon_vma *anon_vma; anon_vma_fork() local 402 struct anon_vma *anon_vma = avc->anon_vma; unlink_anon_vmas() local 436 struct anon_vma *anon_vma = avc->anon_vma; unlink_anon_vmas() local 449 struct anon_vma *anon_vma = data; anon_vma_ctor() local 491 struct anon_vma *anon_vma = NULL; page_get_anon_vma() local 534 struct anon_vma *anon_vma = NULL; page_lock_anon_vma_read() local 594 page_unlock_anon_vma_read(struct anon_vma *anon_vma) page_unlock_anon_vma_read() argument 1029 struct anon_vma *anon_vma = vma->anon_vma; page_move_anon_rmap() local 1055 struct anon_vma *anon_vma = vma->anon_vma; __page_set_anon_rmap() local 1850 __put_anon_vma(struct anon_vma *anon_vma) __put_anon_vma() argument 1862 struct anon_vma *anon_vma; rmap_walk_anon_lock() local 1898 struct anon_vma *anon_vma; rmap_walk_anon() local 2021 struct anon_vma *anon_vma = vma->anon_vma; hugepage_add_anon_rmap() local [all...] |
H A D | mmap.c | 405 struct anon_vma *anon_vma = vma->anon_vma; in validate_mm() local 408 if (anon_vma) { in validate_mm() 409 anon_vma_lock_read(anon_vma); in validate_mm() 412 anon_vma_unlock_read(anon_vma); in validate_mm() 503 * vma has some anon_vma assigned, and is already inserted on that 504 * anon_vma's interval trees. 507 * vma must be removed from the anon_vma's interval trees using 514 * the root anon_vma' 754 struct anon_vma *anon_vma = NULL; __vma_adjust() local 1088 can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags, struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff, struct vm_userfaultfd_ctx vm_userfaultfd_ctx, struct anon_vma_name *anon_name) can_vma_merge_before() argument 1110 can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags, struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff, struct vm_userfaultfd_ctx vm_userfaultfd_ctx, struct anon_vma_name *anon_name) can_vma_merge_after() argument 1169 vma_merge(struct mm_struct *mm, struct vm_area_struct *prev, unsigned long addr, unsigned long end, unsigned long vm_flags, struct anon_vma *anon_vma, struct file *file, pgoff_t pgoff, struct mempolicy *policy, struct vm_userfaultfd_ctx vm_userfaultfd_ctx, struct anon_vma_name *anon_name) vma_merge() argument 1307 struct anon_vma *anon_vma = READ_ONCE(old->anon_vma); reusable_anon_vma() local 1325 struct anon_vma *anon_vma = NULL; find_mergeable_anon_vma() local 3611 vm_lock_anon_vma(struct mm_struct *mm, struct anon_vma *anon_vma) vm_lock_anon_vma() argument 3729 vm_unlock_anon_vma(struct anon_vma *anon_vma) vm_unlock_anon_vma() argument [all...] |
H A D | ksm.c | 187 * @anon_vma: pointer to anon_vma for this mm,address, when in stable tree 199 struct anon_vma *anon_vma; /* when stable */ member 530 if (!(vma->vm_flags & VM_MERGEABLE) || !vma->anon_vma) in find_mergeable_vma() 543 * to undo, we also need to drop a reference to the anon_vma. in break_cow() 545 put_anon_vma(rmap_item->anon_vma); in break_cow() 647 put_anon_vma(rmap_item->anon_vma); in remove_node_from_stable_tree() 797 put_anon_vma(rmap_item->anon_vma); in remove_rmap_item_from_tree() 986 if (!(vma->vm_flags & VM_MERGEABLE) || !vma->anon_vma) in unmerge_and_remove_all_rmap_items() 2577 struct anon_vma *anon_vma = page_anon_vma(page); ksm_might_need_to_copy() local 2628 struct anon_vma *anon_vma = rmap_item->anon_vma; rmap_walk_ksm() local [all...] |
H A D | huge_memory.c | 1278 VM_BUG_ON_VMA(!vma->anon_vma, vma); in do_huge_pmd_wp_page() 1414 struct anon_vma *anon_vma = NULL; in do_huge_pmd_numa_page() local 1479 * Page is misplaced. Page lock serialises migrations. Acquire anon_vma in do_huge_pmd_numa_page() 1484 anon_vma = page_lock_anon_vma_read(page); in do_huge_pmd_numa_page() 1496 if (unlikely(!anon_vma)) { in do_huge_pmd_numa_page() 1557 if (anon_vma) in do_huge_pmd_numa_page() 1558 page_unlock_anon_vma_read(anon_vma); in do_huge_pmd_numa_page() 2572 * anon_vma of the transparent hugepage can become the vma->anon_vma 2654 struct anon_vma *anon_vma = NULL; split_huge_page_to_list() local [all...] |
H A D | migrate.c | 1043 struct anon_vma *anon_vma = NULL; in __unmap_and_move() local 1091 * we cannot notice that anon_vma is freed while we migrates a page. in __unmap_and_move() 1092 * This get_anon_vma() delays freeing anon_vma pointer until the end in __unmap_and_move() 1098 * getting a hold on an anon_vma from outside one of its mms. in __unmap_and_move() 1099 * But if we cannot get anon_vma, then we won't need it anyway, in __unmap_and_move() 1104 anon_vma = page_get_anon_vma(page); in __unmap_and_move() 1142 VM_BUG_ON_PAGE(PageAnon(page) && !PageKsm(page) && !anon_vma, in __unmap_and_move() 1158 /* Drop an anon_vma reference if we took one */ in __unmap_and_move() 1159 if (anon_vma) in __unmap_and_move() 1300 struct anon_vma *anon_vma = NULL; unmap_and_move_huge_page() local [all...] |
H A D | mremap.c | 88 if (vma->anon_vma) in take_rmap_locks() 89 anon_vma_lock_write(vma->anon_vma); in take_rmap_locks() 94 if (vma->anon_vma) in drop_rmap_locks() 95 anon_vma_unlock_write(vma->anon_vma); in drop_rmap_locks() 127 * When need_rmap_locks is true, we take the i_mmap_rwsem and anon_vma in move_ptes()
|
H A D | khugepaged.c | 466 if (!vma->anon_vma || vma->vm_ops) in hugepage_vma_check() 992 if (!vma->anon_vma || vma->vm_ops) in hugepage_vma_revalidate() 1130 * handled by the anon_vma lock + PG_lock. in collapse_huge_page() 1140 anon_vma_lock_write(vma->anon_vma); in collapse_huge_page() 1179 anon_vma_unlock_write(vma->anon_vma); in collapse_huge_page() 1185 * All pages are isolated and locked so anon_vma rmap in collapse_huge_page() 1188 anon_vma_unlock_write(vma->anon_vma); in collapse_huge_page() 1538 if (vma->anon_vma) in collapse_pte_mapped_thp() 1539 anon_vma_lock_write(vma->anon_vma); in collapse_pte_mapped_thp() 1550 if (vma->anon_vma) in collapse_pte_mapped_thp() [all...] |
H A D | debug.c | 207 "prot %lx anon_vma %px vm_ops %px\n" in dump_vma() 213 vma->anon_vma, vma->vm_ops, vma->vm_pgoff, in dump_vma()
|
H A D | mlock.c | 541 *prev = vma_merge(mm, *prev, start, end, newflags, vma->anon_vma, in mlock_fixup()
|
/kernel/linux/linux-5.10/include/linux/ |
H A D | rmap.h | 16 * The anon_vma heads a list of private "related" vmas, to scan if 17 * an anonymous page pointing to this anon_vma needs to be unmapped: 22 * directly to a vma: instead it points to an anon_vma, on whose list 26 * the anon_vma object itself: we're guaranteed no page can be 27 * pointing to this anon_vma once its vma list is empty. 29 struct anon_vma { struct 30 struct anon_vma *root; /* Root of this anon_vma tree */ 33 * The refcount is taken on an anon_vma when there is no 37 * anon_vma i 82 struct anon_vma *anon_vma; global() member 108 get_anon_vma(struct anon_vma *anon_vma) get_anon_vma() argument 115 put_anon_vma(struct anon_vma *anon_vma) put_anon_vma() argument 121 anon_vma_lock_write(struct anon_vma *anon_vma) anon_vma_lock_write() argument 126 anon_vma_unlock_write(struct anon_vma *anon_vma) anon_vma_unlock_write() argument 131 anon_vma_lock_read(struct anon_vma *anon_vma) anon_vma_lock_read() argument 136 anon_vma_unlock_read(struct anon_vma *anon_vma) anon_vma_unlock_read() argument [all...] |
H A D | mm_types.h | 367 * A file's MAP_PRIVATE vma can be in both i_mmap tree and anon_vma 370 * or brk vma (with NULL file) can only be in an anon_vma list. 374 struct anon_vma *anon_vma; /* Serialized by page_table_lock */ member
|
H A D | mm.h | 36 struct anon_vma; 1593 extern struct anon_vma *page_anon_vma(struct page *page); 2580 unsigned long vm_flags, struct anon_vma *, struct file *, pgoff_t, 2582 extern struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *);
|
/kernel/linux/linux-6.6/mm/ |
H A D | rmap.c | 30 * anon_vma->rwsem 45 * anon_vma->rwsem,mapping->i_mmap_rwsem (memory_failure, collect_procs_anon) 91 static inline struct anon_vma *anon_vma_alloc(void) in anon_vma_alloc() 93 struct anon_vma *anon_vma; in anon_vma_alloc() local 95 anon_vma = kmem_cache_alloc(anon_vma_cachep, GFP_KERNEL); in anon_vma_alloc() 96 if (anon_vma) { in anon_vma_alloc() 97 atomic_set(&anon_vma->refcount, 1); in anon_vma_alloc() 98 anon_vma->num_children = 0; in anon_vma_alloc() 99 anon_vma in anon_vma_alloc() 111 anon_vma_free(struct anon_vma *anon_vma) anon_vma_free() argument 151 anon_vma_chain_link(struct vm_area_struct *vma, struct anon_vma_chain *avc, struct anon_vma *anon_vma) anon_vma_chain_link() argument 192 struct anon_vma *anon_vma, *allocated; __anon_vma_prepare() local 245 lock_anon_vma_root(struct anon_vma *root, struct anon_vma *anon_vma) lock_anon_vma_root() argument 288 struct anon_vma *anon_vma; anon_vma_clone() local 339 struct anon_vma *anon_vma; anon_vma_fork() local 408 struct anon_vma *anon_vma = avc->anon_vma; unlink_anon_vmas() local 442 struct anon_vma *anon_vma = avc->anon_vma; unlink_anon_vmas() local 455 struct anon_vma *anon_vma = data; anon_vma_ctor() local 497 struct anon_vma *anon_vma = NULL; folio_get_anon_vma() local 542 struct anon_vma *anon_vma = NULL; folio_lock_anon_vma_read() local 1119 void *anon_vma = vma->anon_vma; page_move_anon_rmap() local 1146 struct anon_vma *anon_vma = vma->anon_vma; __page_set_anon_rmap() local 2389 __put_anon_vma(struct anon_vma *anon_vma) __put_anon_vma() argument 2401 struct anon_vma *anon_vma; rmap_walk_anon_lock() local 2443 struct anon_vma *anon_vma; rmap_walk_anon() local 2575 struct anon_vma *anon_vma = vma->anon_vma; hugepage_add_anon_rmap() local [all...] |
H A D | mmap.c | 297 struct anon_vma *anon_vma = vma->anon_vma; in validate_mm() local 321 if (anon_vma) { in validate_mm() 322 anon_vma_lock_read(anon_vma); in validate_mm() 325 anon_vma_unlock_read(anon_vma); in validate_mm() 342 * vma has some anon_vma assigned, and is already inserted on that 343 * anon_vma's interval trees. 346 * vma must be removed from the anon_vma's interval trees using 353 * the root anon_vma' 779 can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags, struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff, struct vm_userfaultfd_ctx vm_userfaultfd_ctx, struct anon_vma_name *anon_name) can_vma_merge_before() argument 802 can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags, struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff, struct vm_userfaultfd_ctx vm_userfaultfd_ctx, struct anon_vma_name *anon_name) can_vma_merge_after() argument 869 vma_merge(struct vma_iterator *vmi, struct mm_struct *mm, struct vm_area_struct *prev, unsigned long addr, unsigned long end, unsigned long vm_flags, struct anon_vma *anon_vma, struct file *file, pgoff_t pgoff, struct mempolicy *policy, struct vm_userfaultfd_ctx vm_userfaultfd_ctx, struct anon_vma_name *anon_name) vma_merge() argument 1094 struct anon_vma *anon_vma = READ_ONCE(old->anon_vma); reusable_anon_vma() local 1113 struct anon_vma *anon_vma = NULL; find_mergeable_anon_vma() local 3624 vm_lock_anon_vma(struct mm_struct *mm, struct anon_vma *anon_vma) vm_lock_anon_vma() argument 3759 vm_unlock_anon_vma(struct anon_vma *anon_vma) vm_unlock_anon_vma() argument [all...] |
H A D | migrate.c | 1041 struct anon_vma *anon_vma) in __migrate_folio_record() 1043 dst->private = (void *)anon_vma + old_page_state; in __migrate_folio_record() 1048 struct anon_vma **anon_vmap) in __migrate_folio_extract() 1052 *anon_vmap = (struct anon_vma *)(private & ~PAGE_OLD_STATES); in __migrate_folio_extract() 1060 struct anon_vma *anon_vma, in migrate_folio_undo_src() 1066 /* Drop an anon_vma reference if we took one */ in migrate_folio_undo_src() 1067 if (anon_vma) in migrate_folio_undo_src() 1068 put_anon_vma(anon_vma); in migrate_folio_undo_src() 1039 __migrate_folio_record(struct folio *dst, int old_page_state, struct anon_vma *anon_vma) __migrate_folio_record() argument 1058 migrate_folio_undo_src(struct folio *src, int page_was_mapped, struct anon_vma *anon_vma, bool locked, struct list_head *ret) migrate_folio_undo_src() argument 1114 struct anon_vma *anon_vma = NULL; migrate_folio_unmap() local 1275 struct anon_vma *anon_vma = NULL; migrate_folio_move() local 1372 struct anon_vma *anon_vma = NULL; unmap_and_move_huge_page() local 1809 struct anon_vma *anon_vma = NULL; migrate_pages_batch() local [all...] |
H A D | ksm.c | 188 * @anon_vma: pointer to anon_vma for this mm,address, when in stable tree 200 struct anon_vma *anon_vma; /* when stable */ member 562 if (!vma || !(vma->vm_flags & VM_MERGEABLE) || !vma->anon_vma) in find_mergeable_vma() 575 * to undo, we also need to drop a reference to the anon_vma. in break_cow() 577 put_anon_vma(rmap_item->anon_vma); in break_cow() 687 put_anon_vma(rmap_item->anon_vma); in remove_node_from_stable_tree() 839 put_anon_vma(rmap_item->anon_vma); in remove_rmap_item_from_tree() 1043 if (!(vma->vm_flags & VM_MERGEABLE) || !vma->anon_vma) in unmerge_and_remove_all_rmap_items() 2797 struct anon_vma *anon_vma = folio_anon_vma(folio); ksm_might_need_to_copy() local 2857 struct anon_vma *anon_vma = rmap_item->anon_vma; rmap_walk_ksm() local [all...] |
H A D | mremap.c | 109 if (vma->anon_vma) in take_rmap_locks() 110 anon_vma_lock_write(vma->anon_vma); in take_rmap_locks() 115 if (vma->anon_vma) in drop_rmap_locks() 116 anon_vma_unlock_write(vma->anon_vma); in drop_rmap_locks() 149 * When need_rmap_locks is true, we take the i_mmap_rwsem and anon_vma in move_ptes() 706 * anon_vma links of the old vma is no longer needed after its page in move_vma() 1057 extension_end, vma->vm_flags, vma->anon_vma, in SYSCALL_DEFINE5()
|
H A D | huge_memory.c | 143 * though anon_vma is not initialized yet. in hugepage_vma_check() 145 * Allow page fault since anon_vma may be not initialized until in hugepage_vma_check() 148 if (!vma->anon_vma) in hugepage_vma_check() 1299 VM_BUG_ON_VMA(!vma->anon_vma, vma); in do_huge_pmd_wp_page() 2621 * Returns -EBUSY if the page is pinned or if anon_vma disappeared from under 2629 struct anon_vma *anon_vma = NULL; in split_huge_page_to_list() local 2650 * prevent the anon_vma disappearing so we first we take a in split_huge_page_to_list() 2651 * reference to it and then lock the anon_vma for write. This in split_huge_page_to_list() 2656 anon_vma in split_huge_page_to_list() [all...] |
H A D | internal.h | 719 struct anon_vma *folio_anon_vma(struct folio *folio); 1293 struct anon_vma *anon_vma; member
|
H A D | debug.c | 151 "prot %lx anon_vma %px vm_ops %px\n" in dump_vma() 156 vma->anon_vma, vma->vm_ops, vma->vm_pgoff, in dump_vma()
|
H A D | khugepaged.c | 936 if (expect_anon && (!(*vmap)->anon_vma || !vma_is_anonymous(*vmap))) in hugepage_vma_revalidate() 1137 * handled by the anon_vma lock + PG_lock. in collapse_huge_page() 1149 anon_vma_lock_write(vma->anon_vma); in collapse_huge_page() 1190 anon_vma_unlock_write(vma->anon_vma); in collapse_huge_page() 1195 * All pages are isolated and locked so anon_vma rmap in collapse_huge_page() 1198 anon_vma_unlock_write(vma->anon_vma); in collapse_huge_page() 1694 * Check vma->anon_vma to exclude MAP_PRIVATE mappings that in retract_page_tables() 1698 if (READ_ONCE(vma->anon_vma)) in retract_page_tables() 1734 * must remain empty; and we have already skipped anon_vma in retract_page_tables() 1738 * repeating the anon_vma chec in retract_page_tables() [all...] |
/kernel/linux/linux-6.6/include/linux/ |
H A D | rmap.h | 18 * The anon_vma heads a list of private "related" vmas, to scan if 19 * an anonymous page pointing to this anon_vma needs to be unmapped: 24 * directly to a vma: instead it points to an anon_vma, on whose list 28 * the anon_vma object itself: we're guaranteed no page can be 29 * pointing to this anon_vma once its vma list is empty. 31 struct anon_vma { struct 32 struct anon_vma *root; /* Root of this anon_vma tree */ 35 * The refcount is taken on an anon_vma when there is no 39 * anon_vma i 84 struct anon_vma *anon_vma; global() member 106 get_anon_vma(struct anon_vma *anon_vma) get_anon_vma() argument 113 put_anon_vma(struct anon_vma *anon_vma) put_anon_vma() argument 119 anon_vma_lock_write(struct anon_vma *anon_vma) anon_vma_lock_write() argument 124 anon_vma_unlock_write(struct anon_vma *anon_vma) anon_vma_unlock_write() argument 129 anon_vma_lock_read(struct anon_vma *anon_vma) anon_vma_lock_read() argument 134 anon_vma_trylock_read(struct anon_vma *anon_vma) anon_vma_trylock_read() argument 139 anon_vma_unlock_read(struct anon_vma *anon_vma) anon_vma_unlock_read() argument [all...] |
H A D | mm_types.h | 265 * @mapping: The file this page belongs to, or refers to the anon_vma for 625 * A file's MAP_PRIVATE vma can be in both i_mmap tree and anon_vma 628 * or brk vma (with NULL file) can only be in an anon_vma list. 632 struct anon_vma *anon_vma; /* Serialized by page_table_lock */ member
|
/kernel/linux/linux-5.10/fs/ |
H A D | userfaultfd.c | 870 new_flags, vma->anon_vma, in userfaultfd_release() 1412 vma->anon_vma, vma->vm_file, vma->vm_pgoff, in userfaultfd_register() 1583 vma->anon_vma, vma->vm_file, vma->vm_pgoff, in userfaultfd_unregister()
|
/kernel/linux/linux-6.6/fs/ |
H A D | userfaultfd.c | 926 new_flags, vma->anon_vma, in userfaultfd_release() 1483 vma->anon_vma, vma->vm_file, pgoff, in userfaultfd_register() 1669 vma->anon_vma, vma->vm_file, pgoff, in userfaultfd_unregister()
|