diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2010-05-10 11:59:37 +0200 | 
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2010-05-10 14:20:42 +0200 | 
| commit | dbb6be6d5e974c42bbecd183effaa0df69e1dd8b (patch) | |
| tree | 5735cb47e70853d057a9881dd0ce44b83e88fa63 /arch/blackfin/mach-common/interrupt.S | |
| parent | 6a867a395558a7f882d041783e4cdea6744ca2bf (diff) | |
| parent | b57f95a38233a2e73b679bea4a5453a1cc2a1cc9 (diff) | |
| download | olio-linux-3.10-dbb6be6d5e974c42bbecd183effaa0df69e1dd8b.tar.xz olio-linux-3.10-dbb6be6d5e974c42bbecd183effaa0df69e1dd8b.zip  | |
Merge branch 'linus' into timers/core
Reason: Further posix_cpu_timer patches depend on mainline changes
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/blackfin/mach-common/interrupt.S')
| -rw-r--r-- | arch/blackfin/mach-common/interrupt.S | 35 | 
1 files changed, 29 insertions, 6 deletions
diff --git a/arch/blackfin/mach-common/interrupt.S b/arch/blackfin/mach-common/interrupt.S index 8085ff1cce0..cee62cf4acd 100644 --- a/arch/blackfin/mach-common/interrupt.S +++ b/arch/blackfin/mach-common/interrupt.S @@ -88,6 +88,13 @@ __common_int_entry:  #else  	cli r1;  #endif +#ifdef CONFIG_TRACE_IRQFLAGS +	[--sp] = r0; +	sp += -12; +	call _trace_hardirqs_off; +	sp += 12; +	r0 = [sp++]; +#endif  	[--sp] = RETI;  /* orig_pc */  	/* Clear all L registers.  */  	r1 = 0 (x); @@ -109,10 +116,10 @@ __common_int_entry:  	cc = r0 == 0;  	if cc jump .Lcommon_restore_context;  #else /* CONFIG_IPIPE */ -	call _do_irq; +	pseudo_long_call _do_irq, p2;  	SP += 12;  #endif /* CONFIG_IPIPE */ -	call _return_from_int; +	pseudo_long_call _return_from_int, p2;  .Lcommon_restore_context:  	RESTORE_CONTEXT  	rti; @@ -168,7 +175,7 @@ ENTRY(_evt_ivhw)  	r0 = sp;        /* stack frame pt_regs pointer argument ==> r0 */  	SP += -12; -	call _trap_c; +	pseudo_long_call _trap_c, p5;  	SP += 12;  #ifdef EBIU_ERRMST @@ -179,7 +186,7 @@ ENTRY(_evt_ivhw)  	w[p0] = r0.l;  #endif -	call _ret_from_exception; +	pseudo_long_call _ret_from_exception, p2;  .Lcommon_restore_all_sys:  	RESTORE_ALL_SYS @@ -187,12 +194,28 @@ ENTRY(_evt_ivhw)  ENDPROC(_evt_ivhw)  /* Interrupt routine for evt2 (NMI). - * We don't actually use this, so just return.   * For inner circle type details, please see:   * http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:nmi   */  ENTRY(_evt_nmi) +#ifndef CONFIG_NMI_WATCHDOG  .weak _evt_nmi +#else +	/* Not take account of CPLBs, this handler will not return */ +	SAVE_ALL_SYS +	r0 = sp; +	r1 = retn; +	[sp + PT_PC] = r1; +	trace_buffer_save(p4,r5); + +	ANOMALY_283_315_WORKAROUND(p4, r5) + +	SP += -12; +	call _do_nmi; +	SP += 12; +1: +	jump 1b; +#endif  	rtn;  ENDPROC(_evt_nmi) @@ -223,7 +246,7 @@ ENTRY(_evt_system_call)  #ifdef CONFIG_FRAME_POINTER  	fp = 0;  #endif -	call _system_call; +	pseudo_long_call _system_call, p2;  	jump .Lcommon_restore_context;  ENDPROC(_evt_system_call)  |