From 9e0850dd869d0c639a48b72fde8e25dc9a3c3702 Mon Sep 17 00:00:00 2001 From: Russell King Date: Sun, 13 Apr 2008 17:47:35 +0100 Subject: [PATCH] --- yaml --- r: 91163 b: refs/heads/master c: 28fab1a2fd5b1aa92f9ad1adc9e3b8914f89bc74 h: refs/heads/master i: 91161: 2060426d141999483e68c20cebc0b7aa8f16554f 91159: caf00de5d113a9de868da3da6724f1578f77749e v: v3 --- [refs] | 2 +- trunk/arch/arm/kernel/entry-armv.S | 24 +++++------------------- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/[refs] b/[refs] index c86976e5aff9..f487cfebe9cc 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 84081bd2205efd1e6c7203bc7099b4350839ee39 +refs/heads/master: 28fab1a2fd5b1aa92f9ad1adc9e3b8914f89bc74 diff --git a/trunk/arch/arm/kernel/entry-armv.S b/trunk/arch/arm/kernel/entry-armv.S index a46d5b456765..65cef872c5f2 100644 --- a/trunk/arch/arm/kernel/entry-armv.S +++ b/trunk/arch/arm/kernel/entry-armv.S @@ -209,14 +209,12 @@ __irq_svc: irq_handler #ifdef CONFIG_PREEMPT + str r8, [tsk, #TI_PREEMPT] @ restore preempt count ldr r0, [tsk, #TI_FLAGS] @ get flags + teq r8, #0 @ if preempt count != 0 + movne r0, #0 @ force flags to 0 tst r0, #_TIF_NEED_RESCHED blne svc_preempt -preempt_return: - ldr r0, [tsk, #TI_PREEMPT] @ read preempt value - str r8, [tsk, #TI_PREEMPT] @ restore preempt count - teq r0, r7 - strne r0, [r0, -r0] @ bug() #endif ldr r0, [sp, #S_PSR] @ irqs are already disabled msr spsr_cxsf, r0 @@ -230,19 +228,11 @@ preempt_return: #ifdef CONFIG_PREEMPT svc_preempt: - teq r8, #0 @ was preempt count = 0 - ldreq r6, .LCirq_stat - movne pc, lr @ no - ldr r0, [r6, #4] @ local_irq_count - ldr r1, [r6, #8] @ local_bh_count - adds r0, r0, r1 - movne pc, lr - mov r7, #0 @ preempt_schedule_irq - str r7, [tsk, #TI_PREEMPT] @ expects preempt_count == 0 + 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 - beq preempt_return @ go again + moveq pc, r8 @ go again b 1b #endif @@ -326,10 +316,6 @@ __pabt_svc: #endif .LCfp: .word fp_enter -#ifdef CONFIG_PREEMPT -.LCirq_stat: - .word irq_stat -#endif /* * User mode handlers