summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernd Schmidt <bernds_cb1@t-online.de>2008-08-25 18:41:15 +0800
committerBryan Wu <cooloney@kernel.org>2008-08-25 18:41:15 +0800
commit3d9b7a5ce534f3963afcf8f4777267e5899fe007 (patch)
tree8b12d350b00a0c0f12d4764fe5998ef0a9bfed57
parent225f7e1eb56ad054c328ae1b11601ea4de7488ba (diff)
downloadlinux-3d9b7a5ce534f3963afcf8f4777267e5899fe007.tar.gz
linux-3d9b7a5ce534f3963afcf8f4777267e5899fe007.tar.bz2
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>
-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