]> Pileus Git - ~andy/linux/commitdiff
ARM: cacheflush: don't bother rounding to nearest vma
authorWill Deacon <will.deacon@arm.com>
Wed, 22 Aug 2012 10:06:54 +0000 (11:06 +0100)
committerWill Deacon <will.deacon@arm.com>
Tue, 20 Aug 2013 10:54:55 +0000 (11:54 +0100)
do_cache_op finds the lowest VMA contained in the specified address
range and rounds the range to cover only the mapped addresses.

Since commit 4542b6a0fa6b ("ARM: 7365/1: drop unused parameter from
flush_cache_user_range") the VMA is not used for anything else in this
code and seeing as the low-level cache flushing routines return -EFAULT
if the address is not valid, there is no need for this range truncation.

This patch removes the VMA handling code from the cacheflushing syscall.

Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm/kernel/traps.c

index 4d268d912b0eb3634b9ed8782fbe93163ca781ae..9b2c5d42c143582ebc5c22c3bf179f7bded9d8ee 100644 (file)
@@ -550,24 +550,11 @@ static long do_cache_op_restart(struct restart_block *unused)
 static inline int
 do_cache_op(unsigned long start, unsigned long end, int flags)
 {
-       struct mm_struct *mm = current->active_mm;
-       struct vm_area_struct *vma;
-
        if (end < start || flags)
                return -EINVAL;
 
-       down_read(&mm->mmap_sem);
-       vma = find_vma(mm, start);
-       if (!vma || vma->vm_start >= end) {
-               up_read(&mm->mmap_sem);
-               return -EINVAL;
-       }
-
-       if (start < vma->vm_start)
-               start = vma->vm_start;
-       if (end > vma->vm_end)
-               end = vma->vm_end;
-       up_read(&mm->mmap_sem);
+       if (!access_ok(VERIFY_READ, start, end - start))
+               return -EFAULT;
 
        return __do_cache_op(start, end);
 }