diff options
Diffstat (limited to 'arch/powerpc/mm/fault.c')
-rw-r--r-- | arch/powerpc/mm/fault.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c index 565b7a237c84..91c7b8636b8a 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/kprobes.h> | 30 | #include <linux/kprobes.h> |
31 | #include <linux/kdebug.h> | 31 | #include <linux/kdebug.h> |
32 | 32 | ||
33 | #include <asm/firmware.h> | ||
33 | #include <asm/page.h> | 34 | #include <asm/page.h> |
34 | #include <asm/pgtable.h> | 35 | #include <asm/pgtable.h> |
35 | #include <asm/mmu.h> | 36 | #include <asm/mmu.h> |
@@ -283,7 +284,7 @@ good_area: | |||
283 | } | 284 | } |
284 | pte_update(ptep, 0, _PAGE_HWEXEC | | 285 | pte_update(ptep, 0, _PAGE_HWEXEC | |
285 | _PAGE_ACCESSED); | 286 | _PAGE_ACCESSED); |
286 | _tlbie(address, mm->context.id); | 287 | local_flush_tlb_page(vma, address); |
287 | pte_unmap_unlock(ptep, ptl); | 288 | pte_unmap_unlock(ptep, ptl); |
288 | up_read(&mm->mmap_sem); | 289 | up_read(&mm->mmap_sem); |
289 | return 0; | 290 | return 0; |
@@ -318,9 +319,16 @@ good_area: | |||
318 | goto do_sigbus; | 319 | goto do_sigbus; |
319 | BUG(); | 320 | BUG(); |
320 | } | 321 | } |
321 | if (ret & VM_FAULT_MAJOR) | 322 | if (ret & VM_FAULT_MAJOR) { |
322 | current->maj_flt++; | 323 | current->maj_flt++; |
323 | else | 324 | #ifdef CONFIG_PPC_SMLPAR |
325 | if (firmware_has_feature(FW_FEATURE_CMO)) { | ||
326 | preempt_disable(); | ||
327 | get_lppaca()->page_ins += (1 << PAGE_FACTOR); | ||
328 | preempt_enable(); | ||
329 | } | ||
330 | #endif | ||
331 | } else | ||
324 | current->min_flt++; | 332 | current->min_flt++; |
325 | up_read(&mm->mmap_sem); | 333 | up_read(&mm->mmap_sem); |
326 | return 0; | 334 | return 0; |
@@ -339,7 +347,7 @@ bad_area_nosemaphore: | |||
339 | && printk_ratelimit()) | 347 | && printk_ratelimit()) |
340 | printk(KERN_CRIT "kernel tried to execute NX-protected" | 348 | printk(KERN_CRIT "kernel tried to execute NX-protected" |
341 | " page (%lx) - exploit attempt? (uid: %d)\n", | 349 | " page (%lx) - exploit attempt? (uid: %d)\n", |
342 | address, current->uid); | 350 | address, current_uid()); |
343 | 351 | ||
344 | return SIGSEGV; | 352 | return SIGSEGV; |
345 | 353 | ||