diff options
Diffstat (limited to 'arch/tile/mm/fault.c')
| -rw-r--r-- | arch/tile/mm/fault.c | 64 | 
1 files changed, 13 insertions, 51 deletions
diff --git a/arch/tile/mm/fault.c b/arch/tile/mm/fault.c index 9b6b92f07de..0011f06b4fe 100644 --- a/arch/tile/mm/fault.c +++ b/arch/tile/mm/fault.c @@ -39,32 +39,11 @@  #include <asm/system.h>  #include <asm/pgalloc.h>  #include <asm/sections.h> +#include <asm/traps.h> +#include <asm/syscalls.h>  #include <arch/interrupts.h> -/* - * Unlock any spinlocks which will prevent us from getting the - * message out - */ -void bust_spinlocks(int yes) -{ -	int loglevel_save = console_loglevel; - -	if (yes) { -		oops_in_progress = 1; -		return; -	} -	oops_in_progress = 0; -	/* -	 * OK, the message is on the console.  Now we call printk() -	 * without oops_in_progress set so that printk will give klogd -	 * a poke.  Hold onto your hats... -	 */ -	console_loglevel = 15;	/* NMI oopser may have shut the console up */ -	printk(" "); -	console_loglevel = loglevel_save; -} -  static noinline void force_sig_info_fault(int si_signo, int si_code,  	unsigned long address, int fault_num, struct task_struct *tsk)  { @@ -301,10 +280,10 @@ static int handle_page_fault(struct pt_regs *regs,  	 */  	stack_offset = stack_pointer & (THREAD_SIZE-1);  	if (stack_offset < THREAD_SIZE / 8) { -		printk(KERN_ALERT "Potential stack overrun: sp %#lx\n", +		pr_alert("Potential stack overrun: sp %#lx\n",  		       stack_pointer);  		show_regs(regs); -		printk(KERN_ALERT "Killing current process %d/%s\n", +		pr_alert("Killing current process %d/%s\n",  		       tsk->pid, tsk->comm);  		do_group_exit(SIGKILL);  	} @@ -422,7 +401,7 @@ good_area:  	} else if (write) {  #ifdef TEST_VERIFY_AREA  		if (!is_page_fault && regs->cs == KERNEL_CS) -			printk("WP fault at "REGFMT"\n", regs->eip); +			pr_err("WP fault at "REGFMT"\n", regs->eip);  #endif  		if (!(vma->vm_flags & VM_WRITE))  			goto bad_area; @@ -450,6 +429,7 @@ good_area:  	else  		tsk->min_flt++; +#if CHIP_HAS_TILE_DMA() || CHIP_HAS_SN_PROC()  	/*  	 * If this was an asynchronous fault,  	 * restart the appropriate engine. @@ -472,6 +452,7 @@ good_area:  		break;  #endif  	} +#endif  	up_read(&mm->mmap_sem);  	return 1; @@ -514,17 +495,17 @@ no_context:  		pte_t *pte = lookup_address(address);  		if (pte && pte_present(*pte) && !pte_exec_kernel(*pte)) -			printk(KERN_CRIT "kernel tried to execute" +			pr_crit("kernel tried to execute"  			       " non-executable page - exploit attempt?"  			       " (uid: %d)\n", current->uid);  	}  #endif  	if (address < PAGE_SIZE) -		printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference\n"); +		pr_alert("Unable to handle kernel NULL pointer dereference\n");  	else -		printk(KERN_ALERT "Unable to handle kernel paging request\n"); -	printk(" at virtual address "REGFMT", pc "REGFMT"\n", -	       address, regs->pc); +		pr_alert("Unable to handle kernel paging request\n"); +	pr_alert(" at virtual address "REGFMT", pc "REGFMT"\n", +		 address, regs->pc);  	show_regs(regs); @@ -555,7 +536,7 @@ out_of_memory:  		down_read(&mm->mmap_sem);  		goto survive;  	} -	printk("VM: killing process %s\n", tsk->comm); +	pr_alert("VM: killing process %s\n", tsk->comm);  	if (!is_kernel_mode)  		do_group_exit(SIGKILL);  	goto no_context; @@ -573,31 +554,12 @@ do_sigbus:  #ifndef __tilegx__ -extern char sys_cmpxchg[], __sys_cmpxchg_end[]; -extern char __sys_cmpxchg_grab_lock[]; -extern char __start_atomic_asm_code[], __end_atomic_asm_code[]; - -/* - * We return this structure in registers to avoid having to write - * additional save/restore code in the intvec.S caller. - */ -struct intvec_state { -	void *handler; -	unsigned long vecnum; -	unsigned long fault_num; -	unsigned long info; -	unsigned long retval; -}; -  /* We must release ICS before panicking or we won't get anywhere. */  #define ics_panic(fmt, ...) do { \  	__insn_mtspr(SPR_INTERRUPT_CRITICAL_SECTION, 0); \  	panic(fmt, __VA_ARGS__); \  } while (0) -void do_page_fault(struct pt_regs *regs, int fault_num, -		   unsigned long address, unsigned long write); -  /*   * When we take an ITLB or DTLB fault or access violation in the   * supervisor while the critical section bit is set, the hypervisor is  |