Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f98b74c6 authored by Laurent Dufour's avatar Laurent Dufour Committed by Vinayak Menon
Browse files

mm: introduce INIT_VMA()



Some VMA struct fields need to be initialized once the VMA structure is
allocated.
Currently this only concerns anon_vma_chain field but some other will be
added to support the speculative page fault.

Instead of spreading the initialization calls all over the code, let's
introduce a dedicated inline function.

Change-Id: I9f6b29dc74055354318b548e2b6b22c37d4c61bb
Signed-off-by: default avatarLaurent Dufour <ldufour@linux.vnet.ibm.com>
Patch-mainline: linux-mm @ Tue, 17 Apr 2018 16:33:13
[vinmenon@codeaurora.org: trivial merge conflict fixes]
Signed-off-by: default avatarVinayak Menon <vinmenon@codeaurora.org>
parent 52bf7a90
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -311,7 +311,7 @@ static int __bprm_mm_init(struct linux_binprm *bprm)
	vma->vm_start = vma->vm_end - PAGE_SIZE;
	vma->vm_flags = VM_SOFTDIRTY | VM_STACK_FLAGS | VM_STACK_INCOMPLETE_SETUP;
	vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
	INIT_LIST_HEAD(&vma->anon_vma_chain);
	INIT_VMA(vma);

	err = insert_vm_struct(mm, vma);
	if (err)
+5 −0
Original line number Diff line number Diff line
@@ -1240,6 +1240,11 @@ struct zap_details {
	pgoff_t last_index;			/* Highest page->index to unmap */
};

static inline void INIT_VMA(struct vm_area_struct *vma)
{
	INIT_LIST_HEAD(&vma->anon_vma_chain);
}

struct page *_vm_normal_page(struct vm_area_struct *vma, unsigned long addr,
			     pte_t pte, bool with_public_device);
#define vm_normal_page(vma, addr, pte) _vm_normal_page(vma, addr, pte, false)
+1 −1
Original line number Diff line number Diff line
@@ -654,7 +654,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
		if (!tmp)
			goto fail_nomem;
		*tmp = *mpnt;
		INIT_LIST_HEAD(&tmp->anon_vma_chain);
		INIT_VMA(tmp);
		retval = vma_dup_policy(mpnt, tmp);
		if (retval)
			goto fail_nomem_policy;
+5 −5
Original line number Diff line number Diff line
@@ -1676,7 +1676,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
	vma->vm_flags = vm_flags;
	vma->vm_page_prot = vm_get_page_prot(vm_flags);
	vma->vm_pgoff = pgoff;
	INIT_LIST_HEAD(&vma->anon_vma_chain);
	INIT_VMA(vma);

	if (file) {
		if (vm_flags & VM_DENYWRITE) {
@@ -2562,7 +2562,7 @@ int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
	/* most fields are the same, copy all, and then fixup */
	*new = *vma;

	INIT_LIST_HEAD(&new->anon_vma_chain);
	INIT_VMA(new);

	if (new_below)
		new->vm_end = addr;
@@ -2933,7 +2933,7 @@ static int do_brk_flags(unsigned long addr, unsigned long request, unsigned long
		return -ENOMEM;
	}

	INIT_LIST_HEAD(&vma->anon_vma_chain);
	INIT_VMA(vma);
	vma->vm_mm = mm;
	vma->vm_start = addr;
	vma->vm_end = addr + len;
@@ -3152,7 +3152,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
		new_vma->vm_pgoff = pgoff;
		if (vma_dup_policy(vma, new_vma))
			goto out_free_vma;
		INIT_LIST_HEAD(&new_vma->anon_vma_chain);
		INIT_VMA(new_vma);
		if (anon_vma_clone(new_vma, vma))
			goto out_free_mempol;
		if (new_vma->vm_file)
@@ -3293,7 +3293,7 @@ static struct vm_area_struct *__install_special_mapping(
	if (unlikely(vma == NULL))
		return ERR_PTR(-ENOMEM);

	INIT_LIST_HEAD(&vma->anon_vma_chain);
	INIT_VMA(vma);
	vma->vm_mm = mm;
	vma->vm_start = addr;
	vma->vm_end = addr + len;
+1 −1
Original line number Diff line number Diff line
@@ -1244,7 +1244,7 @@ unsigned long do_mmap(struct file *file,
	region->vm_flags = vm_flags;
	region->vm_pgoff = pgoff;

	INIT_LIST_HEAD(&vma->anon_vma_chain);
	INIT_VMA(vma);
	vma->vm_flags = vm_flags;
	vma->vm_pgoff = pgoff;