Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1b0f4492 authored by Tobias Klauser's avatar Tobias Klauser Committed by Ley Foon Tan
Browse files

nios2: Use preempt_schedule_irq



Follow aa0d5326 ("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: default avatarTobias Klauser <tklauser@distanz.ch>
Acked-by: default avatarLey Foon Tan <lftan@altera.com>
parent 6f3d2b00
Loading
Loading
Loading
Loading
+2 −18
Original line number Diff line number Diff line
@@ -365,30 +365,14 @@ ENTRY(ret_from_interrupt)
	GET_THREAD_INFO	r1
	ldw	r4, TI_PREEMPT_COUNT(r1)
	bne	r4, r0, restore_all

need_resched:
	ldw	r4, TI_FLAGS(r1)		/* ? Need resched set */
	BTBZ	r10, r4, TIF_NEED_RESCHED, restore_all
	ldw	r4, PT_ESTATUS(sp)	/* ? Interrupts off */
	andi	r10, r4, ESTATUS_EPIE
	beq	r10, r0, restore_all
	movia	r4, PREEMPT_ACTIVE
	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
	call	preempt_schedule_irq
#endif
	br	restore_all

/***********************************************************************
 * A few syscall wrappers