Lines Matching refs:vma
127 static void anon_vma_chain_link(struct vm_area_struct *vma, in anon_vma_chain_link() argument
131 avc->vma = vma; in anon_vma_chain_link()
133 list_add(&avc->same_vma, &vma->anon_vma_chain); in anon_vma_chain_link()
164 int anon_vma_prepare(struct vm_area_struct *vma) in anon_vma_prepare() argument
166 struct anon_vma *anon_vma = vma->anon_vma; in anon_vma_prepare()
171 struct mm_struct *mm = vma->vm_mm; in anon_vma_prepare()
178 anon_vma = find_mergeable_anon_vma(vma); in anon_vma_prepare()
190 if (likely(!vma->anon_vma)) { in anon_vma_prepare()
191 vma->anon_vma = anon_vma; in anon_vma_prepare()
192 anon_vma_chain_link(vma, avc, anon_vma); in anon_vma_prepare()
306 int anon_vma_fork(struct vm_area_struct *vma, struct vm_area_struct *pvma) in anon_vma_fork() argument
317 vma->anon_vma = NULL; in anon_vma_fork()
323 error = anon_vma_clone(vma, pvma); in anon_vma_fork()
328 if (vma->anon_vma) in anon_vma_fork()
352 vma->anon_vma = anon_vma; in anon_vma_fork()
354 anon_vma_chain_link(vma, avc, anon_vma); in anon_vma_fork()
363 unlink_anon_vmas(vma); in anon_vma_fork()
367 void unlink_anon_vmas(struct vm_area_struct *vma) in unlink_anon_vmas() argument
376 list_for_each_entry_safe(avc, next, &vma->anon_vma_chain, same_vma) { in unlink_anon_vmas()
394 if (vma->anon_vma) in unlink_anon_vmas()
395 vma->anon_vma->degree--; in unlink_anon_vmas()
403 list_for_each_entry_safe(avc, next, &vma->anon_vma_chain, same_vma) { in unlink_anon_vmas()
567 __vma_address(struct page *page, struct vm_area_struct *vma) in __vma_address() argument
570 return vma->vm_start + ((pgoff - vma->vm_pgoff) << PAGE_SHIFT); in __vma_address()
574 vma_address(struct page *page, struct vm_area_struct *vma) in vma_address() argument
576 unsigned long address = __vma_address(page, vma); in vma_address()
579 VM_BUG_ON_VMA(address < vma->vm_start || address >= vma->vm_end, vma); in vma_address()
588 unsigned long page_address_in_vma(struct page *page, struct vm_area_struct *vma) in page_address_in_vma() argument
597 if (!vma->anon_vma || !page__anon_vma || in page_address_in_vma()
598 vma->anon_vma->root != page__anon_vma->root) in page_address_in_vma()
601 if (!vma->vm_file || vma->vm_file->f_mapping != page->mapping) in page_address_in_vma()
605 address = __vma_address(page, vma); in page_address_in_vma()
606 if (unlikely(address < vma->vm_start || address >= vma->vm_end)) in page_address_in_vma()
697 int page_mapped_in_vma(struct page *page, struct vm_area_struct *vma) in page_mapped_in_vma() argument
703 address = __vma_address(page, vma); in page_mapped_in_vma()
704 if (unlikely(address < vma->vm_start || address >= vma->vm_end)) in page_mapped_in_vma()
706 pte = page_check_address(page, vma->vm_mm, address, &ptl, 1); in page_mapped_in_vma()
723 static int page_referenced_one(struct page *page, struct vm_area_struct *vma, in page_referenced_one() argument
726 struct mm_struct *mm = vma->vm_mm; in page_referenced_one()
743 if (vma->vm_flags & VM_LOCKED) { in page_referenced_one()
750 if (pmdp_clear_flush_young_notify(vma, address, pmd)) in page_referenced_one()
764 if (vma->vm_flags & VM_LOCKED) { in page_referenced_one()
770 if (ptep_clear_flush_young_notify(vma, address, pte)) { in page_referenced_one()
778 if (likely(!(vma->vm_flags & VM_SEQ_READ))) in page_referenced_one()
786 pra->vm_flags |= vma->vm_flags; in page_referenced_one()
796 static bool invalid_page_referenced_vma(struct vm_area_struct *vma, void *arg) in invalid_page_referenced_vma() argument
801 if (!mm_match_cgroup(vma->vm_mm, memcg)) in invalid_page_referenced_vma()
865 static int page_mkclean_one(struct page *page, struct vm_area_struct *vma, in page_mkclean_one() argument
868 struct mm_struct *mm = vma->vm_mm; in page_mkclean_one()
881 flush_cache_page(vma, address, pte_pfn(*pte)); in page_mkclean_one()
882 entry = ptep_clear_flush(vma, address, pte); in page_mkclean_one()
899 static bool invalid_mkclean_vma(struct vm_area_struct *vma, void *arg) in invalid_mkclean_vma() argument
901 if (vma->vm_flags & VM_SHARED) in invalid_mkclean_vma()
944 struct vm_area_struct *vma, unsigned long address) in page_move_anon_rmap() argument
946 struct anon_vma *anon_vma = vma->anon_vma; in page_move_anon_rmap()
949 VM_BUG_ON_VMA(!anon_vma, vma); in page_move_anon_rmap()
950 VM_BUG_ON_PAGE(page->index != linear_page_index(vma, address), page); in page_move_anon_rmap()
964 struct vm_area_struct *vma, unsigned long address, int exclusive) in __page_set_anon_rmap() argument
966 struct anon_vma *anon_vma = vma->anon_vma; in __page_set_anon_rmap()
983 page->index = linear_page_index(vma, address); in __page_set_anon_rmap()
993 struct vm_area_struct *vma, unsigned long address) in __page_check_anon_rmap() argument
1008 BUG_ON(page_anon_vma(page)->root != vma->anon_vma->root); in __page_check_anon_rmap()
1009 BUG_ON(page->index != linear_page_index(vma, address)); in __page_check_anon_rmap()
1025 struct vm_area_struct *vma, unsigned long address) in page_add_anon_rmap() argument
1027 do_page_add_anon_rmap(page, vma, address, 0); in page_add_anon_rmap()
1036 struct vm_area_struct *vma, unsigned long address, int exclusive) in do_page_add_anon_rmap() argument
1058 __page_set_anon_rmap(page, vma, address, exclusive); in do_page_add_anon_rmap()
1060 __page_check_anon_rmap(page, vma, address); in do_page_add_anon_rmap()
1074 struct vm_area_struct *vma, unsigned long address) in page_add_new_anon_rmap() argument
1076 VM_BUG_ON_VMA(address < vma->vm_start || address >= vma->vm_end, vma); in page_add_new_anon_rmap()
1083 __page_set_anon_rmap(page, vma, address, 1); in page_add_new_anon_rmap()
1181 static int try_to_unmap_one(struct page *page, struct vm_area_struct *vma, in try_to_unmap_one() argument
1184 struct mm_struct *mm = vma->vm_mm; in try_to_unmap_one()
1201 if (vma->vm_flags & VM_LOCKED) in try_to_unmap_one()
1208 if (ptep_clear_flush_young_notify(vma, address, pte)) { in try_to_unmap_one()
1215 flush_cache_page(vma, address, page_to_pfn(page)); in try_to_unmap_one()
1216 pteval = ptep_clear_flush(vma, address, pte); in try_to_unmap_one()
1310 if (down_read_trylock(&vma->vm_mm->mmap_sem)) { in try_to_unmap_one()
1311 if (vma->vm_flags & VM_LOCKED) { in try_to_unmap_one()
1315 up_read(&vma->vm_mm->mmap_sem); in try_to_unmap_one()
1320 bool is_vma_temporary_stack(struct vm_area_struct *vma) in is_vma_temporary_stack() argument
1322 int maybe_stack = vma->vm_flags & (VM_GROWSDOWN | VM_GROWSUP); in is_vma_temporary_stack()
1327 if ((vma->vm_flags & VM_STACK_INCOMPLETE_SETUP) == in is_vma_temporary_stack()
1334 static bool invalid_migration_vma(struct vm_area_struct *vma, void *arg) in invalid_migration_vma() argument
1336 return is_vma_temporary_stack(vma); in invalid_migration_vma()
1478 struct vm_area_struct *vma = avc->vma; in rmap_walk_anon() local
1479 unsigned long address = vma_address(page, vma); in rmap_walk_anon()
1481 if (rwc->invalid_vma && rwc->invalid_vma(vma, rwc->arg)) in rmap_walk_anon()
1484 ret = rwc->rmap_one(page, vma, address, rwc->arg); in rmap_walk_anon()
1511 struct vm_area_struct *vma; in rmap_walk_file() local
1527 vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff, pgoff) { in rmap_walk_file()
1528 unsigned long address = vma_address(page, vma); in rmap_walk_file()
1530 if (rwc->invalid_vma && rwc->invalid_vma(vma, rwc->arg)) in rmap_walk_file()
1533 ret = rwc->rmap_one(page, vma, address, rwc->arg); in rmap_walk_file()
1562 struct vm_area_struct *vma, unsigned long address, int exclusive) in __hugepage_set_anon_rmap() argument
1564 struct anon_vma *anon_vma = vma->anon_vma; in __hugepage_set_anon_rmap()
1575 page->index = linear_page_index(vma, address); in __hugepage_set_anon_rmap()
1579 struct vm_area_struct *vma, unsigned long address) in hugepage_add_anon_rmap() argument
1581 struct anon_vma *anon_vma = vma->anon_vma; in hugepage_add_anon_rmap()
1589 __hugepage_set_anon_rmap(page, vma, address, 0); in hugepage_add_anon_rmap()
1593 struct vm_area_struct *vma, unsigned long address) in hugepage_add_new_anon_rmap() argument
1595 BUG_ON(address < vma->vm_start || address >= vma->vm_end); in hugepage_add_new_anon_rmap()
1597 __hugepage_set_anon_rmap(page, vma, address, 1); in hugepage_add_new_anon_rmap()