diff options
-rw-r--r-- | arch/blackfin/include/asm/context.S | 12 | ||||
-rw-r--r-- | arch/blackfin/mach-common/entry.S | 15 | ||||
-rw-r--r-- | arch/blackfin/mach-common/interrupt.S | 7 |
3 files changed, 34 insertions, 0 deletions
diff --git a/arch/blackfin/include/asm/context.S b/arch/blackfin/include/asm/context.S index fada8e974a7..1f9060395a0 100644 --- a/arch/blackfin/include/asm/context.S +++ b/arch/blackfin/include/asm/context.S | |||
@@ -73,6 +73,11 @@ | |||
73 | #else | 73 | #else |
74 | cli r0; | 74 | cli r0; |
75 | #endif | 75 | #endif |
76 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
77 | sp += -12; | ||
78 | call _trace_hardirqs_off; | ||
79 | sp += 12; | ||
80 | #endif | ||
76 | [--sp] = RETI; /*orig_pc*/ | 81 | [--sp] = RETI; /*orig_pc*/ |
77 | /* Clear all L registers. */ | 82 | /* Clear all L registers. */ |
78 | r0 = 0 (x); | 83 | r0 = 0 (x); |
@@ -279,6 +284,13 @@ | |||
279 | RETN = [sp++]; | 284 | RETN = [sp++]; |
280 | RETX = [sp++]; | 285 | RETX = [sp++]; |
281 | RETI = [sp++]; | 286 | RETI = [sp++]; |
287 | |||
288 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
289 | sp += -12; | ||
290 | call _trace_hardirqs_on; | ||
291 | sp += 12; | ||
292 | #endif | ||
293 | |||
282 | RETS = [sp++]; | 294 | RETS = [sp++]; |
283 | 295 | ||
284 | #ifdef CONFIG_SMP | 296 | #ifdef CONFIG_SMP |
diff --git a/arch/blackfin/mach-common/entry.S b/arch/blackfin/mach-common/entry.S index ccfa7c490ff..1fa414f7852 100644 --- a/arch/blackfin/mach-common/entry.S +++ b/arch/blackfin/mach-common/entry.S | |||
@@ -966,6 +966,13 @@ ENTRY(_evt_evt14) | |||
966 | #else | 966 | #else |
967 | cli r0; | 967 | cli r0; |
968 | #endif | 968 | #endif |
969 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
970 | [--sp] = rets; | ||
971 | sp += -12; | ||
972 | call _trace_hardirqs_off; | ||
973 | sp += 12; | ||
974 | rets = [sp++]; | ||
975 | #endif | ||
969 | [--sp] = RETI; | 976 | [--sp] = RETI; |
970 | SP += 4; | 977 | SP += 4; |
971 | rts; | 978 | rts; |
@@ -989,6 +996,14 @@ ENTRY(_schedule_and_signal_from_int) | |||
989 | p1 = rets; | 996 | p1 = rets; |
990 | [sp + PT_RESERVED] = p1; | 997 | [sp + PT_RESERVED] = p1; |
991 | 998 | ||
999 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
1000 | /* trace_hardirqs_on() checks if all irqs are disabled. But here IRQ 15 | ||
1001 | * is turned on, so disable all irqs. */ | ||
1002 | cli r0; | ||
1003 | sp += -12; | ||
1004 | call _trace_hardirqs_on; | ||
1005 | sp += 12; | ||
1006 | #endif | ||
992 | #ifdef CONFIG_SMP | 1007 | #ifdef CONFIG_SMP |
993 | GET_PDA(p0, r0); /* Fetch current PDA (can't migrate to other CPU here) */ | 1008 | GET_PDA(p0, r0); /* Fetch current PDA (can't migrate to other CPU here) */ |
994 | r0 = [p0 + PDA_IRQFLAGS]; | 1009 | r0 = [p0 + PDA_IRQFLAGS]; |
diff --git a/arch/blackfin/mach-common/interrupt.S b/arch/blackfin/mach-common/interrupt.S index df984960cf9..0a0c088ead8 100644 --- a/arch/blackfin/mach-common/interrupt.S +++ b/arch/blackfin/mach-common/interrupt.S | |||
@@ -88,6 +88,13 @@ __common_int_entry: | |||
88 | #else | 88 | #else |
89 | cli r1; | 89 | cli r1; |
90 | #endif | 90 | #endif |
91 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
92 | [--sp] = r0; | ||
93 | sp += -12; | ||
94 | call _trace_hardirqs_off; | ||
95 | sp += 12; | ||
96 | r0 = [sp++]; | ||
97 | #endif | ||
91 | [--sp] = RETI; /* orig_pc */ | 98 | [--sp] = RETI; /* orig_pc */ |
92 | /* Clear all L registers. */ | 99 | /* Clear all L registers. */ |
93 | r1 = 0 (x); | 100 | r1 = 0 (x); |