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

Commit 7d14c95d authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: kgsl: Skip the intersecting vma"

parents 90ec49c6 0ca862d2
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2008-2019, The Linux Foundation. All rights reserved.
 * Copyright (c) 2008-2020, The Linux Foundation. All rights reserved.
 */

#include <uapi/linux/sched/types.h>
@@ -11,6 +11,7 @@
#include <linux/io.h>
#include <linux/ion.h>
#include <linux/mman.h>
#include <linux/mm_types.h>
#include <linux/of.h>
#include <linux/of_fdt.h>
#include <linux/pm_runtime.h>
@@ -4519,10 +4520,6 @@ static unsigned long set_svm_area(struct file *file,
	struct kgsl_process_private *private = dev_priv->process_priv;
	unsigned long ret;

	/* Make sure there isn't a vma conflict in the chosen range */
	if (find_vma_intersection(current->mm, addr, addr + len - 1))
		return -ENOMEM;

	/*
	 * Do additoinal constraints checking on the address. Passing MAP_FIXED
	 * ensures that the address we want gets checked
@@ -4547,6 +4544,7 @@ static unsigned long get_svm_unmapped_area(struct file *file,
	unsigned long align = get_align(entry);
	unsigned long ret, iova;
	u64 start = 0, end = 0;
	struct vm_area_struct *vma;

	if (flags & MAP_FIXED) {
		/* Even fixed addresses need to obey alignment */
@@ -4575,9 +4573,14 @@ static unsigned long get_svm_unmapped_area(struct file *file,
		len, align);

	while (!IS_ERR_VALUE(iova)) {
		vma = find_vma_intersection(current->mm, iova, iova + len - 1);
		if (vma) {
			iova = vma->vm_start;
		} else {
			ret = set_svm_area(file, entry, iova, len, flags);
			if (!IS_ERR_VALUE(ret))
				return ret;
		}

		iova = kgsl_mmu_find_svm_region(private->pagetable,
			start, iova - 1, len, align);