浏览代码

ARM: entry: instrument svc undefined exception handler with irqtrace

Add irqtrace function calls to the undefined exception handler, so
that we get sane lockdep traces from locking problems in undefined
exception handlers.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Russell King 14 年之前
父节点
当前提交
df295df6c3
共有 1 个文件被更改,包括 10 次插入0 次删除
  1. 10 0
      arch/arm/kernel/entry-armv.S

+ 10 - 0
arch/arm/kernel/entry-armv.S

@@ -268,6 +268,10 @@ __und_svc:
 	svc_entry
 	svc_entry
 #endif
 #endif
 
 
+#ifdef CONFIG_TRACE_IRQFLAGS
+	bl	trace_hardirqs_off
+#endif
+
 	@
 	@
 	@ call emulation code, which returns using r9 if it has emulated
 	@ call emulation code, which returns using r9 if it has emulated
 	@ the instruction, or the more conventional lr if we are to treat
 	@ the instruction, or the more conventional lr if we are to treat
@@ -300,6 +304,12 @@ __und_svc:
 	@ restore SPSR and restart the instruction
 	@ restore SPSR and restart the instruction
 	@
 	@
 	ldr	r5, [sp, #S_PSR]		@ Get SVC cpsr
 	ldr	r5, [sp, #S_PSR]		@ Get SVC cpsr
+#ifdef CONFIG_TRACE_IRQFLAGS
+	tst	r5, #PSR_I_BIT
+	bleq	trace_hardirqs_on
+	tst	r5, #PSR_I_BIT
+	blne	trace_hardirqs_off
+#endif
 	svc_exit r5				@ return from exception
 	svc_exit r5				@ return from exception
  UNWIND(.fnend		)
  UNWIND(.fnend		)
 ENDPROC(__und_svc)
 ENDPROC(__und_svc)