diff options
Diffstat (limited to 'arch/blackfin/include/asm/mmu_context.h')
-rw-r--r-- | arch/blackfin/include/asm/mmu_context.h | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/arch/blackfin/include/asm/mmu_context.h b/arch/blackfin/include/asm/mmu_context.h index ae8ef4ffd806..e1a9b4624f91 100644 --- a/arch/blackfin/include/asm/mmu_context.h +++ b/arch/blackfin/include/asm/mmu_context.h | |||
@@ -7,12 +7,13 @@ | |||
7 | #ifndef __BLACKFIN_MMU_CONTEXT_H__ | 7 | #ifndef __BLACKFIN_MMU_CONTEXT_H__ |
8 | #define __BLACKFIN_MMU_CONTEXT_H__ | 8 | #define __BLACKFIN_MMU_CONTEXT_H__ |
9 | 9 | ||
10 | #include <linux/gfp.h> | 10 | #include <linux/slab.h> |
11 | #include <linux/sched.h> | 11 | #include <linux/sched.h> |
12 | #include <asm/setup.h> | 12 | #include <asm/setup.h> |
13 | #include <asm/page.h> | 13 | #include <asm/page.h> |
14 | #include <asm/pgalloc.h> | 14 | #include <asm/pgalloc.h> |
15 | #include <asm/cplbinit.h> | 15 | #include <asm/cplbinit.h> |
16 | #include <asm/sections.h> | ||
16 | 17 | ||
17 | /* Note: L1 stacks are CPU-private things, so we bluntly disable this | 18 | /* Note: L1 stacks are CPU-private things, so we bluntly disable this |
18 | feature in SMP mode, and use the per-CPU scratch SRAM bank only to | 19 | feature in SMP mode, and use the per-CPU scratch SRAM bank only to |
@@ -117,9 +118,16 @@ static inline void protect_page(struct mm_struct *mm, unsigned long addr, | |||
117 | unsigned long flags) | 118 | unsigned long flags) |
118 | { | 119 | { |
119 | unsigned long *mask = mm->context.page_rwx_mask; | 120 | unsigned long *mask = mm->context.page_rwx_mask; |
120 | unsigned long page = addr >> 12; | 121 | unsigned long page; |
121 | unsigned long idx = page >> 5; | 122 | unsigned long idx; |
122 | unsigned long bit = 1 << (page & 31); | 123 | unsigned long bit; |
124 | |||
125 | if (unlikely(addr >= ASYNC_BANK0_BASE && addr < ASYNC_BANK3_BASE + ASYNC_BANK3_SIZE)) | ||
126 | page = (addr - (ASYNC_BANK0_BASE - _ramend)) >> 12; | ||
127 | else | ||
128 | page = addr >> 12; | ||
129 | idx = page >> 5; | ||
130 | bit = 1 << (page & 31); | ||
123 | 131 | ||
124 | if (flags & VM_READ) | 132 | if (flags & VM_READ) |
125 | mask[idx] |= bit; | 133 | mask[idx] |= bit; |