Lines Matching refs:vma

46 static long madvise_behavior(struct vm_area_struct *vma,  in madvise_behavior()  argument
50 struct mm_struct *mm = vma->vm_mm; in madvise_behavior()
53 unsigned long new_flags = vma->vm_flags; in madvise_behavior()
69 if (vma->vm_flags & VM_IO) { in madvise_behavior()
87 error = ksm_madvise(vma, start, end, behavior, &new_flags); in madvise_behavior()
93 error = hugepage_madvise(vma, &new_flags, behavior); in madvise_behavior()
99 if (new_flags == vma->vm_flags) { in madvise_behavior()
100 *prev = vma; in madvise_behavior()
104 pgoff = vma->vm_pgoff + ((start - vma->vm_start) >> PAGE_SHIFT); in madvise_behavior()
105 *prev = vma_merge(mm, *prev, start, end, new_flags, vma->anon_vma, in madvise_behavior()
106 vma->vm_file, pgoff, vma_policy(vma), in madvise_behavior()
107 vma->vm_userfaultfd_ctx); in madvise_behavior()
109 vma = *prev; in madvise_behavior()
113 *prev = vma; in madvise_behavior()
115 if (start != vma->vm_start) { in madvise_behavior()
116 error = split_vma(mm, vma, start, 1); in madvise_behavior()
121 if (end != vma->vm_end) { in madvise_behavior()
122 error = split_vma(mm, vma, end, 0); in madvise_behavior()
131 vma->vm_flags = new_flags; in madvise_behavior()
144 struct vm_area_struct *vma = walk->private; in swapin_walk_pmd_entry() local
156 orig_pte = pte_offset_map_lock(vma->vm_mm, pmd, start, &ptl); in swapin_walk_pmd_entry()
167 vma, index); in swapin_walk_pmd_entry()
175 static void force_swapin_readahead(struct vm_area_struct *vma, in force_swapin_readahead() argument
179 .mm = vma->vm_mm, in force_swapin_readahead()
181 .private = vma, in force_swapin_readahead()
189 static void force_shm_swapin_readahead(struct vm_area_struct *vma, in force_shm_swapin_readahead() argument
198 index = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; in force_shm_swapin_readahead()
220 static long madvise_willneed(struct vm_area_struct *vma, in madvise_willneed() argument
224 struct file *file = vma->vm_file; in madvise_willneed()
228 *prev = vma; in madvise_willneed()
229 force_swapin_readahead(vma, start, end); in madvise_willneed()
234 *prev = vma; in madvise_willneed()
235 force_shm_swapin_readahead(vma, start, end, in madvise_willneed()
249 *prev = vma; in madvise_willneed()
250 start = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; in madvise_willneed()
251 if (end > vma->vm_end) in madvise_willneed()
252 end = vma->vm_end; in madvise_willneed()
253 end = ((end - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; in madvise_willneed()
278 static long madvise_dontneed(struct vm_area_struct *vma, in madvise_dontneed() argument
282 *prev = vma; in madvise_dontneed()
283 if (vma->vm_flags & (VM_LOCKED|VM_HUGETLB|VM_PFNMAP)) in madvise_dontneed()
286 zap_page_range(vma, start, end - start, NULL); in madvise_dontneed()
294 static long madvise_remove(struct vm_area_struct *vma, in madvise_remove() argument
304 if (vma->vm_flags & VM_LOCKED) in madvise_remove()
307 f = vma->vm_file; in madvise_remove()
313 if ((vma->vm_flags & (VM_SHARED|VM_WRITE)) != (VM_SHARED|VM_WRITE)) in madvise_remove()
316 offset = (loff_t)(start - vma->vm_start) in madvise_remove()
317 + ((loff_t)vma->vm_pgoff << PAGE_SHIFT); in madvise_remove()
374 madvise_vma(struct vm_area_struct *vma, struct vm_area_struct **prev, in madvise_vma() argument
379 return madvise_remove(vma, prev, start, end); in madvise_vma()
381 return madvise_willneed(vma, prev, start, end); in madvise_vma()
383 return madvise_dontneed(vma, prev, start, end); in madvise_vma()
385 return madvise_behavior(vma, prev, start, end, behavior); in madvise_vma()
463 struct vm_area_struct *vma, *prev; in SYSCALL_DEFINE3() local
504 vma = find_vma_prev(current->mm, start, &prev); in SYSCALL_DEFINE3()
505 if (vma && start > vma->vm_start) in SYSCALL_DEFINE3()
506 prev = vma; in SYSCALL_DEFINE3()
512 if (!vma) in SYSCALL_DEFINE3()
516 if (start < vma->vm_start) { in SYSCALL_DEFINE3()
518 start = vma->vm_start; in SYSCALL_DEFINE3()
524 tmp = vma->vm_end; in SYSCALL_DEFINE3()
529 error = madvise_vma(vma, &prev, start, tmp, behavior); in SYSCALL_DEFINE3()
539 vma = prev->vm_next; in SYSCALL_DEFINE3()
541 vma = find_vma(current->mm, start); in SYSCALL_DEFINE3()