Commit 9760ebff authored by Liam R. Howlett's avatar Liam R. Howlett Committed by Andrew Morton
Browse files

mm: switch vma_merge(), split_vma(), and __split_vma to vma iterator

Drop the vmi_* functions and transition all users to use the vma iterator
directly.

Link: https://lkml.kernel.org/r/20230120162650.984577-30-Liam.Howlett@oracle.com


Signed-off-by: default avatarLiam R. Howlett <Liam.Howlett@oracle.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 07f1bc5a
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -909,7 +909,7 @@ static int userfaultfd_release(struct inode *inode, struct file *file)
			continue;
		}
		new_flags = vma->vm_flags & ~__VM_UFFD_FLAGS;
		prev = vmi_vma_merge(&vmi, mm, prev, vma->vm_start, vma->vm_end,
		prev = vma_merge(&vmi, mm, prev, vma->vm_start, vma->vm_end,
				 new_flags, vma->anon_vma,
				 vma->vm_file, vma->vm_pgoff,
				 vma_policy(vma),
@@ -1452,7 +1452,7 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx,
		vma_end = min(end, vma->vm_end);

		new_flags = (vma->vm_flags & ~__VM_UFFD_FLAGS) | vm_flags;
		prev = vmi_vma_merge(&vmi, mm, prev, start, vma_end, new_flags,
		prev = vma_merge(&vmi, mm, prev, start, vma_end, new_flags,
				 vma->anon_vma, vma->vm_file, vma->vm_pgoff,
				 vma_policy(vma),
				 ((struct vm_userfaultfd_ctx){ ctx }),
@@ -1463,12 +1463,12 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx,
			goto next;
		}
		if (vma->vm_start < start) {
			ret = vmi_split_vma(&vmi, mm, vma, start, 1);
			ret = split_vma(&vmi, vma, start, 1);
			if (ret)
				break;
		}
		if (vma->vm_end > end) {
			ret = vmi_split_vma(&vmi, mm, vma, end, 0);
			ret = split_vma(&vmi, vma, end, 0);
			if (ret)
				break;
		}
@@ -1632,7 +1632,7 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx,
			uffd_wp_range(mm, vma, start, vma_end - start, false);

		new_flags = vma->vm_flags & ~__VM_UFFD_FLAGS;
		prev = vmi_vma_merge(&vmi, mm, prev, start, vma_end, new_flags,
		prev = vma_merge(&vmi, mm, prev, start, vma_end, new_flags,
				 vma->anon_vma, vma->vm_file, vma->vm_pgoff,
				 vma_policy(vma),
				 NULL_VM_UFFD_CTX, anon_vma_name(vma));
@@ -1641,12 +1641,12 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx,
			goto next;
		}
		if (vma->vm_start < start) {
			ret = vmi_split_vma(&vmi, mm, vma, start, 1);
			ret = split_vma(&vmi, vma, start, 1);
			if (ret)
				break;
		}
		if (vma->vm_end > end) {
			ret = vmi_split_vma(&vmi, mm, vma, end, 0);
			ret = split_vma(&vmi, vma, end, 0);
			if (ret)
				break;
		}
+5 −13
Original line number Diff line number Diff line
@@ -2839,24 +2839,16 @@ static inline int vma_adjust(struct vm_area_struct *vma, unsigned long start,
{
	return __vma_adjust(vma, start, end, pgoff, insert, NULL);
}
extern struct vm_area_struct *vma_merge(struct mm_struct *,
	struct vm_area_struct *prev, unsigned long addr, unsigned long end,
	unsigned long vm_flags, struct anon_vma *, struct file *, pgoff_t,
	struct mempolicy *, struct vm_userfaultfd_ctx, struct anon_vma_name *);
extern struct vm_area_struct *vmi_vma_merge(struct vma_iterator *vmi,
extern struct vm_area_struct *vma_merge(struct vma_iterator *vmi,
	struct mm_struct *, struct vm_area_struct *prev, unsigned long addr,
	unsigned long end, unsigned long vm_flags, struct anon_vma *,
	struct file *, pgoff_t, struct mempolicy *, struct vm_userfaultfd_ctx,
	struct anon_vma_name *);
extern struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *);
extern int __split_vma(struct mm_struct *, struct vm_area_struct *,
extern int __split_vma(struct vma_iterator *vmi, struct vm_area_struct *,
		       unsigned long addr, int new_below);
extern int vmi__split_vma(struct vma_iterator *vmi, struct mm_struct *,
	struct vm_area_struct *, unsigned long addr, int new_below);
extern int split_vma(struct mm_struct *, struct vm_area_struct *,
extern int split_vma(struct vma_iterator *vmi, struct vm_area_struct *,
			 unsigned long addr, int new_below);
extern int vmi_split_vma(struct vma_iterator *vmi, struct mm_struct *,
		struct vm_area_struct *, unsigned long addr, int new_below);
extern int insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
extern void unlink_file_vma(struct vm_area_struct *);
extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
+3 −3
Original line number Diff line number Diff line
@@ -150,7 +150,7 @@ static int madvise_update_vma(struct vm_area_struct *vma,
	}

	pgoff = vma->vm_pgoff + ((start - vma->vm_start) >> PAGE_SHIFT);
	*prev = vmi_vma_merge(&vmi, mm, *prev, start, end, new_flags,
	*prev = vma_merge(&vmi, mm, *prev, start, end, new_flags,
			  vma->anon_vma, vma->vm_file, pgoff, vma_policy(vma),
			  vma->vm_userfaultfd_ctx, anon_name);
	if (*prev) {
@@ -163,7 +163,7 @@ static int madvise_update_vma(struct vm_area_struct *vma,
	if (start != vma->vm_start) {
		if (unlikely(mm->map_count >= sysctl_max_map_count))
			return -ENOMEM;
		error = vmi__split_vma(&vmi, mm, vma, start, 1);
		error = __split_vma(&vmi, vma, start, 1);
		if (error)
			return error;
	}
@@ -171,7 +171,7 @@ static int madvise_update_vma(struct vm_area_struct *vma,
	if (end != vma->vm_end) {
		if (unlikely(mm->map_count >= sysctl_max_map_count))
			return -ENOMEM;
		error = vmi__split_vma(&vmi, mm, vma, end, 0);
		error = __split_vma(&vmi, vma, end, 0);
		if (error)
			return error;
	}
+3 −3
Original line number Diff line number Diff line
@@ -810,7 +810,7 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,

		pgoff = vma->vm_pgoff +
			((vmstart - vma->vm_start) >> PAGE_SHIFT);
		prev = vmi_vma_merge(&vmi, mm, prev, vmstart, vmend, vma->vm_flags,
		prev = vma_merge(&vmi, mm, prev, vmstart, vmend, vma->vm_flags,
				 vma->anon_vma, vma->vm_file, pgoff,
				 new_pol, vma->vm_userfaultfd_ctx,
				 anon_vma_name(vma));
@@ -819,12 +819,12 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
			goto replace;
		}
		if (vma->vm_start != vmstart) {
			err = vmi_split_vma(&vmi, vma->vm_mm, vma, vmstart, 1);
			err = split_vma(&vmi, vma, vmstart, 1);
			if (err)
				goto out;
		}
		if (vma->vm_end != vmend) {
			err = vmi_split_vma(&vmi, vma->vm_mm, vma, vmend, 0);
			err = split_vma(&vmi, vma, vmend, 0);
			if (err)
				goto out;
		}
+3 −3
Original line number Diff line number Diff line
@@ -418,7 +418,7 @@ static int mlock_fixup(struct vma_iterator *vmi, struct vm_area_struct *vma,
		goto out;

	pgoff = vma->vm_pgoff + ((start - vma->vm_start) >> PAGE_SHIFT);
	*prev = vmi_vma_merge(vmi, mm, *prev, start, end, newflags,
	*prev = vma_merge(vmi, mm, *prev, start, end, newflags,
			vma->anon_vma, vma->vm_file, pgoff, vma_policy(vma),
			vma->vm_userfaultfd_ctx, anon_vma_name(vma));
	if (*prev) {
@@ -427,13 +427,13 @@ static int mlock_fixup(struct vma_iterator *vmi, struct vm_area_struct *vma,
	}

	if (start != vma->vm_start) {
		ret = vmi_split_vma(vmi, mm, vma, start, 1);
		ret = split_vma(vmi, vma, start, 1);
		if (ret)
			goto out;
	}

	if (end != vma->vm_end) {
		ret = vmi_split_vma(vmi, mm, vma, end, 0);
		ret = split_vma(vmi, vma, end, 0);
		if (ret)
			goto out;
	}
Loading