Lines Matching refs:vma
45 static long madvise_behavior(struct vm_area_struct *vma, in madvise_behavior() argument
49 struct mm_struct *mm = vma->vm_mm; in madvise_behavior()
52 unsigned long new_flags = vma->vm_flags; in madvise_behavior()
68 if (vma->vm_flags & VM_IO) { in madvise_behavior()
86 error = ksm_madvise(vma, start, end, behavior, &new_flags); in madvise_behavior()
92 error = hugepage_madvise(vma, &new_flags, behavior); in madvise_behavior()
98 if (new_flags == vma->vm_flags) { in madvise_behavior()
99 *prev = vma; in madvise_behavior()
103 pgoff = vma->vm_pgoff + ((start - vma->vm_start) >> PAGE_SHIFT); in madvise_behavior()
104 *prev = vma_merge(mm, *prev, start, end, new_flags, vma->anon_vma, in madvise_behavior()
105 vma->vm_file, pgoff, vma_policy(vma), in madvise_behavior()
106 vma_get_anon_name(vma)); in madvise_behavior()
108 vma = *prev; in madvise_behavior()
112 *prev = vma; in madvise_behavior()
114 if (start != vma->vm_start) { in madvise_behavior()
115 error = split_vma(mm, vma, start, 1); in madvise_behavior()
120 if (end != vma->vm_end) { in madvise_behavior()
121 error = split_vma(mm, vma, end, 0); in madvise_behavior()
130 vma->vm_flags = new_flags; in madvise_behavior()
143 struct vm_area_struct *vma = walk->private; in swapin_walk_pmd_entry() local
155 orig_pte = pte_offset_map_lock(vma->vm_mm, pmd, start, &ptl); in swapin_walk_pmd_entry()
166 vma, index); in swapin_walk_pmd_entry()
174 static void force_swapin_readahead(struct vm_area_struct *vma, in force_swapin_readahead() argument
178 .mm = vma->vm_mm, in force_swapin_readahead()
180 .private = vma, in force_swapin_readahead()
188 static void force_shm_swapin_readahead(struct vm_area_struct *vma, in force_shm_swapin_readahead() argument
197 index = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; in force_shm_swapin_readahead()
219 static long madvise_willneed(struct vm_area_struct *vma, in madvise_willneed() argument
223 struct file *file = vma->vm_file; in madvise_willneed()
225 *prev = vma; in madvise_willneed()
229 force_swapin_readahead(vma, start, end); in madvise_willneed()
231 force_shm_swapin_readahead(vma, start, end, in madvise_willneed()
245 start = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; in madvise_willneed()
246 if (end > vma->vm_end) in madvise_willneed()
247 end = vma->vm_end; in madvise_willneed()
248 end = ((end - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; in madvise_willneed()
273 static long madvise_dontneed(struct vm_area_struct *vma, in madvise_dontneed() argument
277 *prev = vma; in madvise_dontneed()
278 if (vma->vm_flags & (VM_LOCKED|VM_HUGETLB|VM_PFNMAP)) in madvise_dontneed()
281 if (unlikely(vma->vm_flags & VM_NONLINEAR)) { in madvise_dontneed()
283 .nonlinear_vma = vma, in madvise_dontneed()
286 zap_page_range(vma, start, end - start, &details); in madvise_dontneed()
288 zap_page_range(vma, start, end - start, NULL); in madvise_dontneed()
296 static long madvise_remove(struct vm_area_struct *vma, in madvise_remove() argument
306 if (vma->vm_flags & (VM_LOCKED|VM_NONLINEAR|VM_HUGETLB)) in madvise_remove()
309 f = vma->vm_file; in madvise_remove()
315 if ((vma->vm_flags & (VM_SHARED|VM_WRITE)) != (VM_SHARED|VM_WRITE)) in madvise_remove()
318 offset = (loff_t)(start - vma->vm_start) in madvise_remove()
319 + ((loff_t)vma->vm_pgoff << PAGE_SHIFT); in madvise_remove()
376 madvise_vma(struct vm_area_struct *vma, struct vm_area_struct **prev, in madvise_vma() argument
381 return madvise_remove(vma, prev, start, end); in madvise_vma()
383 return madvise_willneed(vma, prev, start, end); in madvise_vma()
385 return madvise_dontneed(vma, prev, start, end); in madvise_vma()
387 return madvise_behavior(vma, prev, start, end, behavior); in madvise_vma()
465 struct vm_area_struct *vma, *prev; in SYSCALL_DEFINE3() local
506 vma = find_vma_prev(current->mm, start, &prev); in SYSCALL_DEFINE3()
507 if (vma && start > vma->vm_start) in SYSCALL_DEFINE3()
508 prev = vma; in SYSCALL_DEFINE3()
514 if (!vma) in SYSCALL_DEFINE3()
518 if (start < vma->vm_start) { in SYSCALL_DEFINE3()
520 start = vma->vm_start; in SYSCALL_DEFINE3()
526 tmp = vma->vm_end; in SYSCALL_DEFINE3()
531 error = madvise_vma(vma, &prev, start, tmp, behavior); in SYSCALL_DEFINE3()
541 vma = prev->vm_next; in SYSCALL_DEFINE3()
543 vma = find_vma(current->mm, start); in SYSCALL_DEFINE3()