nios2: Use preempt_schedule_irq
Follow aa0d532605
("ia64: Use preempt_schedule_irq") and use
preempt_schedule_irq instead of enabling/disabling interrupts and
messing around with PREEMPT_ACTIVE in the nios2 low-level preemption
code ourselves. Also get rid of the now needless re-check for
TIF_NEED_RESCHED, preempt_schedule_irq will already take care of
rescheduling.
This also fixes the following build error when building with
CONFIG_PREEMPT:
arch/nios2/kernel/built-in.o: In function `need_resched':
arch/nios2/kernel/entry.S:374: undefined reference to `PREEMPT_ACTIVE'
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Acked-by: Ley Foon Tan <lftan@altera.com>
This commit is contained in:
parent
6f3d2b0075
commit
1b0f44923e
1 changed files with 2 additions and 18 deletions
|
@ -365,30 +365,14 @@ ENTRY(ret_from_interrupt)
|
||||||
GET_THREAD_INFO r1
|
GET_THREAD_INFO r1
|
||||||
ldw r4, TI_PREEMPT_COUNT(r1)
|
ldw r4, TI_PREEMPT_COUNT(r1)
|
||||||
bne r4, r0, restore_all
|
bne r4, r0, restore_all
|
||||||
|
|
||||||
need_resched:
|
|
||||||
ldw r4, TI_FLAGS(r1) /* ? Need resched set */
|
ldw r4, TI_FLAGS(r1) /* ? Need resched set */
|
||||||
BTBZ r10, r4, TIF_NEED_RESCHED, restore_all
|
BTBZ r10, r4, TIF_NEED_RESCHED, restore_all
|
||||||
ldw r4, PT_ESTATUS(sp) /* ? Interrupts off */
|
ldw r4, PT_ESTATUS(sp) /* ? Interrupts off */
|
||||||
andi r10, r4, ESTATUS_EPIE
|
andi r10, r4, ESTATUS_EPIE
|
||||||
beq r10, r0, restore_all
|
beq r10, r0, restore_all
|
||||||
movia r4, PREEMPT_ACTIVE
|
call preempt_schedule_irq
|
||||||
stw r4, TI_PREEMPT_COUNT(r1)
|
|
||||||
rdctl r10, status /* enable intrs again */
|
|
||||||
ori r10, r10 ,STATUS_PIE
|
|
||||||
wrctl status, r10
|
|
||||||
PUSH r1
|
|
||||||
call schedule
|
|
||||||
POP r1
|
|
||||||
mov r4, r0
|
|
||||||
stw r4, TI_PREEMPT_COUNT(r1)
|
|
||||||
rdctl r10, status /* disable intrs */
|
|
||||||
andi r10, r10, %lo(~STATUS_PIE)
|
|
||||||
wrctl status, r10
|
|
||||||
br need_resched
|
|
||||||
#else
|
|
||||||
br restore_all
|
|
||||||
#endif
|
#endif
|
||||||
|
br restore_all
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* A few syscall wrappers
|
* A few syscall wrappers
|
||||||
|
|
Loading…
Reference in a new issue