From: Al Viro Date: Fri, 2 Nov 2012 16:05:44 +0000 (-0400) Subject: frv: fix the broken preempt X-Git-Tag: upstream/snapshot3+hdmi~6300^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1d72d9f83df057e71c7951def41138a0230bf737;p=platform%2Fadaptation%2Frenesas_rcar%2Frenesas_kernel.git frv: fix the broken preempt Just get %icc2 into the state we would have after local_irq_disable() and physical IRQ having happened since then. Then we can simply use preempt_schedule_irq() and be done with the whole mess. Acked-by: David Howells Signed-off-by: Al Viro --- diff --git a/arch/frv/kernel/entry.S b/arch/frv/kernel/entry.S index b1cd7e8..dfcd263 100644 --- a/arch/frv/kernel/entry.S +++ b/arch/frv/kernel/entry.S @@ -1075,27 +1075,10 @@ __entry_return_from_kernel_interrupt: subicc gr5,#0,gr0,icc0 beq icc0,#0,__entry_return_direct -__entry_preempt_need_resched: - ldi @(gr15,#TI_FLAGS),gr4 - andicc gr4,#_TIF_NEED_RESCHED,gr0,icc0 - beq icc0,#1,__entry_return_direct - - setlos #PREEMPT_ACTIVE,gr5 - sti gr5,@(gr15,#TI_PRE_COUNT) - - andi gr23,#~PSR_PIL,gr23 - movgs gr23,psr - - call schedule - sti gr0,@(gr15,#TI_PRE_COUNT) - - movsg psr,gr23 - ori gr23,#PSR_PIL_14,gr23 - movgs gr23,psr - bra __entry_preempt_need_resched -#else - bra __entry_return_direct + subcc gr0,gr0,gr0,icc2 /* set Z and clear C */ + call preempt_schedule_irq #endif + bra __entry_return_direct ###############################################################################