forked from luck/tmp_suning_uos_patched
sh: Add a few missing irqflags tracing markers.
save_regs contains an SR modification without an irqflags annotation, which resulted in a missing TRACE_IRQS_OFF in the interrupt exception path on SH-3/SH4. I've also moved the TRACE_IRQS_OFF/ON annotation when returning from the interrupt to just before we call __restore_all. This seems like the most logical place to put this because the annotation is for when we restore the SR register so we should delay the annotation until as last as possible. We were also missing a TRACE_IRQS_OFF in resume_kernel when CONFIG_PREEMPT is enabled. The end result is that this fixes up the lockdep engine debugging support with CONFIG_PREEMPT enabled on all SH-3/4 parts. Signed-off-by: Matt Fleming <matt@console-pimps.org> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
parent
63cd91dfd4
commit
f3a8308864
|
@ -508,6 +508,14 @@ ENTRY(handle_interrupt)
|
|||
bsr save_regs ! needs original pr value in k3
|
||||
mov #-1, k2 ! default vector kept in k2
|
||||
|
||||
stc sr, r0 ! get status register
|
||||
shlr2 r0
|
||||
and #0x3c, r0
|
||||
cmp/eq #0x3c, r0
|
||||
bf 9f
|
||||
TRACE_IRQS_OFF
|
||||
9:
|
||||
|
||||
! Setup return address and jump to do_IRQ
|
||||
mov.l 4f, r9 ! fetch return address
|
||||
lds r9, pr ! put return address in pr
|
||||
|
|
|
@ -77,15 +77,6 @@ ENTRY(ret_from_irq)
|
|||
!
|
||||
mov #OFF_SR, r0
|
||||
mov.l @(r0,r15), r0 ! get status register
|
||||
|
||||
shlr2 r0
|
||||
and #0x3c, r0
|
||||
cmp/eq #0x3c, r0
|
||||
bt 9f
|
||||
TRACE_IRQS_ON
|
||||
9:
|
||||
mov #OFF_SR, r0
|
||||
mov.l @(r0,r15), r0 ! get status register
|
||||
shll r0
|
||||
shll r0 ! kernel space?
|
||||
get_current_thread_info r8, r0
|
||||
|
@ -96,6 +87,7 @@ ENTRY(ret_from_irq)
|
|||
nop
|
||||
ENTRY(resume_kernel)
|
||||
cli
|
||||
TRACE_IRQS_OFF
|
||||
mov.l @(TI_PRE_COUNT,r8), r0 ! current_thread_info->preempt_count
|
||||
tst r0, r0
|
||||
bf noresched
|
||||
|
@ -213,12 +205,25 @@ syscall_trace_entry:
|
|||
mov.l r0, @(OFF_R0,r15) ! Return value
|
||||
|
||||
__restore_all:
|
||||
mov.l 1f, r0
|
||||
mov #OFF_SR, r0
|
||||
mov.l @(r0,r15), r0 ! get status register
|
||||
|
||||
shlr2 r0
|
||||
and #0x3c, r0
|
||||
cmp/eq #0x3c, r0
|
||||
bt 1f
|
||||
TRACE_IRQS_ON
|
||||
bra 2f
|
||||
nop
|
||||
1:
|
||||
TRACE_IRQS_OFF
|
||||
2:
|
||||
mov.l 3f, r0
|
||||
jmp @r0
|
||||
nop
|
||||
|
||||
.align 2
|
||||
1: .long restore_all
|
||||
3: .long restore_all
|
||||
|
||||
.align 2
|
||||
syscall_badsys: ! Bad syscall number
|
||||
|
|
Loading…
Reference in New Issue
Block a user