diff options
Diffstat (limited to 'arch/nds32/mm/fault.c')
| -rw-r--r-- | arch/nds32/mm/fault.c | 18 | 
1 files changed, 5 insertions, 13 deletions
diff --git a/arch/nds32/mm/fault.c b/arch/nds32/mm/fault.c index 3a246fb8098c..9bdb7c3ecbb6 100644 --- a/arch/nds32/mm/fault.c +++ b/arch/nds32/mm/fault.c @@ -72,7 +72,7 @@ void do_page_fault(unsigned long entry, unsigned long addr,  	struct task_struct *tsk;  	struct mm_struct *mm;  	struct vm_area_struct *vma; -	siginfo_t info; +	int si_code;  	int fault;  	unsigned int mask = VM_READ | VM_WRITE | VM_EXEC;  	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; @@ -80,7 +80,7 @@ void do_page_fault(unsigned long entry, unsigned long addr,  	error_code = error_code & (ITYPE_mskINST | ITYPE_mskETYPE);  	tsk = current;  	mm = tsk->mm; -	info.si_code = SEGV_MAPERR; +	si_code = SEGV_MAPERR;  	/*  	 * We fault-in kernel-space virtual memory on-demand. The  	 * 'reference' page table is init_mm.pgd. @@ -161,7 +161,7 @@ retry:  	 */  good_area: -	info.si_code = SEGV_ACCERR; +	si_code = SEGV_ACCERR;  	/* first do some preliminary protection checks */  	if (entry == ENTRY_PTE_NOT_PRESENT) { @@ -266,11 +266,7 @@ bad_area_nosemaphore:  		tsk->thread.address = addr;  		tsk->thread.error_code = error_code;  		tsk->thread.trap_no = entry; -		info.si_signo = SIGSEGV; -		info.si_errno = 0; -		/* info.si_code has been set above */ -		info.si_addr = (void *)addr; -		force_sig_info(SIGSEGV, &info, tsk); +		force_sig_fault(SIGSEGV, si_code, (void __user *)addr, tsk);  		return;  	} @@ -339,11 +335,7 @@ do_sigbus:  	tsk->thread.address = addr;  	tsk->thread.error_code = error_code;  	tsk->thread.trap_no = entry; -	info.si_signo = SIGBUS; -	info.si_errno = 0; -	info.si_code = BUS_ADRERR; -	info.si_addr = (void *)addr; -	force_sig_info(SIGBUS, &info, tsk); +	force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)addr, tsk);  	return;  | 
