diff options
Diffstat (limited to 'arch/sparc/kernel/rtrap_64.S')
| -rw-r--r-- | arch/sparc/kernel/rtrap_64.S | 33 | 
1 files changed, 10 insertions, 23 deletions
diff --git a/arch/sparc/kernel/rtrap_64.S b/arch/sparc/kernel/rtrap_64.S index 77f1b95e080..39f0c662f4c 100644 --- a/arch/sparc/kernel/rtrap_64.S +++ b/arch/sparc/kernel/rtrap_64.S @@ -18,15 +18,16 @@  #define		RTRAP_PSTATE_IRQOFF	(PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV)  #define		RTRAP_PSTATE_AG_IRQOFF	(PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV|PSTATE_AG) +#ifdef CONFIG_CONTEXT_TRACKING +# define SCHEDULE_USER schedule_user +#else +# define SCHEDULE_USER schedule +#endif +  		.text  		.align			32 -__handle_softirq: -		call			do_softirq -		 nop -		ba,a,pt			%xcc, __handle_softirq_continue -		 nop  __handle_preemption: -		call			schedule +		call			SCHEDULE_USER  		 wrpr			%g0, RTRAP_PSTATE, %pstate  		ba,pt			%xcc, __handle_preemption_continue  		 wrpr			%g0, RTRAP_PSTATE_IRQOFF, %pstate @@ -78,20 +79,8 @@ rtrap_nmi:	ldx			[%sp + PTREGS_OFF + PT_V9_TSTATE], %l1  		.globl			rtrap_irq, rtrap, irqsz_patchme, rtrap_xcall  rtrap_irq:  rtrap: -#ifndef CONFIG_SMP -		sethi			%hi(__cpu_data), %l0 -		lduw			[%l0 + %lo(__cpu_data)], %l1 -#else -		sethi			%hi(__cpu_data), %l0 -		or			%l0, %lo(__cpu_data), %l0 -		lduw			[%l0 + %g5], %l1 -#endif -		cmp			%l1, 0 -  		/* mm/ultra.S:xcall_report_regs KNOWS about this load. */ -		bne,pn			%icc, __handle_softirq -		 ldx			[%sp + PTREGS_OFF + PT_V9_TSTATE], %l1 -__handle_softirq_continue: +		ldx			[%sp + PTREGS_OFF + PT_V9_TSTATE], %l1  rtrap_xcall:  		sethi			%hi(0xf << 20), %l4  		and			%l1, %l4, %l4 @@ -323,12 +312,10 @@ to_kernel:  		 nop  		cmp			%l4, 0  		bne,pn			%xcc, kern_fpucheck -		 sethi			%hi(PREEMPT_ACTIVE), %l6 -		stw			%l6, [%g6 + TI_PRE_COUNT] -		call			schedule +		 nop +		call			preempt_schedule_irq  		 nop  		ba,pt			%xcc, rtrap -		 stw			%g0, [%g6 + TI_PRE_COUNT]  #endif  kern_fpucheck:	ldub			[%g6 + TI_FPDEPTH], %l5  		brz,pt			%l5, rt_continue  | 
