aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/traps.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-10-02 19:20:43 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-10-02 19:20:43 -0400
commita037a79dceaf717409fbf42f4ad209b9c15f435c (patch)
treec30b5b033c74ab9470e875554bded16464bbdf9b /arch/arm/kernel/traps.c
parent90d5ffc729e92bffc0f84e2447e2e6dc280240a5 (diff)
parentd25ef8b86e6a58f5476bf6e4a8da730b335f68fa (diff)
Merge master.kernel.org:/home/rmk/linux-2.6-arm
* master.kernel.org:/home/rmk/linux-2.6-arm: (25 commits) ARM: 5728/1: Proper prefetch abort handling on ARMv6 and ARMv7 ARM: 5727/1: Pass IFSR register to do_PrefetchAbort() ARM: 5740/1: fix valid_phys_addr_range() range check ARM: 5739/1: ARM: allow empty ATAG_CORE ARM: 5735/1: sa1111: CodingStyle cleanups ARM: 5738/1: Correct TCM documentation ARM: 5734/1: arm: fix compilation of entry-common.S for older CPUs ARM: 5733/1: fix bcmring compile error ARM: 5732/1: remove redundant include file ARM: 5731/2: Fix U300 generic GPIO, remove ifdefs from MMCI v3 ARM: Ensure do_cache_op takes mmap_sem ARM: Fix __cpuexit section mismatch warnings ARM: Don't allow highmem on SMP platforms without h/w TLB ops broadcast ARM: includecheck fix: mach-davinci, board-dm365-evm.c ARM: Remove unused CONFIG SA1100_H3XXX ARM: Fix warning: unused variable 'highmem' ARM: Fix warning: #warning syscall migrate_pages not implemented ARM: Fix SA11x0 clocksource warning ARM: Fix SA1100 Neponset serial section mismatch ARM: Fix SA1100 Assabet/Neponset PCMCIA section mismatch warnings ...
Diffstat (limited to 'arch/arm/kernel/traps.c')
-rw-r--r--arch/arm/kernel/traps.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
index 57eb0f6f6005..467b69ed1021 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -418,12 +418,14 @@ static int bad_syscall(int n, struct pt_regs *regs)
418static inline void 418static inline void
419do_cache_op(unsigned long start, unsigned long end, int flags) 419do_cache_op(unsigned long start, unsigned long end, int flags)
420{ 420{
421 struct mm_struct *mm = current->active_mm;
421 struct vm_area_struct *vma; 422 struct vm_area_struct *vma;
422 423
423 if (end < start || flags) 424 if (end < start || flags)
424 return; 425 return;
425 426
426 vma = find_vma(current->active_mm, start); 427 down_read(&mm->mmap_sem);
428 vma = find_vma(mm, start);
427 if (vma && vma->vm_start < end) { 429 if (vma && vma->vm_start < end) {
428 if (start < vma->vm_start) 430 if (start < vma->vm_start)
429 start = vma->vm_start; 431 start = vma->vm_start;
@@ -432,6 +434,7 @@ do_cache_op(unsigned long start, unsigned long end, int flags)
432 434
433 flush_cache_user_range(vma, start, end); 435 flush_cache_user_range(vma, start, end);
434 } 436 }
437 up_read(&mm->mmap_sem);
435} 438}
436 439
437/* 440/*