Blackfin: add support for irqflags tracing
authorYi Li <yi.li@analog.com>
Tue, 19 Jan 2010 04:35:28 +0000 (04:35 +0000)
committerMike Frysinger <vapier@gentoo.org>
Tue, 9 Mar 2010 05:30:49 +0000 (00:30 -0500)
Signed-off-by: Yi Li <yi.li@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
arch/blackfin/include/asm/context.S
arch/blackfin/mach-common/entry.S
arch/blackfin/mach-common/interrupt.S

index fada8e9..1f90603 100644 (file)
 #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.  */
        r0 = 0 (x);
        RETN = [sp++];
        RETX = [sp++];
        RETI = [sp++];
+
+#ifdef CONFIG_TRACE_IRQFLAGS
+       sp += -12;
+       call _trace_hardirqs_on;
+       sp += 12;
+#endif
+
        RETS = [sp++];
 
 #ifdef CONFIG_SMP
index ccfa7c4..1fa414f 100644 (file)
@@ -966,6 +966,13 @@ ENTRY(_evt_evt14)
 #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;
        rts;
@@ -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];
index df98496..0a0c088 100644 (file)
@@ -88,6 +88,13 @@ __common_int_entry:
 #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.  */
        r1 = 0 (x);