diff options
Diffstat (limited to 'arch/xtensa/mm/fault.c')
| -rw-r--r-- | arch/xtensa/mm/fault.c | 18 | 
1 files changed, 5 insertions, 13 deletions
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c index 8b9b6f44bb06..c111a833205a 100644 --- a/arch/xtensa/mm/fault.c +++ b/arch/xtensa/mm/fault.c @@ -39,13 +39,13 @@ void do_page_fault(struct pt_regs *regs)  	struct mm_struct *mm = current->mm;  	unsigned int exccause = regs->exccause;  	unsigned int address = regs->excvaddr; -	siginfo_t info; +	int code;  	int is_write, is_exec;  	int fault;  	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; -	info.si_code = SEGV_MAPERR; +	code = SEGV_MAPERR;  	/* We fault-in kernel-space virtual memory on-demand. The  	 * 'reference' page table is init_mm.pgd. @@ -91,7 +91,7 @@ retry:  	 */  good_area: -	info.si_code = SEGV_ACCERR; +	code = SEGV_ACCERR;  	if (is_write) {  		if (!(vma->vm_flags & VM_WRITE)) @@ -157,11 +157,7 @@ bad_area:  	if (user_mode(regs)) {  		current->thread.bad_vaddr = address;  		current->thread.error_code = is_write; -		info.si_signo = SIGSEGV; -		info.si_errno = 0; -		/* info.si_code has been set above */ -		info.si_addr = (void *) address; -		force_sig_info(SIGSEGV, &info, current); +		force_sig_fault(SIGSEGV, code, (void *) address, current);  		return;  	}  	bad_page_fault(regs, address, SIGSEGV); @@ -186,11 +182,7 @@ do_sigbus:  	 * or user mode.  	 */  	current->thread.bad_vaddr = address; -	info.si_code = SIGBUS; -	info.si_errno = 0; -	info.si_code = BUS_ADRERR; -	info.si_addr = (void *) address; -	force_sig_info(SIGBUS, &info, current); +	force_sig_fault(SIGBUS, BUS_ADRERR, (void *) address, current);  	/* Kernel mode? Handle exceptions or die */  	if (!user_mode(regs))  |