diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-11-15 19:23:31 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-12-22 06:05:35 -0500 |
commit | 9522d7e4cb5e0858122fc55d33a2c07728f0b10d (patch) | |
tree | 49438ddcd5217da82cf9ebe79dda8577bc346456 /arch/arm/mm | |
parent | e926f4495e202500a6265987277fab217e235f08 (diff) |
ARM: pgtable: invert L_PTE_EXEC to L_PTE_XN
The hardware page tables use an XN bit 'execute never'. Historically,
we've had a Linux 'execute allow' bit, in the positive sense. Get rid
of this artifact as future hardware will continue to have the XN sense.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mm')
-rw-r--r-- | arch/arm/mm/mmu.c | 15 | ||||
-rw-r--r-- | arch/arm/mm/proc-macros.S | 6 | ||||
-rw-r--r-- | arch/arm/mm/proc-v7.S | 4 |
3 files changed, 12 insertions, 13 deletions
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index bd1a11e62f4e..bd5a94b2d610 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
@@ -190,7 +190,7 @@ void adjust_cr(unsigned long mask, unsigned long set) | |||
190 | } | 190 | } |
191 | #endif | 191 | #endif |
192 | 192 | ||
193 | #define PROT_PTE_DEVICE L_PTE_PRESENT|L_PTE_YOUNG|L_PTE_DIRTY|L_PTE_WRITE | 193 | #define PROT_PTE_DEVICE L_PTE_PRESENT|L_PTE_YOUNG|L_PTE_DIRTY|L_PTE_WRITE|L_PTE_XN |
194 | #define PROT_SECT_DEVICE PMD_TYPE_SECT|PMD_SECT_AP_WRITE | 194 | #define PROT_SECT_DEVICE PMD_TYPE_SECT|PMD_SECT_AP_WRITE |
195 | 195 | ||
196 | static struct mem_type mem_types[] = { | 196 | static struct mem_type mem_types[] = { |
@@ -234,20 +234,19 @@ static struct mem_type mem_types[] = { | |||
234 | .domain = DOMAIN_KERNEL, | 234 | .domain = DOMAIN_KERNEL, |
235 | }, | 235 | }, |
236 | [MT_LOW_VECTORS] = { | 236 | [MT_LOW_VECTORS] = { |
237 | .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | | 237 | .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY, |
238 | L_PTE_EXEC, | ||
239 | .prot_l1 = PMD_TYPE_TABLE, | 238 | .prot_l1 = PMD_TYPE_TABLE, |
240 | .domain = DOMAIN_USER, | 239 | .domain = DOMAIN_USER, |
241 | }, | 240 | }, |
242 | [MT_HIGH_VECTORS] = { | 241 | [MT_HIGH_VECTORS] = { |
243 | .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | | 242 | .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | |
244 | L_PTE_USER | L_PTE_EXEC, | 243 | L_PTE_USER, |
245 | .prot_l1 = PMD_TYPE_TABLE, | 244 | .prot_l1 = PMD_TYPE_TABLE, |
246 | .domain = DOMAIN_USER, | 245 | .domain = DOMAIN_USER, |
247 | }, | 246 | }, |
248 | [MT_MEMORY] = { | 247 | [MT_MEMORY] = { |
249 | .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | | 248 | .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | |
250 | L_PTE_WRITE | L_PTE_EXEC, | 249 | L_PTE_WRITE, |
251 | .prot_l1 = PMD_TYPE_TABLE, | 250 | .prot_l1 = PMD_TYPE_TABLE, |
252 | .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE, | 251 | .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE, |
253 | .domain = DOMAIN_KERNEL, | 252 | .domain = DOMAIN_KERNEL, |
@@ -258,21 +257,21 @@ static struct mem_type mem_types[] = { | |||
258 | }, | 257 | }, |
259 | [MT_MEMORY_NONCACHED] = { | 258 | [MT_MEMORY_NONCACHED] = { |
260 | .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | | 259 | .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | |
261 | L_PTE_WRITE | L_PTE_EXEC | L_PTE_MT_BUFFERABLE, | 260 | L_PTE_WRITE| L_PTE_MT_BUFFERABLE, |
262 | .prot_l1 = PMD_TYPE_TABLE, | 261 | .prot_l1 = PMD_TYPE_TABLE, |
263 | .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE, | 262 | .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE, |
264 | .domain = DOMAIN_KERNEL, | 263 | .domain = DOMAIN_KERNEL, |
265 | }, | 264 | }, |
266 | [MT_MEMORY_DTCM] = { | 265 | [MT_MEMORY_DTCM] = { |
267 | .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | | 266 | .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | |
268 | L_PTE_WRITE, | 267 | L_PTE_WRITE | L_PTE_XN, |
269 | .prot_l1 = PMD_TYPE_TABLE, | 268 | .prot_l1 = PMD_TYPE_TABLE, |
270 | .prot_sect = PMD_TYPE_SECT | PMD_SECT_XN, | 269 | .prot_sect = PMD_TYPE_SECT | PMD_SECT_XN, |
271 | .domain = DOMAIN_KERNEL, | 270 | .domain = DOMAIN_KERNEL, |
272 | }, | 271 | }, |
273 | [MT_MEMORY_ITCM] = { | 272 | [MT_MEMORY_ITCM] = { |
274 | .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | | 273 | .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | |
275 | L_PTE_WRITE | L_PTE_EXEC, | 274 | L_PTE_WRITE, |
276 | .prot_l1 = PMD_TYPE_TABLE, | 275 | .prot_l1 = PMD_TYPE_TABLE, |
277 | .domain = DOMAIN_KERNEL, | 276 | .domain = DOMAIN_KERNEL, |
278 | }, | 277 | }, |
diff --git a/arch/arm/mm/proc-macros.S b/arch/arm/mm/proc-macros.S index cbedf9c46b9d..4a7a9e142e85 100644 --- a/arch/arm/mm/proc-macros.S +++ b/arch/arm/mm/proc-macros.S | |||
@@ -81,7 +81,7 @@ | |||
81 | #if L_PTE_SHARED != PTE_EXT_SHARED | 81 | #if L_PTE_SHARED != PTE_EXT_SHARED |
82 | #error PTE shared bit mismatch | 82 | #error PTE shared bit mismatch |
83 | #endif | 83 | #endif |
84 | #if (L_PTE_EXEC+L_PTE_USER+L_PTE_WRITE+L_PTE_DIRTY+L_PTE_YOUNG+\ | 84 | #if (L_PTE_XN+L_PTE_USER+L_PTE_WRITE+L_PTE_DIRTY+L_PTE_YOUNG+\ |
85 | L_PTE_FILE+L_PTE_PRESENT) > L_PTE_SHARED | 85 | L_PTE_FILE+L_PTE_PRESENT) > L_PTE_SHARED |
86 | #error Invalid Linux PTE bit settings | 86 | #error Invalid Linux PTE bit settings |
87 | #endif | 87 | #endif |
@@ -141,8 +141,8 @@ | |||
141 | tstne r3, #PTE_EXT_APX | 141 | tstne r3, #PTE_EXT_APX |
142 | bicne r3, r3, #PTE_EXT_APX | PTE_EXT_AP0 | 142 | bicne r3, r3, #PTE_EXT_APX | PTE_EXT_AP0 |
143 | 143 | ||
144 | tst r1, #L_PTE_EXEC | 144 | tst r1, #L_PTE_XN |
145 | orreq r3, r3, #PTE_EXT_XN | 145 | orrne r3, r3, #PTE_EXT_XN |
146 | 146 | ||
147 | orr r3, r3, r2 | 147 | orr r3, r3, r2 |
148 | 148 | ||
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index 89c31a6dae5c..4f5a594aa5fd 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S | |||
@@ -149,8 +149,8 @@ ENTRY(cpu_v7_set_pte_ext) | |||
149 | tstne r3, #PTE_EXT_APX | 149 | tstne r3, #PTE_EXT_APX |
150 | bicne r3, r3, #PTE_EXT_APX | PTE_EXT_AP0 | 150 | bicne r3, r3, #PTE_EXT_APX | PTE_EXT_AP0 |
151 | 151 | ||
152 | tst r1, #L_PTE_EXEC | 152 | tst r1, #L_PTE_XN |
153 | orreq r3, r3, #PTE_EXT_XN | 153 | orrne r3, r3, #PTE_EXT_XN |
154 | 154 | ||
155 | tst r1, #L_PTE_YOUNG | 155 | tst r1, #L_PTE_YOUNG |
156 | tstne r1, #L_PTE_PRESENT | 156 | tstne r1, #L_PTE_PRESENT |