Blackfin arch: fix bug - MPU crashes under stress
authorBernd Schmidt <bernds_cb1@t-online.de>
Mon, 25 Aug 2008 10:41:15 +0000 (18:41 +0800)
committerBryan Wu <cooloney@kernel.org>
Mon, 25 Aug 2008 10:41:15 +0000 (18:41 +0800)
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>
include/asm-blackfin/mmu_context.h

index f55ec3c23a924eacd227f23ece059d4d06936933..8529552a981ff39ee42a6b8b60205a08edbbe57f 100644 (file)
@@ -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