diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2006-04-01 15:17:45 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2006-04-18 22:14:18 -0400 |
commit | 93373ed4d87fb02554ce020d929388ac16913664 (patch) | |
tree | 01925421619219d00c39744b0a4cc79b8f7f719b | |
parent | c9e321e095384f25f2b7ffef456794cfa876dafc (diff) |
[MIPS] Rewrite spurious_interrupt from assembler to C.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
-rw-r--r-- | arch/mips/au1000/common/int-handler.S | 3 | ||||
-rw-r--r-- | arch/mips/ddb5xxx/ddb5476/int-handler.S | 3 | ||||
-rw-r--r-- | arch/mips/ddb5xxx/ddb5476/vrc5476_irq.c | 4 | ||||
-rw-r--r-- | arch/mips/ddb5xxx/ddb5477/int-handler.S | 4 | ||||
-rw-r--r-- | arch/mips/dec/int-handler.S | 4 | ||||
-rw-r--r-- | arch/mips/galileo-boards/ev96100/int-handler.S | 3 | ||||
-rw-r--r-- | arch/mips/gt64120/ev64120/int-handler.S | 3 | ||||
-rw-r--r-- | arch/mips/jazz/int-handler.S | 3 | ||||
-rw-r--r-- | arch/mips/kernel/entry.S | 26 | ||||
-rw-r--r-- | arch/mips/kernel/irq.c | 5 | ||||
-rw-r--r-- | arch/mips/mips-boards/generic/mipsIRQ.S | 4 | ||||
-rw-r--r-- | arch/mips/mips-boards/sim/sim_irq.S | 4 | ||||
-rw-r--r-- | arch/mips/momentum/ocelot_3/int-handler.S | 4 | ||||
-rw-r--r-- | arch/mips/momentum/ocelot_c/int-handler.S | 3 | ||||
-rw-r--r-- | arch/mips/philips/pnx8550/common/mipsIRQ.S | 3 | ||||
-rw-r--r-- | arch/mips/tx4927/common/tx4927_irq_handler.S | 3 | ||||
-rw-r--r-- | arch/mips/vr41xx/common/int-handler.S | 4 | ||||
-rw-r--r-- | include/asm-mips/irq.h | 1 |
18 files changed, 40 insertions, 44 deletions
diff --git a/arch/mips/au1000/common/int-handler.S b/arch/mips/au1000/common/int-handler.S index 1c4ca883321e..65baa8a8c522 100644 --- a/arch/mips/au1000/common/int-handler.S +++ b/arch/mips/au1000/common/int-handler.S | |||
@@ -64,5 +64,6 @@ NESTED(au1000_IRQ, PT_SIZE, sp) | |||
64 | 64 | ||
65 | 5: | 65 | 5: |
66 | move a0, sp | 66 | move a0, sp |
67 | j spurious_interrupt | 67 | jal spurious_interrupt |
68 | j ret_from_irq | ||
68 | END(au1000_IRQ) | 69 | END(au1000_IRQ) |
diff --git a/arch/mips/ddb5xxx/ddb5476/int-handler.S b/arch/mips/ddb5xxx/ddb5476/int-handler.S index 12c292e189ba..0c2bdae96bb1 100644 --- a/arch/mips/ddb5xxx/ddb5476/int-handler.S +++ b/arch/mips/ddb5xxx/ddb5476/int-handler.S | |||
@@ -54,7 +54,8 @@ | |||
54 | .set reorder | 54 | .set reorder |
55 | 55 | ||
56 | /* wrong alarm or masked ... */ | 56 | /* wrong alarm or masked ... */ |
57 | // j spurious_interrupt | 57 | // jal spurious_interrupt |
58 | // j ret_from_irq | ||
58 | move a0, sp | 59 | move a0, sp |
59 | jal vrc5476_irq_dispatch | 60 | jal vrc5476_irq_dispatch |
60 | j ret_from_irq | 61 | j ret_from_irq |
diff --git a/arch/mips/ddb5xxx/ddb5476/vrc5476_irq.c b/arch/mips/ddb5xxx/ddb5476/vrc5476_irq.c index f66fe5b58636..581eabad5f82 100644 --- a/arch/mips/ddb5xxx/ddb5476/vrc5476_irq.c +++ b/arch/mips/ddb5xxx/ddb5476/vrc5476_irq.c | |||
@@ -80,8 +80,6 @@ vrc5476_irq_init(u32 base) | |||
80 | asmlinkage void | 80 | asmlinkage void |
81 | vrc5476_irq_dispatch(struct pt_regs *regs) | 81 | vrc5476_irq_dispatch(struct pt_regs *regs) |
82 | { | 82 | { |
83 | extern void spurious_interrupt(void); | ||
84 | |||
85 | u32 mask; | 83 | u32 mask; |
86 | int nile4_irq; | 84 | int nile4_irq; |
87 | 85 | ||
@@ -107,5 +105,5 @@ vrc5476_irq_dispatch(struct pt_regs *regs) | |||
107 | return; | 105 | return; |
108 | } | 106 | } |
109 | } | 107 | } |
110 | spurious_interrupt(); | 108 | spurious_interrupt(regs); |
111 | } | 109 | } |
diff --git a/arch/mips/ddb5xxx/ddb5477/int-handler.S b/arch/mips/ddb5xxx/ddb5477/int-handler.S index a2502a14400e..9884874dbeb5 100644 --- a/arch/mips/ddb5xxx/ddb5477/int-handler.S +++ b/arch/mips/ddb5xxx/ddb5477/int-handler.S | |||
@@ -44,8 +44,8 @@ | |||
44 | .set reorder | 44 | .set reorder |
45 | 45 | ||
46 | /* wrong alarm or masked ... */ | 46 | /* wrong alarm or masked ... */ |
47 | j spurious_interrupt | 47 | jal spurious_interrupt |
48 | nop | 48 | j ret_from_irq |
49 | END(ddb5477_handle_int) | 49 | END(ddb5477_handle_int) |
50 | 50 | ||
51 | .align 5 | 51 | .align 5 |
diff --git a/arch/mips/dec/int-handler.S b/arch/mips/dec/int-handler.S index 41fa372007bf..5bafd585ac3e 100644 --- a/arch/mips/dec/int-handler.S +++ b/arch/mips/dec/int-handler.S | |||
@@ -282,7 +282,9 @@ fpu: | |||
282 | #endif | 282 | #endif |
283 | 283 | ||
284 | spurious: | 284 | spurious: |
285 | j spurious_interrupt | 285 | jal spurious_interrupt |
286 | nop | ||
287 | j ret_from_irq | ||
286 | nop | 288 | nop |
287 | END(decstation_handle_int) | 289 | END(decstation_handle_int) |
288 | 290 | ||
diff --git a/arch/mips/galileo-boards/ev96100/int-handler.S b/arch/mips/galileo-boards/ev96100/int-handler.S index ff4d10a38859..0edf1fec2905 100644 --- a/arch/mips/galileo-boards/ev96100/int-handler.S +++ b/arch/mips/galileo-boards/ev96100/int-handler.S | |||
@@ -29,5 +29,6 @@ NESTED(ev96100IRQ, PT_SIZE, sp) | |||
29 | jal ev96100_cpu_irq | 29 | jal ev96100_cpu_irq |
30 | j ret_from_irq | 30 | j ret_from_irq |
31 | 31 | ||
32 | 3: j spurious_interrupt | 32 | 3: jal spurious_interrupt |
33 | j ret_from_irq | ||
33 | END(ev96100IRQ) | 34 | END(ev96100IRQ) |
diff --git a/arch/mips/gt64120/ev64120/int-handler.S b/arch/mips/gt64120/ev64120/int-handler.S index 752435faf2de..9dda5b449522 100644 --- a/arch/mips/gt64120/ev64120/int-handler.S +++ b/arch/mips/gt64120/ev64120/int-handler.S | |||
@@ -39,8 +39,9 @@ | |||
39 | nop | 39 | nop |
40 | 40 | ||
41 | /* wrong alarm or masked ... */ | 41 | /* wrong alarm or masked ... */ |
42 | j spurious_interrupt | 42 | jal spurious_interrupt |
43 | nop | 43 | nop |
44 | j ret_from_irq | ||
44 | END(galileo_handle_int) | 45 | END(galileo_handle_int) |
45 | 46 | ||
46 | 47 | ||
diff --git a/arch/mips/jazz/int-handler.S b/arch/mips/jazz/int-handler.S index dc752c67b528..e35f5fcd3f90 100644 --- a/arch/mips/jazz/int-handler.S +++ b/arch/mips/jazz/int-handler.S | |||
@@ -263,7 +263,8 @@ loc_call: /* | |||
263 | /* | 263 | /* |
264 | * "Jump extender" to reach spurious_interrupt | 264 | * "Jump extender" to reach spurious_interrupt |
265 | */ | 265 | */ |
266 | 3: j spurious_interrupt | 266 | 3: jal spurious_interrupt |
267 | j ret_from_irq | ||
267 | 268 | ||
268 | /* | 269 | /* |
269 | * Vectors for interrupts generated by local devices | 270 | * Vectors for interrupts generated by local devices |
diff --git a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S index 83c87fe4ee4f..371571f4f280 100644 --- a/arch/mips/kernel/entry.S +++ b/arch/mips/kernel/entry.S | |||
@@ -119,29 +119,3 @@ syscall_exit_work: | |||
119 | li a1, 1 | 119 | li a1, 1 |
120 | jal do_syscall_trace | 120 | jal do_syscall_trace |
121 | b resume_userspace | 121 | b resume_userspace |
122 | |||
123 | /* | ||
124 | * Common spurious interrupt handler. | ||
125 | */ | ||
126 | LEAF(spurious_interrupt) | ||
127 | /* | ||
128 | * Someone tried to fool us by sending an interrupt but we | ||
129 | * couldn't find a cause for it. | ||
130 | */ | ||
131 | PTR_LA t1, irq_err_count | ||
132 | #ifdef CONFIG_SMP | ||
133 | 1: ll t0, (t1) | ||
134 | addiu t0, 1 | ||
135 | sc t0, (t1) | ||
136 | #if R10000_LLSC_WAR | ||
137 | beqzl t0, 1b | ||
138 | #else | ||
139 | beqz t0, 1b | ||
140 | #endif | ||
141 | #else | ||
142 | lw t0, (t1) | ||
143 | addiu t0, 1 | ||
144 | sw t0, (t1) | ||
145 | #endif | ||
146 | j ret_from_irq | ||
147 | END(spurious_interrupt) | ||
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c index 3dd76b3d2967..e0efc4f2f93e 100644 --- a/arch/mips/kernel/irq.c +++ b/arch/mips/kernel/irq.c | |||
@@ -101,6 +101,11 @@ skip: | |||
101 | return 0; | 101 | return 0; |
102 | } | 102 | } |
103 | 103 | ||
104 | asmlinkage void spurious_interrupt(struct pt_regs *regs) | ||
105 | { | ||
106 | atomic_inc(&irq_err_count); | ||
107 | } | ||
108 | |||
104 | #ifdef CONFIG_KGDB | 109 | #ifdef CONFIG_KGDB |
105 | extern void breakpoint(void); | 110 | extern void breakpoint(void); |
106 | extern void set_debug_traps(void); | 111 | extern void set_debug_traps(void); |
diff --git a/arch/mips/mips-boards/generic/mipsIRQ.S b/arch/mips/mips-boards/generic/mipsIRQ.S index ddd5c73a2971..973e10aaacd5 100644 --- a/arch/mips/mips-boards/generic/mipsIRQ.S +++ b/arch/mips/mips-boards/generic/mipsIRQ.S | |||
@@ -150,6 +150,8 @@ | |||
150 | 150 | ||
151 | 151 | ||
152 | spurious: | 152 | spurious: |
153 | j spurious_interrupt | 153 | jal spurious_interrupt |
154 | nop | ||
155 | j ret_from_irq | ||
154 | nop | 156 | nop |
155 | END(mipsIRQ) | 157 | END(mipsIRQ) |
diff --git a/arch/mips/mips-boards/sim/sim_irq.S b/arch/mips/mips-boards/sim/sim_irq.S index da52297a2216..d16cf3822076 100644 --- a/arch/mips/mips-boards/sim/sim_irq.S +++ b/arch/mips/mips-boards/sim/sim_irq.S | |||
@@ -94,6 +94,8 @@ | |||
94 | 94 | ||
95 | 95 | ||
96 | spurious: | 96 | spurious: |
97 | j spurious_interrupt | 97 | jal spurious_interrupt |
98 | nop | ||
99 | j ret_from_irq | ||
98 | nop | 100 | nop |
99 | END(simIRQ) | 101 | END(simIRQ) |
diff --git a/arch/mips/momentum/ocelot_3/int-handler.S b/arch/mips/momentum/ocelot_3/int-handler.S index 4522f09ed769..b1207262984a 100644 --- a/arch/mips/momentum/ocelot_3/int-handler.S +++ b/arch/mips/momentum/ocelot_3/int-handler.S | |||
@@ -78,8 +78,10 @@ | |||
78 | .set reorder | 78 | .set reorder |
79 | 79 | ||
80 | /* wrong alarm or masked ... */ | 80 | /* wrong alarm or masked ... */ |
81 | j spurious_interrupt | 81 | jal spurious_interrupt |
82 | nop | 82 | nop |
83 | j ret_from_irq | ||
84 | nop | ||
83 | END(ocelot3_handle_int) | 85 | END(ocelot3_handle_int) |
84 | 86 | ||
85 | .align 5 | 87 | .align 5 |
diff --git a/arch/mips/momentum/ocelot_c/int-handler.S b/arch/mips/momentum/ocelot_c/int-handler.S index 52349d9bf1be..f77834193c3c 100644 --- a/arch/mips/momentum/ocelot_c/int-handler.S +++ b/arch/mips/momentum/ocelot_c/int-handler.S | |||
@@ -52,8 +52,9 @@ | |||
52 | .set reorder | 52 | .set reorder |
53 | 53 | ||
54 | /* wrong alarm or masked ... */ | 54 | /* wrong alarm or masked ... */ |
55 | j spurious_interrupt | 55 | jal spurious_interrupt |
56 | nop | 56 | nop |
57 | j ret_from_irq | ||
57 | END(ocelot_handle_int) | 58 | END(ocelot_handle_int) |
58 | 59 | ||
59 | .align 5 | 60 | .align 5 |
diff --git a/arch/mips/philips/pnx8550/common/mipsIRQ.S b/arch/mips/philips/pnx8550/common/mipsIRQ.S index 338bffda3fab..e049a719f83d 100644 --- a/arch/mips/philips/pnx8550/common/mipsIRQ.S +++ b/arch/mips/philips/pnx8550/common/mipsIRQ.S | |||
@@ -46,8 +46,9 @@ | |||
46 | 46 | ||
47 | /* wrong alarm or masked ... */ | 47 | /* wrong alarm or masked ... */ |
48 | 48 | ||
49 | j spurious_interrupt | 49 | jal spurious_interrupt |
50 | nop | 50 | nop |
51 | j ret_from_irq | ||
51 | END(cp0_irqdispatch) | 52 | END(cp0_irqdispatch) |
52 | 53 | ||
53 | .align 5 | 54 | .align 5 |
diff --git a/arch/mips/tx4927/common/tx4927_irq_handler.S b/arch/mips/tx4927/common/tx4927_irq_handler.S index dd3ceda9d712..0b2ea02574f2 100644 --- a/arch/mips/tx4927/common/tx4927_irq_handler.S +++ b/arch/mips/tx4927/common/tx4927_irq_handler.S | |||
@@ -63,8 +63,9 @@ | |||
63 | .set reorder | 63 | .set reorder |
64 | 64 | ||
65 | /* wrong alarm or masked ... */ | 65 | /* wrong alarm or masked ... */ |
66 | j spurious_interrupt | 66 | jal spurious_interrupt |
67 | nop | 67 | nop |
68 | j ret_from_irq | ||
68 | END(tx4927_irq_handler) | 69 | END(tx4927_irq_handler) |
69 | 70 | ||
70 | .align 5 | 71 | .align 5 |
diff --git a/arch/mips/vr41xx/common/int-handler.S b/arch/mips/vr41xx/common/int-handler.S index 2b6043f16d09..e8652348fef1 100644 --- a/arch/mips/vr41xx/common/int-handler.S +++ b/arch/mips/vr41xx/common/int-handler.S | |||
@@ -98,8 +98,10 @@ | |||
98 | bnez t1, handle_irq | 98 | bnez t1, handle_irq |
99 | li a0, 1 | 99 | li a0, 1 |
100 | 100 | ||
101 | j spurious_interrupt | 101 | jal spurious_interrupt |
102 | nop | 102 | nop |
103 | j ret_from_irq | ||
104 | nop | ||
103 | 105 | ||
104 | handle_int: | 106 | handle_int: |
105 | jal irq_dispatch | 107 | jal irq_dispatch |
diff --git a/include/asm-mips/irq.h b/include/asm-mips/irq.h index 8a342ccb34a8..d7aecca3b95f 100644 --- a/include/asm-mips/irq.h +++ b/include/asm-mips/irq.h | |||
@@ -46,5 +46,6 @@ do { \ | |||
46 | #endif | 46 | #endif |
47 | 47 | ||
48 | extern void arch_init_irq(void); | 48 | extern void arch_init_irq(void); |
49 | extern void spurious_interrupt(struct pt_regs *regs); | ||
49 | 50 | ||
50 | #endif /* _ASM_IRQ_H */ | 51 | #endif /* _ASM_IRQ_H */ |