• Home
  • Raw
  • Download

Lines Matching refs:vma

55 static long madvise_behavior(struct vm_area_struct *vma,  in madvise_behavior()  argument
59 struct mm_struct *mm = vma->vm_mm; in madvise_behavior()
62 unsigned long new_flags = vma->vm_flags; in madvise_behavior()
78 if (vma->vm_flags & VM_IO) { in madvise_behavior()
86 if (vma->vm_file || vma->vm_flags & VM_SHARED) { in madvise_behavior()
99 if (!is_vm_hugetlb_page(vma) && new_flags & VM_SPECIAL) { in madvise_behavior()
107 error = ksm_madvise(vma, start, end, behavior, &new_flags); in madvise_behavior()
120 error = hugepage_madvise(vma, &new_flags, behavior); in madvise_behavior()
133 if (new_flags == vma->vm_flags) { in madvise_behavior()
134 *prev = vma; in madvise_behavior()
138 pgoff = vma->vm_pgoff + ((start - vma->vm_start) >> PAGE_SHIFT); in madvise_behavior()
139 *prev = vma_merge(mm, *prev, start, end, new_flags, vma->anon_vma, in madvise_behavior()
140 vma->vm_file, pgoff, vma_policy(vma), in madvise_behavior()
141 vma->vm_userfaultfd_ctx, vma_get_anon_name(vma)); in madvise_behavior()
143 vma = *prev; in madvise_behavior()
147 *prev = vma; in madvise_behavior()
149 if (start != vma->vm_start) { in madvise_behavior()
154 error = __split_vma(mm, vma, start, 1); in madvise_behavior()
166 if (end != vma->vm_end) { in madvise_behavior()
171 error = __split_vma(mm, vma, end, 0); in madvise_behavior()
187 vma->vm_flags = new_flags; in madvise_behavior()
197 struct vm_area_struct *vma = walk->private; in swapin_walk_pmd_entry() local
209 orig_pte = pte_offset_map_lock(vma->vm_mm, pmd, start, &ptl); in swapin_walk_pmd_entry()
220 vma, index, false); in swapin_walk_pmd_entry()
228 static void force_swapin_readahead(struct vm_area_struct *vma, in force_swapin_readahead() argument
232 .mm = vma->vm_mm, in force_swapin_readahead()
234 .private = vma, in force_swapin_readahead()
242 static void force_shm_swapin_readahead(struct vm_area_struct *vma, in force_shm_swapin_readahead() argument
251 index = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; in force_shm_swapin_readahead()
273 static long madvise_willneed(struct vm_area_struct *vma, in madvise_willneed() argument
277 struct file *file = vma->vm_file; in madvise_willneed()
279 *prev = vma; in madvise_willneed()
282 force_swapin_readahead(vma, start, end); in madvise_willneed()
287 force_shm_swapin_readahead(vma, start, end, in madvise_willneed()
301 start = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; in madvise_willneed()
302 if (end > vma->vm_end) in madvise_willneed()
303 end = vma->vm_end; in madvise_willneed()
304 end = ((end - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; in madvise_willneed()
316 struct vm_area_struct *vma = walk->vma; in madvise_free_pte_range() local
325 if (madvise_free_huge_pmd(tlb, vma, pmd, addr, next)) in madvise_free_pte_range()
357 page = _vm_normal_page(vma, addr, ptent, true); in madvise_free_pte_range()
444 struct vm_area_struct *vma, in madvise_free_page_range() argument
449 .mm = vma->vm_mm, in madvise_free_page_range()
453 tlb_start_vma(tlb, vma); in madvise_free_page_range()
455 tlb_end_vma(tlb, vma); in madvise_free_page_range()
458 static int madvise_free_single_vma(struct vm_area_struct *vma, in madvise_free_single_vma() argument
462 struct mm_struct *mm = vma->vm_mm; in madvise_free_single_vma()
466 if (!vma_is_anonymous(vma)) in madvise_free_single_vma()
469 start = max(vma->vm_start, start_addr); in madvise_free_single_vma()
470 if (start >= vma->vm_end) in madvise_free_single_vma()
472 end = min(vma->vm_end, end_addr); in madvise_free_single_vma()
473 if (end <= vma->vm_start) in madvise_free_single_vma()
481 madvise_free_page_range(&tlb, vma, start, end); in madvise_free_single_vma()
507 static long madvise_dontneed_single_vma(struct vm_area_struct *vma, in madvise_dontneed_single_vma() argument
510 zap_page_range(vma, start, end - start); in madvise_dontneed_single_vma()
514 static long madvise_dontneed_free(struct vm_area_struct *vma, in madvise_dontneed_free() argument
519 *prev = vma; in madvise_dontneed_free()
520 if (!can_madv_dontneed_vma(vma)) in madvise_dontneed_free()
523 if (!userfaultfd_remove(vma, start, end)) { in madvise_dontneed_free()
527 vma = find_vma(current->mm, start); in madvise_dontneed_free()
528 if (!vma) in madvise_dontneed_free()
530 if (start < vma->vm_start) { in madvise_dontneed_free()
542 if (!can_madv_dontneed_vma(vma)) in madvise_dontneed_free()
544 if (end > vma->vm_end) { in madvise_dontneed_free()
557 end = vma->vm_end; in madvise_dontneed_free()
563 return madvise_dontneed_single_vma(vma, start, end); in madvise_dontneed_free()
565 return madvise_free_single_vma(vma, start, end); in madvise_dontneed_free()
574 static long madvise_remove(struct vm_area_struct *vma, in madvise_remove() argument
584 if (vma->vm_flags & VM_LOCKED) in madvise_remove()
587 f = vma->vm_file; in madvise_remove()
593 if ((vma->vm_flags & (VM_SHARED|VM_WRITE)) != (VM_SHARED|VM_WRITE)) in madvise_remove()
596 offset = (loff_t)(start - vma->vm_start) in madvise_remove()
597 + ((loff_t)vma->vm_pgoff << PAGE_SHIFT); in madvise_remove()
606 if (userfaultfd_remove(vma, start, end)) { in madvise_remove()
678 madvise_vma(struct vm_area_struct *vma, struct vm_area_struct **prev, in madvise_vma() argument
683 return madvise_remove(vma, prev, start, end); in madvise_vma()
685 return madvise_willneed(vma, prev, start, end); in madvise_vma()
688 return madvise_dontneed_free(vma, prev, start, end, behavior); in madvise_vma()
690 return madvise_behavior(vma, prev, start, end, behavior); in madvise_vma()
794 struct vm_area_struct *vma, *prev; in SYSCALL_DEFINE3() local
838 vma = find_vma_prev(current->mm, start, &prev); in SYSCALL_DEFINE3()
839 if (vma && start > vma->vm_start) in SYSCALL_DEFINE3()
840 prev = vma; in SYSCALL_DEFINE3()
846 if (!vma) in SYSCALL_DEFINE3()
850 if (start < vma->vm_start) { in SYSCALL_DEFINE3()
852 start = vma->vm_start; in SYSCALL_DEFINE3()
858 tmp = vma->vm_end; in SYSCALL_DEFINE3()
863 error = madvise_vma(vma, &prev, start, tmp, behavior); in SYSCALL_DEFINE3()
873 vma = prev->vm_next; in SYSCALL_DEFINE3()
875 vma = find_vma(current->mm, start); in SYSCALL_DEFINE3()