aboutsummaryrefslogtreecommitdiffstats
path: root/arch/blackfin/kernel/setup.c
diff options
context:
space:
mode:
authorBarry Song <barry.song@analog.com>2009-12-07 05:05:58 -0500
committerMike Frysinger <vapier@gentoo.org>2010-03-09 00:30:46 -0500
commite18e7dd33454f277b9438af66d25984362278021 (patch)
tree3c809ab2ebf8ad6276570f7eab238bd45e7216e8 /arch/blackfin/kernel/setup.c
parentc9784ebb23be1e2ef23f537d6df04e0ea0206802 (diff)
Blackfin: fix MPU page permission masks overflow when dealing with async memory
Attempting to use the MPU while doing XIP out of parallel flash hooked up to the async memory bus would often result in random crashes as the MPU slowly corrupted memory. The fallout here is that the async banks gain MPU protection from user space too. So any accesses have to go through the mmap() interface rather than just using hardcoded pointers. Signed-off-by: Barry Song <barry.song@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'arch/blackfin/kernel/setup.c')
-rw-r--r--arch/blackfin/kernel/setup.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/blackfin/kernel/setup.c b/arch/blackfin/kernel/setup.c
index 69cbc1a81201..8dc7ee1ef336 100644
--- a/arch/blackfin/kernel/setup.c
+++ b/arch/blackfin/kernel/setup.c
@@ -597,7 +597,12 @@ static __init void memory_setup(void)
597 } 597 }
598 598
599#ifdef CONFIG_MPU 599#ifdef CONFIG_MPU
600#if defined(CONFIG_ROMFS_ON_MTD) && defined(CONFIG_MTD_ROM)
601 page_mask_nelts = (((_ramend + ASYNC_BANK3_BASE + ASYNC_BANK3_SIZE -
602 ASYNC_BANK0_BASE) >> PAGE_SHIFT) + 31) / 32;
603#else
600 page_mask_nelts = ((_ramend >> PAGE_SHIFT) + 31) / 32; 604 page_mask_nelts = ((_ramend >> PAGE_SHIFT) + 31) / 32;
605#endif
601 page_mask_order = get_order(3 * page_mask_nelts * sizeof(long)); 606 page_mask_order = get_order(3 * page_mask_nelts * sizeof(long));
602#endif 607#endif
603 608