summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorBernd Schmidt <bernds_cb1@t-online.de>2008-08-25 12:41:15 +0200
committerBryan Wu <cooloney@kernel.org>2008-08-25 12:41:15 +0200
commit3d9b7a5ce534f3963afcf8f4777267e5899fe007 (patch)
tree8b12d350b00a0c0f12d4764fe5998ef0a9bfed57 /include
parentBlackfin arch: Fix bug - when to rmmod the L1_module, it stucks and then rebo... (diff)
downloadlinux-3d9b7a5ce534f3963afcf8f4777267e5899fe007.tar.xz
linux-3d9b7a5ce534f3963afcf8f4777267e5899fe007.zip
Blackfin arch: fix bug - MPU crashes under stress
Bug Description: a customer reported under IRQ stress, running applications may wrongly trigger an ICPLB miss and be killed. after playing a bit more, here's a test case that may be triggering the same bug. Fixing: After modifying page protections, only modify the active CPLBs if the protection change was made for the active mm. Signed-off-by: Bernd Schmidt <bernds_cb1@t-online.de> Signed-off-by: Bryan Wu <cooloney@kernel.org>
Diffstat (limited to 'include')
-rw-r--r--include/asm-blackfin/mmu_context.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/include/asm-blackfin/mmu_context.h b/include/asm-blackfin/mmu_context.h
index f55ec3c23a92..8529552a981f 100644
--- a/include/asm-blackfin/mmu_context.h
+++ b/include/asm-blackfin/mmu_context.h
@@ -173,8 +173,10 @@ static inline void protect_page(struct mm_struct *mm, unsigned long addr,
static inline void update_protections(struct mm_struct *mm)
{
- flush_switched_cplbs();
- set_mask_dcplbs(mm->context.page_rwx_mask);
+ if (mm->context.page_rwx_mask == current_rwx_mask) {
+ flush_switched_cplbs();
+ set_mask_dcplbs(mm->context.page_rwx_mask);
+ }
}
#endif