aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2006-04-01 15:17:45 -0500
committerRalf Baechle <ralf@linux-mips.org>2006-04-18 22:14:18 -0400
commit93373ed4d87fb02554ce020d929388ac16913664 (patch)
tree01925421619219d00c39744b0a4cc79b8f7f719b
parentc9e321e095384f25f2b7ffef456794cfa876dafc (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.S3
-rw-r--r--arch/mips/ddb5xxx/ddb5476/int-handler.S3
-rw-r--r--arch/mips/ddb5xxx/ddb5476/vrc5476_irq.c4
-rw-r--r--arch/mips/ddb5xxx/ddb5477/int-handler.S4
-rw-r--r--arch/mips/dec/int-handler.S4
-rw-r--r--arch/mips/galileo-boards/ev96100/int-handler.S3
-rw-r--r--arch/mips/gt64120/ev64120/int-handler.S3
-rw-r--r--arch/mips/jazz/int-handler.S3
-rw-r--r--arch/mips/kernel/entry.S26
-rw-r--r--arch/mips/kernel/irq.c5
-rw-r--r--arch/mips/mips-boards/generic/mipsIRQ.S4
-rw-r--r--arch/mips/mips-boards/sim/sim_irq.S4
-rw-r--r--arch/mips/momentum/ocelot_3/int-handler.S4
-rw-r--r--arch/mips/momentum/ocelot_c/int-handler.S3
-rw-r--r--arch/mips/philips/pnx8550/common/mipsIRQ.S3
-rw-r--r--arch/mips/tx4927/common/tx4927_irq_handler.S3
-rw-r--r--arch/mips/vr41xx/common/int-handler.S4
-rw-r--r--include/asm-mips/irq.h1
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
655: 655:
66 move a0, sp 66 move a0, sp
67 j spurious_interrupt 67 jal spurious_interrupt
68 j ret_from_irq
68END(au1000_IRQ) 69END(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)
80asmlinkage void 80asmlinkage void
81vrc5476_irq_dispatch(struct pt_regs *regs) 81vrc5476_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
284spurious: 284spurious:
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
323: j spurious_interrupt 323: 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 */
2663: j spurious_interrupt 2663: 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 */
126LEAF(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
1331: 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
104asmlinkage void spurious_interrupt(struct pt_regs *regs)
105{
106 atomic_inc(&irq_err_count);
107}
108
104#ifdef CONFIG_KGDB 109#ifdef CONFIG_KGDB
105extern void breakpoint(void); 110extern void breakpoint(void);
106extern void set_debug_traps(void); 111extern 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
152spurious: 152spurious:
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
96spurious: 96spurious:
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
104handle_int: 106handle_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
48extern void arch_init_irq(void); 48extern void arch_init_irq(void);
49extern void spurious_interrupt(struct pt_regs *regs);
49 50
50#endif /* _ASM_IRQ_H */ 51#endif /* _ASM_IRQ_H */