diff options
Diffstat (limited to 'arch/microblaze/mm/fault.c')
| -rw-r--r-- | arch/microblaze/mm/fault.c | 15 | 
1 files changed, 5 insertions, 10 deletions
diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c index 956607a63f4..d9d249a66ff 100644 --- a/arch/microblaze/mm/fault.c +++ b/arch/microblaze/mm/fault.c @@ -69,7 +69,7 @@ static int store_updates_sp(struct pt_regs *regs)   * It is called from do_page_fault above and from some of the procedures   * in traps.c.   */ -static void bad_page_fault(struct pt_regs *regs, unsigned long address, int sig) +void bad_page_fault(struct pt_regs *regs, unsigned long address, int sig)  {  	const struct exception_table_entry *fixup;  /* MS: no context */ @@ -122,15 +122,10 @@ void do_page_fault(struct pt_regs *regs, unsigned long address,  	}  #endif /* CONFIG_KGDB */ -	if (in_atomic() || mm == NULL) { -		/* FIXME */ -		if (kernel_mode(regs)) { -			printk(KERN_EMERG -				"Page fault in kernel mode - Oooou!!! pid %d\n", -				current->pid); -			_exception(SIGSEGV, regs, code, address); -			return; -		} +	if (in_atomic() || !mm) { +		if (kernel_mode(regs)) +			goto bad_area_nosemaphore; +  		/* in_atomic() in user mode is really bad,  		   as is current->mm == NULL. */  		printk(KERN_EMERG "Page fault in user mode with "  |