aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2006-08-27 07:07:02 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2006-09-20 09:58:35 -0400
commit7ad1bcb25c5623f1f87c50fdf2272f58ff91db5a (patch)
tree75323e39a757fdb92ff4b44bd85ab4c72cbc1ed2 /arch
parentd84b47115a04d9f6b0da777e8aa8cd930d5b6b8b (diff)
[ARM] Add ARM irqtrace support
This adds support for irqtrace for lockdep on ARM. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/Kconfig4
-rw-r--r--arch/arm/kernel/entry-armv.S13
2 files changed, 17 insertions, 0 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index f81a62380add..d9376f048ed7 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -51,6 +51,10 @@ config GENERIC_HARDIRQS
51 bool 51 bool
52 default y 52 default y
53 53
54config TRACE_IRQFLAGS_SUPPORT
55 bool
56 default y
57
54config HARDIRQS_SW_RESEND 58config HARDIRQS_SW_RESEND
55 bool 59 bool
56 default y 60 default y
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index de4e33137901..bd623b73445f 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -191,6 +191,9 @@ __dabt_svc:
191__irq_svc: 191__irq_svc:
192 svc_entry 192 svc_entry
193 193
194#ifdef CONFIG_TRACE_IRQFLAGS
195 bl trace_hardirqs_off
196#endif
194#ifdef CONFIG_PREEMPT 197#ifdef CONFIG_PREEMPT
195 get_thread_info tsk 198 get_thread_info tsk
196 ldr r8, [tsk, #TI_PREEMPT] @ get preempt count 199 ldr r8, [tsk, #TI_PREEMPT] @ get preempt count
@@ -211,6 +214,10 @@ preempt_return:
211#endif 214#endif
212 ldr r0, [sp, #S_PSR] @ irqs are already disabled 215 ldr r0, [sp, #S_PSR] @ irqs are already disabled
213 msr spsr_cxsf, r0 216 msr spsr_cxsf, r0
217#ifdef CONFIG_TRACE_IRQFLAGS
218 tst r0, #PSR_I_BIT
219 bleq trace_hardirqs_on
220#endif
214 ldmia sp, {r0 - pc}^ @ load r0 - pc, cpsr 221 ldmia sp, {r0 - pc}^ @ load r0 - pc, cpsr
215 222
216 .ltorg 223 .ltorg
@@ -398,6 +405,9 @@ __dabt_usr:
398__irq_usr: 405__irq_usr:
399 usr_entry 406 usr_entry
400 407
408#ifdef CONFIG_TRACE_IRQFLAGS
409 bl trace_hardirqs_off
410#endif
401 get_thread_info tsk 411 get_thread_info tsk
402#ifdef CONFIG_PREEMPT 412#ifdef CONFIG_PREEMPT
403 ldr r8, [tsk, #TI_PREEMPT] @ get preempt count 413 ldr r8, [tsk, #TI_PREEMPT] @ get preempt count
@@ -412,6 +422,9 @@ __irq_usr:
412 teq r0, r7 422 teq r0, r7
413 strne r0, [r0, -r0] 423 strne r0, [r0, -r0]
414#endif 424#endif
425#ifdef CONFIG_TRACE_IRQFLAGS
426 bl trace_hardirqs_on
427#endif
415 428
416 mov why, #0 429 mov why, #0
417 b ret_to_user 430 b ret_to_user