diff options
author | Bernd Schmidt <bernds_cb1@t-online.de> | 2008-08-25 18:41:15 +0800 |
---|---|---|
committer | Bryan Wu <cooloney@kernel.org> | 2008-08-25 18:41:15 +0800 |
commit | 3d9b7a5ce534f3963afcf8f4777267e5899fe007 (patch) | |
tree | 8b12d350b00a0c0f12d4764fe5998ef0a9bfed57 /include/asm-blackfin | |
parent | 225f7e1eb56ad054c328ae1b11601ea4de7488ba (diff) |
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/asm-blackfin')
-rw-r--r-- | include/asm-blackfin/mmu_context.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/include/asm-blackfin/mmu_context.h b/include/asm-blackfin/mmu_context.h index f55ec3c23a9..8529552a981 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 |