diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-10-02 19:20:43 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-10-02 19:20:43 -0400 |
commit | a037a79dceaf717409fbf42f4ad209b9c15f435c (patch) | |
tree | c30b5b033c74ab9470e875554bded16464bbdf9b /arch/arm/kernel/traps.c | |
parent | 90d5ffc729e92bffc0f84e2447e2e6dc280240a5 (diff) | |
parent | d25ef8b86e6a58f5476bf6e4a8da730b335f68fa (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.c | 5 |
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) | |||
418 | static inline void | 418 | static inline void |
419 | do_cache_op(unsigned long start, unsigned long end, int flags) | 419 | do_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 | /* |