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 <dhowells@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
7b7ade1179
commit
1d72d9f83d
@ -1075,27 +1075,10 @@ __entry_return_from_kernel_interrupt:
|
|||||||
subicc gr5,#0,gr0,icc0
|
subicc gr5,#0,gr0,icc0
|
||||||
beq icc0,#0,__entry_return_direct
|
beq icc0,#0,__entry_return_direct
|
||||||
|
|
||||||
__entry_preempt_need_resched:
|
subcc gr0,gr0,gr0,icc2 /* set Z and clear C */
|
||||||
ldi @(gr15,#TI_FLAGS),gr4
|
call preempt_schedule_irq
|
||||||
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
|
|
||||||
#endif
|
#endif
|
||||||
|
bra __entry_return_direct
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
Loading…
Reference in New Issue
Block a user