diff options
author | Will Deacon <will.deacon@arm.com> | 2012-08-22 11:06:54 +0100 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2013-08-20 11:54:55 +0100 |
commit | 97c72d89ce0ec8c73f19d5e35ec1f90f7a14bed7 (patch) | |
tree | 3711daf93348310350bd1a94f89f5ccce092397e /arch/arm/kernel | |
parent | d9524dc32cab52714dee0c8e59c7437ee33a239a (diff) | |
download | linux-97c72d89ce0ec8c73f19d5e35ec1f90f7a14bed7.tar.gz linux-97c72d89ce0ec8c73f19d5e35ec1f90f7a14bed7.tar.bz2 linux-97c72d89ce0ec8c73f19d5e35ec1f90f7a14bed7.zip |
ARM: cacheflush: don't bother rounding to nearest vma
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>
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/traps.c | 17 |
1 files changed, 2 insertions, 15 deletions
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 4d268d912b0e..9b2c5d42c143 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c @@ -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); } |