diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2006-08-27 07:07:02 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-09-20 09:58:35 -0400 |
commit | 7ad1bcb25c5623f1f87c50fdf2272f58ff91db5a (patch) | |
tree | 75323e39a757fdb92ff4b44bd85ab4c72cbc1ed2 /arch | |
parent | d84b47115a04d9f6b0da777e8aa8cd930d5b6b8b (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/Kconfig | 4 | ||||
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 13 |
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 | ||
54 | config TRACE_IRQFLAGS_SUPPORT | ||
55 | bool | ||
56 | default y | ||
57 | |||
54 | config HARDIRQS_SW_RESEND | 58 | config 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 |