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 @@  #include <linux/kprobes.h>  #include <linux/kdebug.h> +#include <asm/firmware.h>  #include <asm/page.h>  #include <asm/pgtable.h>  #include <asm/mmu.h> @@ -283,7 +284,7 @@ good_area:  				}  				pte_update(ptep, 0, _PAGE_HWEXEC |  					   _PAGE_ACCESSED); -				_tlbie(address, mm->context.id); +				local_flush_tlb_page(vma, address);  				pte_unmap_unlock(ptep, ptl);  				up_read(&mm->mmap_sem);  				return 0; @@ -318,9 +319,16 @@ good_area:  			goto do_sigbus;  		BUG();  	} -	if (ret & VM_FAULT_MAJOR) +	if (ret & VM_FAULT_MAJOR) {  		current->maj_flt++; -	else +#ifdef CONFIG_PPC_SMLPAR +		if (firmware_has_feature(FW_FEATURE_CMO)) { +			preempt_disable(); +			get_lppaca()->page_ins += (1 << PAGE_FACTOR); +			preempt_enable(); +		} +#endif +	} else  		current->min_flt++;  	up_read(&mm->mmap_sem);  	return 0; @@ -339,7 +347,7 @@ bad_area_nosemaphore:  	    && printk_ratelimit())  		printk(KERN_CRIT "kernel tried to execute NX-protected"  		       " page (%lx) - exploit attempt? (uid: %d)\n", -		       address, current->uid); +		       address, current_uid());  	return SIGSEGV;  | 
