Message ID | 20190131182339.9835-3-valentin.schneider@arm.com (mailing list archive) |
---|---|
State | RFC |
Headers | show |
Series | arm/arm64: entry: Remove need_resched() loop | expand |
Hi Valentin, On 31/01/2019 18:23, Valentin Schneider wrote: > Since the enabling and disabling of IRQs within preempt_schedule_irq() > is contained in a need_resched() loop, we don't need the outer arch > code loop. > > Signed-off-by: Valentin Schneider <valentin.schneider@arm.com> > Cc: Russell King <linux@armlinux.org.uk> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Will Deacon <will.deacon@arm.com> > Cc: Julien Thierry <julien.thierry@arm.com> > Cc: linux-arm-kernel@lists.infradead.org Reviewed-by: Julien Thierry <julien.thierry@arm.com> Cheers, > --- > arch/arm/kernel/entry-armv.S | 12 +----------- > 1 file changed, 1 insertion(+), 11 deletions(-) > > diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S > index e85a3af9ddeb..a7ac22e09bb2 100644 > --- a/arch/arm/kernel/entry-armv.S > +++ b/arch/arm/kernel/entry-armv.S > @@ -220,7 +220,7 @@ __irq_svc: > teq r8, #0 @ if preempt count != 0 > movne r0, #0 @ force flags to 0 > tst r0, #_TIF_NEED_RESCHED > - blne svc_preempt > + blne preempt_schedule_irq @ irq en/disable is done inside > #endif > > svc_exit r5, irq = 1 @ return from exception > @@ -229,16 +229,6 @@ ENDPROC(__irq_svc) > > .ltorg > > -#ifdef CONFIG_PREEMPT > -svc_preempt: > - mov r8, lr > -1: bl preempt_schedule_irq @ irq en/disable is done inside > - ldr r0, [tsk, #TI_FLAGS] @ get new tasks TI_FLAGS > - tst r0, #_TIF_NEED_RESCHED > - reteq r8 @ go again > - b 1b > -#endif > - > __und_fault: > @ Correct the PC such that it is pointing at the instruction > @ which caused the fault. If the faulting instruction was ARM >
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index e85a3af9ddeb..a7ac22e09bb2 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S @@ -220,7 +220,7 @@ __irq_svc: teq r8, #0 @ if preempt count != 0 movne r0, #0 @ force flags to 0 tst r0, #_TIF_NEED_RESCHED - blne svc_preempt + blne preempt_schedule_irq @ irq en/disable is done inside #endif svc_exit r5, irq = 1 @ return from exception @@ -229,16 +229,6 @@ ENDPROC(__irq_svc) .ltorg -#ifdef CONFIG_PREEMPT -svc_preempt: - mov r8, lr -1: bl preempt_schedule_irq @ irq en/disable is done inside - ldr r0, [tsk, #TI_FLAGS] @ get new tasks TI_FLAGS - tst r0, #_TIF_NEED_RESCHED - reteq r8 @ go again - b 1b -#endif - __und_fault: @ Correct the PC such that it is pointing at the instruction @ which caused the fault. If the faulting instruction was ARM
Since the enabling and disabling of IRQs within preempt_schedule_irq() is contained in a need_resched() loop, we don't need the outer arch code loop. Signed-off-by: Valentin Schneider <valentin.schneider@arm.com> Cc: Russell King <linux@armlinux.org.uk> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Will Deacon <will.deacon@arm.com> Cc: Julien Thierry <julien.thierry@arm.com> Cc: linux-arm-kernel@lists.infradead.org --- arch/arm/kernel/entry-armv.S | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-)