diff options
Diffstat (limited to 'arch/powerpc/mm/mem.c')
-rw-r--r-- | arch/powerpc/mm/mem.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index e8122447f019..93a5c53e3423 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c | |||
@@ -220,12 +220,13 @@ void __init do_init_bootmem(void) | |||
220 | lmb_size_bytes(&lmb.reserved, i) - 1; | 220 | lmb_size_bytes(&lmb.reserved, i) - 1; |
221 | if (addr < total_lowmem) | 221 | if (addr < total_lowmem) |
222 | reserve_bootmem(lmb.reserved.region[i].base, | 222 | reserve_bootmem(lmb.reserved.region[i].base, |
223 | lmb_size_bytes(&lmb.reserved, i)); | 223 | lmb_size_bytes(&lmb.reserved, i), |
224 | BOOTMEM_DEFAULT); | ||
224 | else if (lmb.reserved.region[i].base < total_lowmem) { | 225 | else if (lmb.reserved.region[i].base < total_lowmem) { |
225 | unsigned long adjusted_size = total_lowmem - | 226 | unsigned long adjusted_size = total_lowmem - |
226 | lmb.reserved.region[i].base; | 227 | lmb.reserved.region[i].base; |
227 | reserve_bootmem(lmb.reserved.region[i].base, | 228 | reserve_bootmem(lmb.reserved.region[i].base, |
228 | adjusted_size); | 229 | adjusted_size, BOOTMEM_DEFAULT); |
229 | } | 230 | } |
230 | } | 231 | } |
231 | #else | 232 | #else |
@@ -234,7 +235,8 @@ void __init do_init_bootmem(void) | |||
234 | /* reserve the sections we're already using */ | 235 | /* reserve the sections we're already using */ |
235 | for (i = 0; i < lmb.reserved.cnt; i++) | 236 | for (i = 0; i < lmb.reserved.cnt; i++) |
236 | reserve_bootmem(lmb.reserved.region[i].base, | 237 | reserve_bootmem(lmb.reserved.region[i].base, |
237 | lmb_size_bytes(&lmb.reserved, i)); | 238 | lmb_size_bytes(&lmb.reserved, i), |
239 | BOOTMEM_DEFAULT); | ||
238 | 240 | ||
239 | #endif | 241 | #endif |
240 | /* XXX need to clip this if using highmem? */ | 242 | /* XXX need to clip this if using highmem? */ |
@@ -483,7 +485,12 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, | |||
483 | */ | 485 | */ |
484 | _tlbie(address, 0 /* 8xx doesn't care about PID */); | 486 | _tlbie(address, 0 /* 8xx doesn't care about PID */); |
485 | #endif | 487 | #endif |
486 | if (!PageReserved(page) | 488 | /* The _PAGE_USER test should really be _PAGE_EXEC, but |
489 | * older glibc versions execute some code from no-exec | ||
490 | * pages, which for now we are supporting. If exec-only | ||
491 | * pages are ever implemented, this will have to change. | ||
492 | */ | ||
493 | if (!PageReserved(page) && (pte_val(pte) & _PAGE_USER) | ||
487 | && !test_bit(PG_arch_1, &page->flags)) { | 494 | && !test_bit(PG_arch_1, &page->flags)) { |
488 | if (vma->vm_mm == current->active_mm) { | 495 | if (vma->vm_mm == current->active_mm) { |
489 | __flush_dcache_icache((void *) address); | 496 | __flush_dcache_icache((void *) address); |