浏览代码

Blackfin: add support for irqflags tracing

Signed-off-by: Yi Li <yi.li@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Yi Li 15 年之前
父节点
当前提交
441504df6b
共有 3 个文件被更改,包括 34 次插入0 次删除
  1. 12 0
      arch/blackfin/include/asm/context.S
  2. 15 0
      arch/blackfin/mach-common/entry.S
  3. 7 0
      arch/blackfin/mach-common/interrupt.S

+ 12 - 0
arch/blackfin/include/asm/context.S

@@ -72,6 +72,11 @@
 	sti r0;
 #else
 	cli r0;
+#endif
+#ifdef CONFIG_TRACE_IRQFLAGS
+	sp += -12;
+	call _trace_hardirqs_off;
+	sp += 12;
 #endif
 	[--sp] = RETI;  /*orig_pc*/
 	/* Clear all L registers.  */
@@ -279,6 +284,13 @@
 	RETN = [sp++];
 	RETX = [sp++];
 	RETI = [sp++];
+
+#ifdef CONFIG_TRACE_IRQFLAGS
+	sp += -12;
+	call _trace_hardirqs_on;
+	sp += 12;
+#endif
+
 	RETS = [sp++];
 
 #ifdef CONFIG_SMP

+ 15 - 0
arch/blackfin/mach-common/entry.S

@@ -965,6 +965,13 @@ ENTRY(_evt_evt14)
 	sti r0;
 #else
 	cli r0;
+#endif
+#ifdef CONFIG_TRACE_IRQFLAGS
+	[--sp] = rets;
+	sp += -12;
+	call _trace_hardirqs_off;
+	sp += 12;
+	rets = [sp++];
 #endif
 	[--sp] = RETI;
 	SP += 4;
@@ -989,6 +996,14 @@ ENTRY(_schedule_and_signal_from_int)
 	p1 = rets;
 	[sp + PT_RESERVED] = p1;
 
+#ifdef CONFIG_TRACE_IRQFLAGS
+	/* trace_hardirqs_on() checks if all irqs are disabled. But here IRQ 15
+	 * is turned on, so disable all irqs. */
+	cli r0;
+	sp += -12;
+	call _trace_hardirqs_on;
+	sp += 12;
+#endif
 #ifdef CONFIG_SMP
 	GET_PDA(p0, r0); 	/* Fetch current PDA (can't migrate to other CPU here) */
 	r0 = [p0 + PDA_IRQFLAGS];

+ 7 - 0
arch/blackfin/mach-common/interrupt.S

@@ -87,6 +87,13 @@ __common_int_entry:
 	sti r1;
 #else
 	cli r1;
+#endif
+#ifdef CONFIG_TRACE_IRQFLAGS
+	[--sp] = r0;
+	sp += -12;
+	call _trace_hardirqs_off;
+	sp += 12;
+	r0 = [sp++];
 #endif
 	[--sp] = RETI;  /* orig_pc */
 	/* Clear all L registers.  */