]> git.neil.brown.name Git - history.git/commitdiff
[ARM] Restore preempt count before reporting unbalanced preempt count
authorRussell King <rmk@flint.arm.linux.org.uk>
Fri, 5 Sep 2003 17:28:53 +0000 (18:28 +0100)
committerRussell King <rmk@flint.arm.linux.org.uk>
Fri, 5 Sep 2003 17:28:53 +0000 (18:28 +0100)
On ARM, we oops when we detect that an interrupt handler has unbalanced
the preempt count.  We should restore the preempt count when we started
to handle the interrupt and then cause the oops.

arch/arm/kernel/entry-armv.S

index 0a5c2ea51b9930b47f83d16d8873f8da2189dbda..f6f64875dfd4b77204d2bd208a627536cf1f6b77 100644 (file)
@@ -772,8 +772,8 @@ __irq_svc:  sub     sp, sp, #S_FRAME_SIZE
 preempt_return:
                ldr     r0, [r8, #TI_PREEMPT]           @ read preempt value
                teq     r0, r7
-               strne   r0, [r0, -r0]                   @ bug()
                str     r9, [r8, #TI_PREEMPT]           @ restore preempt count
+               strne   r0, [r0, -r0]                   @ bug()
 #endif
                ldr     r0, [sp, #S_PSR]                @ irqs are already disabled
                msr     spsr, r0
@@ -908,8 +908,8 @@ __irq_usr:  sub     sp, sp, #S_FRAME_SIZE
 #ifdef CONFIG_PREEMPT
                ldr     r0, [r8, #TI_PREEMPT]
                teq     r0, r7
-               strne   r0, [r0, -r0]
                str     r9, [r8, #TI_PREEMPT]
+               strne   r0, [r0, -r0]
                mov     tsk, r8
 #else
                get_thread_info tsk