Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[MIPS] Complete fixes after removal of pt_regs argument to int handlers.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

+559 -624
+1 -1
arch/mips/au1000/common/dma.c
··· 160 160 * Requests the DMA done IRQ if irqhandler != NULL. 161 161 */ 162 162 int request_au1000_dma(int dev_id, const char *dev_str, 163 - irqreturn_t (*irqhandler)(int, void *, struct pt_regs *), 163 + irqreturn_t (*irqhandler)(int, void *), 164 164 unsigned long irqflags, 165 165 void *irq_dev_id) 166 166 {
+26 -26
arch/mips/au1000/common/irq.c
··· 67 67 68 68 extern void set_debug_traps(void); 69 69 extern irq_cpustat_t irq_stat [NR_CPUS]; 70 - extern void mips_timer_interrupt(struct pt_regs *regs); 70 + extern void mips_timer_interrupt(void); 71 71 72 72 static void setup_local_irq(unsigned int irq, int type, int int_req); 73 73 static unsigned int startup_irq(unsigned int irq); ··· 80 80 inline void local_disable_irq(unsigned int irq_nr); 81 81 82 82 void (*board_init_irq)(void); 83 - 84 - #ifdef CONFIG_PM 85 - extern irqreturn_t counter0_irq(int irq, void *dev_id, struct pt_regs *regs); 86 - #endif 87 83 88 84 static DEFINE_SPINLOCK(irq_lock); 89 85 ··· 288 292 }; 289 293 290 294 #ifdef CONFIG_PM 291 - void startup_match20_interrupt(irqreturn_t (*handler)(int, void *, struct pt_regs *)) 295 + void startup_match20_interrupt(irqreturn_t (*handler)(int, void *)) 292 296 { 293 297 struct irq_desc *desc = &irq_desc[AU1000_TOY_MATCH2_INT]; 294 298 ··· 497 501 * intcX_reqX_irqdispatch(). 498 502 */ 499 503 500 - void intc0_req0_irqdispatch(struct pt_regs *regs) 504 + static void intc0_req0_irqdispatch(void) 501 505 { 502 506 int irq = 0; 503 507 static unsigned long intc0_req0 = 0; 504 508 505 509 intc0_req0 |= au_readl(IC0_REQ0INT); 506 510 507 - if (!intc0_req0) return; 511 + if (!intc0_req0) 512 + return; 508 513 #ifdef AU1000_USB_DEV_REQ_INT 509 514 /* 510 515 * Because of the tight timing of SETUP token to reply ··· 514 517 */ 515 518 if ((intc0_req0 & (1<<AU1000_USB_DEV_REQ_INT))) { 516 519 intc0_req0 &= ~(1<<AU1000_USB_DEV_REQ_INT); 517 - do_IRQ(AU1000_USB_DEV_REQ_INT, regs); 520 + do_IRQ(AU1000_USB_DEV_REQ_INT); 518 521 return; 519 522 } 520 523 #endif 521 524 irq = au_ffs(intc0_req0) - 1; 522 525 intc0_req0 &= ~(1<<irq); 523 - do_IRQ(irq, regs); 526 + do_IRQ(irq); 524 527 } 525 528 526 529 527 - void intc0_req1_irqdispatch(struct pt_regs *regs) 530 + static void intc0_req1_irqdispatch(void) 528 531 { 529 532 int irq = 0; 530 533 static unsigned long intc0_req1 = 0; 531 534 532 535 intc0_req1 |= au_readl(IC0_REQ1INT); 533 536 534 - if (!intc0_req1) return; 537 + if (!intc0_req1) 538 + return; 535 539 536 540 irq = au_ffs(intc0_req1) - 1; 537 541 intc0_req1 &= ~(1<<irq); 538 - do_IRQ(irq, regs); 542 + do_IRQ(irq); 539 543 } 540 544 541 545 ··· 544 546 * Interrupt Controller 1: 545 547 * interrupts 32 - 63 546 548 */ 547 - void intc1_req0_irqdispatch(struct pt_regs *regs) 549 + static void intc1_req0_irqdispatch(void) 548 550 { 549 551 int irq = 0; 550 552 static unsigned long intc1_req0 = 0; 551 553 552 554 intc1_req0 |= au_readl(IC1_REQ0INT); 553 555 554 - if (!intc1_req0) return; 556 + if (!intc1_req0) 557 + return; 555 558 556 559 irq = au_ffs(intc1_req0) - 1; 557 560 intc1_req0 &= ~(1<<irq); 558 561 irq += 32; 559 - do_IRQ(irq, regs); 562 + do_IRQ(irq); 560 563 } 561 564 562 565 563 - void intc1_req1_irqdispatch(struct pt_regs *regs) 566 + static void intc1_req1_irqdispatch(void) 564 567 { 565 568 int irq = 0; 566 569 static unsigned long intc1_req1 = 0; 567 570 568 571 intc1_req1 |= au_readl(IC1_REQ1INT); 569 572 570 - if (!intc1_req1) return; 573 + if (!intc1_req1) 574 + return; 571 575 572 576 irq = au_ffs(intc1_req1) - 1; 573 577 intc1_req1 &= ~(1<<irq); 574 578 irq += 32; 575 - do_IRQ(irq, regs); 579 + do_IRQ(irq); 576 580 } 577 581 578 582 #ifdef CONFIG_PM ··· 660 660 } 661 661 #endif /* CONFIG_PM */ 662 662 663 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 663 + asmlinkage void plat_irq_dispatch(void) 664 664 { 665 665 unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; 666 666 667 667 if (pending & CAUSEF_IP7) 668 - mips_timer_interrupt(regs); 668 + mips_timer_interrupt(); 669 669 else if (pending & CAUSEF_IP2) 670 - intc0_req0_irqdispatch(regs); 670 + intc0_req0_irqdispatch(); 671 671 else if (pending & CAUSEF_IP3) 672 - intc0_req1_irqdispatch(regs); 672 + intc0_req1_irqdispatch(); 673 673 else if (pending & CAUSEF_IP4) 674 - intc1_req0_irqdispatch(regs); 674 + intc1_req0_irqdispatch(); 675 675 else if (pending & CAUSEF_IP5) 676 - intc1_req1_irqdispatch(regs); 676 + intc1_req1_irqdispatch(); 677 677 else 678 - spurious_interrupt(regs); 678 + spurious_interrupt(); 679 679 }
+7 -6
arch/mips/au1000/common/time.c
··· 62 62 #error "unsupported HZ value! Must be in [100,1000]" 63 63 #endif 64 64 #define MATCH20_INC (328*100/HZ) /* magic number 328 is for HZ=100... */ 65 - extern void startup_match20_interrupt(irqreturn_t (*handler)(int, void *, struct pt_regs *)); 65 + extern void startup_match20_interrupt(irqreturn_t (*handler)(int, void *)); 66 66 static unsigned long last_pc0, last_match20; 67 67 #endif 68 68 ··· 79 79 * is provably more robust. 80 80 */ 81 81 unsigned long wtimer; 82 - void mips_timer_interrupt(struct pt_regs *regs) 82 + 83 + void mips_timer_interrupt(void) 83 84 { 84 85 int irq = 63; 85 86 unsigned long count; ··· 99 98 kstat_this_cpu.irqs[irq]++; 100 99 do_timer(1); 101 100 #ifndef CONFIG_SMP 102 - update_process_times(user_mode(regs)); 101 + update_process_times(user_mode(get_irq_regs())); 103 102 #endif 104 103 r4k_cur += r4k_offset; 105 104 ack_r4ktimer(r4k_cur); ··· 116 115 } 117 116 118 117 #ifdef CONFIG_PM 119 - irqreturn_t counter0_irq(int irq, void *dev_id, struct pt_regs *regs) 118 + irqreturn_t counter0_irq(int irq, void *dev_id) 120 119 { 121 120 unsigned long pc0; 122 121 int time_elapsed; ··· 140 139 while (time_elapsed > 0) { 141 140 do_timer(1); 142 141 #ifndef CONFIG_SMP 143 - update_process_times(user_mode(regs)); 142 + update_process_times(user_mode(get_irq_regs())); 144 143 #endif 145 144 time_elapsed -= MATCH20_INC; 146 145 last_match20 += MATCH20_INC; ··· 159 158 jiffie_drift -= 999; 160 159 do_timer(1); /* increment jiffies by one */ 161 160 #ifndef CONFIG_SMP 162 - update_process_times(user_mode(regs)); 161 + update_process_times(user_mode(get_irq_regs())); 163 162 #endif 164 163 } 165 164
+3 -6
arch/mips/au1000/common/usbdev.c
··· 1031 1031 1032 1032 1033 1033 /* This ISR handles the receive complete and suspend events */ 1034 - static void 1035 - req_sus_intr (int irq, void *dev_id, struct pt_regs *regs) 1034 + static void req_sus_intr (int irq, void *dev_id) 1036 1035 { 1037 1036 struct usb_dev *dev = (struct usb_dev *) dev_id; 1038 1037 u32 status; ··· 1049 1050 1050 1051 1051 1052 /* This ISR handles the DMA done events on EP0 */ 1052 - static void 1053 - dma_done_ep0_intr(int irq, void *dev_id, struct pt_regs *regs) 1053 + static void dma_done_ep0_intr(int irq, void *dev_id) 1054 1054 { 1055 1055 struct usb_dev *dev = (struct usb_dev *) dev_id; 1056 1056 usbdev_pkt_t* pkt; ··· 1092 1094 } 1093 1095 1094 1096 /* This ISR handles the DMA done events on endpoints 2,3,4,5 */ 1095 - static void 1096 - dma_done_ep_intr(int irq, void *dev_id, struct pt_regs *regs) 1097 + static void dma_done_ep_intr(int irq, void *dev_id) 1097 1098 { 1098 1099 struct usb_dev *dev = (struct usb_dev *) dev_id; 1099 1100 int i;
+3 -2
arch/mips/au1000/pb1200/irqmap.c
··· 65 65 */ 66 66 static volatile int pb1200_cascade_en=0; 67 67 68 - irqreturn_t pb1200_cascade_handler( int irq, void *dev_id, struct pt_regs *regs) 68 + irqreturn_t pb1200_cascade_handler( int irq, void *dev_id) 69 69 { 70 70 unsigned short bisr = bcsr->int_status; 71 71 int extirq_nr = 0; ··· 76 76 { 77 77 extirq_nr = (PB1200_INT_BEGIN-1) + au_ffs(bisr); 78 78 /* Ack and dispatch IRQ */ 79 - do_IRQ(extirq_nr,regs); 79 + do_IRQ(extirq_nr); 80 80 } 81 + 81 82 return IRQ_RETVAL(1); 82 83 } 83 84
+1 -1
arch/mips/basler/excite/excite_dbg_io.c
··· 112 112 } 113 113 114 114 /* KGDB interrupt handler */ 115 - asmlinkage void excite_kgdb_inthdl(struct pt_regs *regs) 115 + asmlinkage void excite_kgdb_inthdl(void) 116 116 { 117 117 if (unlikely( 118 118 ((titan_readl(UAIIR) & 0x7) == 4)
+3 -11
arch/mips/basler/excite/excite_iodev.c
··· 38 38 static int iodev_release(struct inode *, struct file *); 39 39 static ssize_t iodev_read(struct file *, char __user *, size_t s, loff_t *); 40 40 static unsigned int iodev_poll(struct file *, struct poll_table_struct *); 41 - static irqreturn_t iodev_irqhdl(int, void *, struct pt_regs *); 41 + static irqreturn_t iodev_irqhdl(int, void *); 42 42 43 43 44 44 ··· 108 108 return misc_deregister(&miscdev); 109 109 } 110 110 111 - 112 - 113 111 static int iodev_open(struct inode *i, struct file *f) 114 112 { 115 113 return request_irq(iodev_irq, iodev_irqhdl, IRQF_DISABLED, 116 114 iodev_name, &miscdev); 117 115 } 118 - 119 - 120 116 121 117 static int iodev_release(struct inode *i, struct file *f) 122 118 { ··· 144 148 return POLLOUT | POLLWRNORM; 145 149 } 146 150 147 - 148 - 149 - 150 - static irqreturn_t iodev_irqhdl(int irq, void *ctxt, struct pt_regs *regs) 151 + static irqreturn_t iodev_irqhdl(int irq, void *ctxt) 151 152 { 152 153 wake_up(&wq); 154 + 153 155 return IRQ_HANDLED; 154 156 } 155 - 156 - 157 157 158 158 static int __init iodev_init_module(void) 159 159 {
+9 -9
arch/mips/basler/excite/excite_irq.c
··· 56 56 #endif 57 57 } 58 58 59 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 59 + asmlinkage void plat_irq_dispatch(void) 60 60 { 61 61 const u32 62 62 interrupts = read_c0_cause() >> 8, ··· 67 67 68 68 /* process timer interrupt */ 69 69 if (pending & (1 << TIMER_IRQ)) { 70 - do_IRQ(TIMER_IRQ, regs); 70 + do_IRQ(TIMER_IRQ); 71 71 return; 72 72 } 73 73 ··· 80 80 #else 81 81 if (pending & (1 << USB_IRQ)) { 82 82 #endif 83 - do_IRQ(USB_IRQ, regs); 83 + do_IRQ(USB_IRQ); 84 84 return; 85 85 } 86 86 ··· 91 91 if ((pending & (1 << TITAN_IRQ)) && msgint) { 92 92 ocd_writel(msgint, INTP0Clear0 + (TITAN_MSGINT / 0x20 * 0x10)); 93 93 #if defined(CONFIG_KGDB) 94 - excite_kgdb_inthdl(regs); 94 + excite_kgdb_inthdl(); 95 95 #endif 96 - do_IRQ(TITAN_IRQ, regs); 96 + do_IRQ(TITAN_IRQ); 97 97 return; 98 98 } 99 99 ··· 102 102 msgintmask = ocd_readl(INTP0Mask0 + (FPGA0_MSGINT / 0x20 * 0x10)); 103 103 msgint = msgintflags & msgintmask & (0x1 << (FPGA0_MSGINT % 0x20)); 104 104 if ((pending & (1 << FPGA0_IRQ)) && msgint) { 105 - do_IRQ(FPGA0_IRQ, regs); 105 + do_IRQ(FPGA0_IRQ); 106 106 return; 107 107 } 108 108 ··· 111 111 msgintmask = ocd_readl(INTP0Mask0 + (FPGA1_MSGINT / 0x20 * 0x10)); 112 112 msgint = msgintflags & msgintmask & (0x1 << (FPGA1_MSGINT % 0x20)); 113 113 if ((pending & (1 << FPGA1_IRQ)) && msgint) { 114 - do_IRQ(FPGA1_IRQ, regs); 114 + do_IRQ(FPGA1_IRQ); 115 115 return; 116 116 } 117 117 ··· 120 120 msgintmask = ocd_readl(INTP0Mask0 + (PHY_MSGINT / 0x20 * 0x10)); 121 121 msgint = msgintflags & msgintmask & (0x1 << (PHY_MSGINT % 0x20)); 122 122 if ((pending & (1 << PHY_IRQ)) && msgint) { 123 - do_IRQ(PHY_IRQ, regs); 123 + do_IRQ(PHY_IRQ); 124 124 return; 125 125 } 126 126 127 127 /* Process spurious interrupts */ 128 - spurious_interrupt(regs); 128 + spurious_interrupt(); 129 129 }
+18 -31
arch/mips/cobalt/irq.c
··· 42 42 * 15 - IDE1 43 43 */ 44 44 45 - static inline void galileo_irq(struct pt_regs *regs) 45 + static inline void galileo_irq(void) 46 46 { 47 47 unsigned int mask, pending, devfn; 48 48 ··· 52 52 if (pending & GALILEO_INTR_T0EXP) { 53 53 54 54 GALILEO_OUTL(~GALILEO_INTR_T0EXP, GT_INTRCAUSE_OFS); 55 - do_IRQ(COBALT_GALILEO_IRQ, regs); 55 + do_IRQ(COBALT_GALILEO_IRQ); 56 56 57 57 } else if (pending & GALILEO_INTR_RETRY_CTR) { 58 58 ··· 68 68 } 69 69 } 70 70 71 - static inline void via_pic_irq(struct pt_regs *regs) 71 + static inline void via_pic_irq(void) 72 72 { 73 73 int irq; 74 74 75 75 irq = i8259_irq(); 76 76 if (irq >= 0) 77 - do_IRQ(irq, regs); 77 + do_IRQ(irq); 78 78 } 79 79 80 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 80 + asmlinkage void plat_irq_dispatch(void) 81 81 { 82 - unsigned pending; 82 + unsigned pending = read_c0_status() & read_c0_cause(); 83 83 84 - pending = read_c0_status() & read_c0_cause(); 85 - 86 - if (pending & CAUSEF_IP2) /* COBALT_GALILEO_IRQ (18) */ 87 - 88 - galileo_irq(regs); 89 - 90 - else if (pending & CAUSEF_IP6) /* COBALT_VIA_IRQ (22) */ 91 - 92 - via_pic_irq(regs); 93 - 94 - else if (pending & CAUSEF_IP3) /* COBALT_ETH0_IRQ (19) */ 95 - 96 - do_IRQ(COBALT_CPU_IRQ + 3, regs); 97 - 98 - else if (pending & CAUSEF_IP4) /* COBALT_ETH1_IRQ (20) */ 99 - 100 - do_IRQ(COBALT_CPU_IRQ + 4, regs); 101 - 102 - else if (pending & CAUSEF_IP5) /* COBALT_SERIAL_IRQ (21) */ 103 - 104 - do_IRQ(COBALT_CPU_IRQ + 5, regs); 105 - 106 - else if (pending & CAUSEF_IP7) /* IRQ 23 */ 107 - 108 - do_IRQ(COBALT_CPU_IRQ + 7, regs); 84 + if (pending & CAUSEF_IP2) /* COBALT_GALILEO_IRQ (18) */ 85 + galileo_irq(); 86 + else if (pending & CAUSEF_IP6) /* COBALT_VIA_IRQ (22) */ 87 + via_pic_irq(); 88 + else if (pending & CAUSEF_IP3) /* COBALT_ETH0_IRQ (19) */ 89 + do_IRQ(COBALT_CPU_IRQ + 3); 90 + else if (pending & CAUSEF_IP4) /* COBALT_ETH1_IRQ (20) */ 91 + do_IRQ(COBALT_CPU_IRQ + 4); 92 + else if (pending & CAUSEF_IP5) /* COBALT_SERIAL_IRQ (21) */ 93 + do_IRQ(COBALT_CPU_IRQ + 5); 94 + else if (pending & CAUSEF_IP7) /* IRQ 23 */ 95 + do_IRQ(COBALT_CPU_IRQ + 7); 109 96 } 110 97 111 98 static struct irqaction irq_via = {
+9 -10
arch/mips/ddb5xxx/ddb5477/irq.c
··· 153 153 * the first level int-handler will jump here if it is a vrc5477 irq 154 154 */ 155 155 #define NUM_5477_IRQS 32 156 - static void 157 - vrc5477_irq_dispatch(struct pt_regs *regs) 156 + static void vrc5477_irq_dispatch(void) 158 157 { 159 158 u32 intStatus; 160 159 u32 bitmask; ··· 177 178 /* check for i8259 interrupts */ 178 179 if (intStatus & (1 << VRC5477_I8259_CASCADE)) { 179 180 int i8259_irq = i8259_interrupt_ack(); 180 - do_IRQ(I8259_IRQ_BASE + i8259_irq, regs); 181 + do_IRQ(I8259_IRQ_BASE + i8259_irq); 181 182 return; 182 183 } 183 184 } ··· 185 186 for (i=0, bitmask=1; i<= NUM_5477_IRQS; bitmask <<=1, i++) { 186 187 /* do we need to "and" with the int mask? */ 187 188 if (intStatus & bitmask) { 188 - do_IRQ(VRC5477_IRQ_BASE + i, regs); 189 + do_IRQ(VRC5477_IRQ_BASE + i); 189 190 return; 190 191 } 191 192 } ··· 193 194 194 195 #define VR5477INTS (STATUSF_IP2|STATUSF_IP3|STATUSF_IP4|STATUSF_IP5|STATUSF_IP6) 195 196 196 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 197 + asmlinkage void plat_irq_dispatch(void) 197 198 { 198 199 unsigned int pending = read_c0_cause() & read_c0_status(); 199 200 200 201 if (pending & STATUSF_IP7) 201 - do_IRQ(CPU_IRQ_BASE + 7, regs); 202 + do_IRQ(CPU_IRQ_BASE + 7); 202 203 else if (pending & VR5477INTS) 203 - vrc5477_irq_dispatch(regs); 204 + vrc5477_irq_dispatch(); 204 205 else if (pending & STATUSF_IP0) 205 - do_IRQ(CPU_IRQ_BASE, regs); 206 + do_IRQ(CPU_IRQ_BASE); 206 207 else if (pending & STATUSF_IP1) 207 - do_IRQ(CPU_IRQ_BASE + 1, regs); 208 + do_IRQ(CPU_IRQ_BASE + 1); 208 209 else 209 - spurious_interrupt(regs); 210 + spurious_interrupt(); 210 211 }
+3 -1
arch/mips/dec/int-handler.S
··· 264 264 srlv t3,t1,t2 265 265 266 266 handle_it: 267 + LONG_L s0, TI_REGS($28) 268 + LONG_S sp, TI_REGS($28) 267 269 jal do_IRQ 268 - move a1,sp 270 + LONG_S s0, TI_REGS($28) 269 271 270 272 j ret_from_irq 271 273 nop
+6 -6
arch/mips/emma2rh/common/irq.c
··· 39 39 /* 40 40 * the first level int-handler will jump here if it is a emma2rh irq 41 41 */ 42 - asmlinkage void emma2rh_irq_dispatch(struct pt_regs *regs) 42 + void emma2rh_irq_dispatch(void) 43 43 { 44 44 u32 intStatus; 45 45 u32 bitmask; ··· 56 56 & emma2rh_in32(EMMA2RH_BHIF_SW_INT_EN); 57 57 for (i = 0, bitmask = 1; i < 32; i++, bitmask <<= 1) { 58 58 if (swIntStatus & bitmask) { 59 - do_IRQ(EMMA2RH_SW_IRQ_BASE + i, regs); 59 + do_IRQ(EMMA2RH_SW_IRQ_BASE + i); 60 60 return; 61 61 } 62 62 } ··· 65 65 66 66 for (i = 0, bitmask = 1; i < 32; i++, bitmask <<= 1) { 67 67 if (intStatus & bitmask) { 68 - do_IRQ(EMMA2RH_IRQ_BASE + i, regs); 68 + do_IRQ(EMMA2RH_IRQ_BASE + i); 69 69 return; 70 70 } 71 71 } ··· 81 81 & emma2rh_in32(EMMA2RH_GPIO_INT_MASK); 82 82 for (i = 0, bitmask = 1; i < 32; i++, bitmask <<= 1) { 83 83 if (gpioIntStatus & bitmask) { 84 - do_IRQ(EMMA2RH_GPIO_IRQ_BASE + i, regs); 84 + do_IRQ(EMMA2RH_GPIO_IRQ_BASE + i); 85 85 return; 86 86 } 87 87 } ··· 90 90 91 91 for (i = 32, bitmask = 1; i < 64; i++, bitmask <<= 1) { 92 92 if (intStatus & bitmask) { 93 - do_IRQ(EMMA2RH_IRQ_BASE + i, regs); 93 + do_IRQ(EMMA2RH_IRQ_BASE + i); 94 94 return; 95 95 } 96 96 } ··· 100 100 101 101 for (i = 64, bitmask = 1; i < 96; i++, bitmask <<= 1) { 102 102 if (intStatus & bitmask) { 103 - do_IRQ(EMMA2RH_IRQ_BASE + i, regs); 103 + do_IRQ(EMMA2RH_IRQ_BASE + i); 104 104 return; 105 105 } 106 106 }
+7 -7
arch/mips/emma2rh/markeins/irq.c
··· 57 57 extern void emma2rh_sw_irq_init(u32 base); 58 58 extern void emma2rh_gpio_irq_init(u32 base); 59 59 extern void emma2rh_irq_init(u32 base); 60 - extern asmlinkage void emma2rh_irq_dispatch(struct pt_regs *regs); 60 + extern void emma2rh_irq_dispatch(void); 61 61 62 62 static struct irqaction irq_cascade = { 63 63 .handler = no_action, ··· 114 114 setup_irq(CPU_IRQ_BASE + CPU_EMMA2RH_CASCADE, &irq_cascade); 115 115 } 116 116 117 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 117 + asmlinkage void plat_irq_dispatch(void) 118 118 { 119 119 unsigned int pending = read_c0_status() & read_c0_cause(); 120 120 121 121 if (pending & STATUSF_IP7) 122 - do_IRQ(CPU_IRQ_BASE + 7, regs); 122 + do_IRQ(CPU_IRQ_BASE + 7); 123 123 else if (pending & STATUSF_IP2) 124 - emma2rh_irq_dispatch(regs); 124 + emma2rh_irq_dispatch(); 125 125 else if (pending & STATUSF_IP1) 126 - do_IRQ(CPU_IRQ_BASE + 1, regs); 126 + do_IRQ(CPU_IRQ_BASE + 1); 127 127 else if (pending & STATUSF_IP0) 128 - do_IRQ(CPU_IRQ_BASE + 0, regs); 128 + do_IRQ(CPU_IRQ_BASE + 0); 129 129 else 130 - spurious_interrupt(regs); 130 + spurious_interrupt(); 131 131 } 132 132 133 133
+3 -2
arch/mips/gt64120/common/time.c
··· 10 10 #include <linux/kernel.h> 11 11 #include <linux/sched.h> 12 12 #include <linux/kernel_stat.h> 13 + #include <asm/irq_regs.h> 13 14 #include <asm/ptrace.h> 14 15 #include <asm/gt64120.h> 15 16 ··· 20 19 * differently than other MIPS interrupts. 21 20 */ 22 21 23 - static void gt64120_irq(int irq, void *dev_id, struct pt_regs *regs) 22 + static void gt64120_irq(int irq, void *dev_id) 24 23 { 25 24 unsigned int irq_src, int_high_src, irq_src_mask, int_high_src_mask; 26 25 int handled = 0; ··· 37 36 irq_src &= ~0x00000800; 38 37 do_timer(1); 39 38 #ifndef CONFIG_SMP 40 - update_process_times(user_mode(regs)); 39 + update_process_times(user_mode(get_irq_regs())); 41 40 #endif 42 41 } 43 42
+7 -7
arch/mips/gt64120/ev64120/irq.c
··· 46 46 #include <asm/system.h> 47 47 #include <asm/gt64120.h> 48 48 49 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 49 + asmlinkage void plat_irq_dispatch(void) 50 50 { 51 51 unsigned int pending = read_c0_status() & read_c0_cause(); 52 52 53 53 if (pending & STATUSF_IP4) /* int2 hardware line (timer) */ 54 - do_IRQ(4, regs); 54 + do_IRQ(4); 55 55 else if (pending & STATUSF_IP2) /* int0 hardware line */ 56 - do_IRQ(GT_INTA, regs); 56 + do_IRQ(GT_INTA); 57 57 else if (pending & STATUSF_IP5) /* int3 hardware line */ 58 - do_IRQ(GT_INTD, regs); 58 + do_IRQ(GT_INTD); 59 59 else if (pending & STATUSF_IP6) /* int4 hardware line */ 60 - do_IRQ(6, regs); 60 + do_IRQ(6); 61 61 else if (pending & STATUSF_IP7) /* compare int */ 62 - do_IRQ(7, regs); 62 + do_IRQ(7); 63 63 else 64 - spurious_interrupt(regs); 64 + spurious_interrupt(); 65 65 } 66 66 67 67 static void disable_ev64120_irq(unsigned int irq_nr)
+11 -11
arch/mips/gt64120/momenco_ocelot/irq.c
··· 48 48 #include <asm/mipsregs.h> 49 49 #include <asm/system.h> 50 50 51 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 51 + asmlinkage void plat_irq_dispatch(void) 52 52 { 53 53 unsigned int pending = read_c0_status() & read_c0_cause(); 54 54 55 55 if (pending & STATUSF_IP2) /* int0 hardware line */ 56 - do_IRQ(2, regs); 56 + do_IRQ(2); 57 57 else if (pending & STATUSF_IP3) /* int1 hardware line */ 58 - do_IRQ(3, regs); 58 + do_IRQ(3); 59 59 else if (pending & STATUSF_IP4) /* int2 hardware line */ 60 - do_IRQ(4, regs); 60 + do_IRQ(4); 61 61 else if (pending & STATUSF_IP5) /* int3 hardware line */ 62 - do_IRQ(5, regs); 62 + do_IRQ(5); 63 63 else if (pending & STATUSF_IP6) /* int4 hardware line */ 64 - do_IRQ(6, regs); 64 + do_IRQ(6); 65 65 else if (pending & STATUSF_IP7) /* cpu timer */ 66 - do_IRQ(7, regs); 66 + do_IRQ(7); 67 67 else { 68 68 /* 69 69 * Now look at the extended interrupts ··· 71 71 pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16; 72 72 73 73 if (pending & STATUSF_IP8) /* int6 hardware line */ 74 - do_IRQ(8, regs); 74 + do_IRQ(8); 75 75 else if (pending & STATUSF_IP9) /* int7 hardware line */ 76 - do_IRQ(9, regs); 76 + do_IRQ(9); 77 77 else if (pending & STATUSF_IP10) /* int8 hardware line */ 78 - do_IRQ(10, regs); 78 + do_IRQ(10); 79 79 else if (pending & STATUSF_IP11) /* int9 hardware line */ 80 - do_IRQ(11, regs); 80 + do_IRQ(11); 81 81 } 82 82 } 83 83
+5 -5
arch/mips/gt64120/wrppmc/irq.c
··· 30 30 #include <asm/irq_cpu.h> 31 31 #include <asm/gt64120.h> 32 32 33 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 33 + asmlinkage void plat_irq_dispatch(void) 34 34 { 35 35 unsigned int pending = read_c0_status() & read_c0_cause(); 36 36 37 37 if (pending & STATUSF_IP7) 38 - do_IRQ(WRPPMC_MIPS_TIMER_IRQ, regs); /* CPU Compare/Count internal timer */ 38 + do_IRQ(WRPPMC_MIPS_TIMER_IRQ); /* CPU Compare/Count internal timer */ 39 39 else if (pending & STATUSF_IP6) 40 - do_IRQ(WRPPMC_UART16550_IRQ, regs); /* UART 16550 port */ 40 + do_IRQ(WRPPMC_UART16550_IRQ); /* UART 16550 port */ 41 41 else if (pending & STATUSF_IP3) 42 - do_IRQ(WRPPMC_PCI_INTA_IRQ, regs); /* PCI INT_A */ 42 + do_IRQ(WRPPMC_PCI_INTA_IRQ); /* PCI INT_A */ 43 43 else 44 - spurious_interrupt(regs); 44 + spurious_interrupt(); 45 45 } 46 46 47 47 /**
+15 -15
arch/mips/jazz/irq.c
··· 94 94 change_c0_status(ST0_IM, IE_IRQ4 | IE_IRQ3 | IE_IRQ2 | IE_IRQ1); 95 95 } 96 96 97 - static void loc_call(unsigned int irq, struct pt_regs *regs, unsigned int mask) 97 + static void loc_call(unsigned int irq, unsigned int mask) 98 98 { 99 99 r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, 100 100 r4030_read_reg16(JAZZ_IO_IRQ_ENABLE) & mask); 101 - do_IRQ(irq, regs); 101 + do_IRQ(irq); 102 102 r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, 103 103 r4030_read_reg16(JAZZ_IO_IRQ_ENABLE) | mask); 104 104 } 105 105 106 - static void ll_local_dev(struct pt_regs *regs) 106 + static void ll_local_dev(void) 107 107 { 108 108 switch (r4030_read_reg32(JAZZ_IO_IRQ_SOURCE)) { 109 109 case 0: 110 110 panic("Unimplemented loc_no_irq handler"); 111 111 break; 112 112 case 4: 113 - loc_call(JAZZ_PARALLEL_IRQ, regs, JAZZ_IE_PARALLEL); 113 + loc_call(JAZZ_PARALLEL_IRQ, JAZZ_IE_PARALLEL); 114 114 break; 115 115 case 8: 116 - loc_call(JAZZ_PARALLEL_IRQ, regs, JAZZ_IE_FLOPPY); 116 + loc_call(JAZZ_PARALLEL_IRQ, JAZZ_IE_FLOPPY); 117 117 break; 118 118 case 12: 119 119 panic("Unimplemented loc_sound handler"); ··· 122 122 panic("Unimplemented loc_video handler"); 123 123 break; 124 124 case 20: 125 - loc_call(JAZZ_ETHERNET_IRQ, regs, JAZZ_IE_ETHERNET); 125 + loc_call(JAZZ_ETHERNET_IRQ, JAZZ_IE_ETHERNET); 126 126 break; 127 127 case 24: 128 - loc_call(JAZZ_SCSI_IRQ, regs, JAZZ_IE_SCSI); 128 + loc_call(JAZZ_SCSI_IRQ, JAZZ_IE_SCSI); 129 129 break; 130 130 case 28: 131 - loc_call(JAZZ_KEYBOARD_IRQ, regs, JAZZ_IE_KEYBOARD); 131 + loc_call(JAZZ_KEYBOARD_IRQ, JAZZ_IE_KEYBOARD); 132 132 break; 133 133 case 32: 134 - loc_call(JAZZ_MOUSE_IRQ, regs, JAZZ_IE_MOUSE); 134 + loc_call(JAZZ_MOUSE_IRQ, JAZZ_IE_MOUSE); 135 135 break; 136 136 case 36: 137 - loc_call(JAZZ_SERIAL1_IRQ, regs, JAZZ_IE_SERIAL1); 137 + loc_call(JAZZ_SERIAL1_IRQ, JAZZ_IE_SERIAL1); 138 138 break; 139 139 case 40: 140 - loc_call(JAZZ_SERIAL2_IRQ, regs, JAZZ_IE_SERIAL2); 140 + loc_call(JAZZ_SERIAL2_IRQ, JAZZ_IE_SERIAL2); 141 141 break; 142 142 } 143 143 } 144 144 145 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 145 + asmlinkage void plat_irq_dispatch(void) 146 146 { 147 147 unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; 148 148 ··· 150 150 write_c0_compare(0); 151 151 else if (pending & IE_IRQ4) { 152 152 r4030_read_reg32(JAZZ_TIMER_REGISTER); 153 - do_IRQ(JAZZ_TIMER_IRQ, regs); 153 + do_IRQ(JAZZ_TIMER_IRQ); 154 154 } else if (pending & IE_IRQ3) 155 155 panic("Unimplemented ISA NMI handler"); 156 156 else if (pending & IE_IRQ2) 157 - do_IRQ(r4030_read_reg32(JAZZ_EISA_IRQ_ACK), regs); 157 + do_IRQ(r4030_read_reg32(JAZZ_EISA_IRQ_ACK)); 158 158 else if (pending & IE_IRQ1) { 159 - ll_local_dev(regs); 159 + ll_local_dev(); 160 160 } else if (unlikely(pending & IE_IRQ0)) 161 161 panic("Unimplemented local_dma handler"); 162 162 else if (pending & IE_SW1) {
+56 -50
arch/mips/jmr3927/rbhma3100/irq.c
··· 46 46 #include <linux/smp_lock.h> 47 47 #include <linux/bitops.h> 48 48 49 + #include <asm/irq_regs.h> 49 50 #include <asm/io.h> 50 51 #include <asm/mipsregs.h> 51 52 #include <asm/system.h> ··· 240 239 .space_id = 0, 241 240 can_share : 1 242 241 }; 242 + 243 243 struct tb_irq_space jmr3927_irc_irqspace = { 244 - .next = NULL, 245 - .start_irqno = JMR3927_IRQ_IRC, 246 - nr_irqs : JMR3927_NR_IRQ_IRC, 247 - .mask_func = mask_irq_irc, 248 - .unmask_func = unmask_irq_irc, 249 - .name = "on-chip", 250 - .space_id = 0, 251 - can_share : 0 244 + .next = NULL, 245 + .start_irqno = JMR3927_IRQ_IRC, 246 + .nr_irqs = JMR3927_NR_IRQ_IRC, 247 + .mask_func = mask_irq_irc, 248 + .unmask_func = unmask_irq_irc, 249 + .name = "on-chip", 250 + .space_id = 0, 251 + .can_share = 0 252 252 }; 253 253 254 - void jmr3927_spurious(struct pt_regs *regs) 254 + 255 + #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND 256 + static int tx_branch_likely_bug_count = 0; 257 + static int have_tx_branch_likely_bug = 0; 258 + 259 + static void tx_branch_likely_bug_fixup(void) 260 + { 261 + struct pt_regs *regs = get_irq_regs(); 262 + 263 + /* TX39/49-BUG: Under this condition, the insn in delay slot 264 + of the branch likely insn is executed (not nullified) even 265 + the branch condition is false. */ 266 + if (!have_tx_branch_likely_bug) 267 + return; 268 + if ((regs->cp0_epc & 0xfff) == 0xffc && 269 + KSEGX(regs->cp0_epc) != KSEG0 && 270 + KSEGX(regs->cp0_epc) != KSEG1) { 271 + unsigned int insn = *(unsigned int*)(regs->cp0_epc - 4); 272 + /* beql,bnel,blezl,bgtzl */ 273 + /* bltzl,bgezl,blezall,bgezall */ 274 + /* bczfl, bcztl */ 275 + if ((insn & 0xf0000000) == 0x50000000 || 276 + (insn & 0xfc0e0000) == 0x04020000 || 277 + (insn & 0xf3fe0000) == 0x41020000) { 278 + regs->cp0_epc -= 4; 279 + tx_branch_likely_bug_count++; 280 + printk(KERN_INFO 281 + "fix branch-likery bug in %s (insn %08x)\n", 282 + current->comm, insn); 283 + } 284 + } 285 + } 286 + #endif 287 + 288 + static void jmr3927_spurious(void) 255 289 { 256 290 #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND 257 - tx_branch_likely_bug_fixup(regs); 291 + tx_branch_likely_bug_fixup(); 258 292 #endif 259 293 printk(KERN_WARNING "spurious interrupt (cause 0x%lx, pc 0x%lx, ra 0x%lx).\n", 260 294 regs->cp0_cause, regs->cp0_epc, regs->regs[31]); 261 295 } 262 296 263 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 297 + asmlinkage void plat_irq_dispatch(void) 264 298 { 265 299 int irq; 266 300 267 301 #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND 268 - tx_branch_likely_bug_fixup(regs); 302 + tx_branch_likely_bug_fixup(); 269 303 #endif 270 304 if ((regs->cp0_cause & CAUSEF_IP7) == 0) { 271 305 #if 0 272 - jmr3927_spurious(regs); 306 + jmr3927_spurious(); 273 307 #endif 274 308 return; 275 309 } 276 310 irq = (regs->cp0_cause >> CAUSEB_IP2) & 0x0f; 277 311 278 - do_IRQ(irq + JMR3927_IRQ_IRC, regs); 312 + do_IRQ(irq + JMR3927_IRQ_IRC); 279 313 } 280 314 281 - static irqreturn_t jmr3927_ioc_interrupt(int irq, void *dev_id, struct pt_regs *regs) 315 + static irqreturn_t jmr3927_ioc_interrupt(int irq, void *dev_id) 282 316 { 283 317 unsigned char istat = jmr3927_ioc_reg_in(JMR3927_IOC_INTS2_ADDR); 284 318 int i; ··· 321 285 for (i = 0; i < JMR3927_NR_IRQ_IOC; i++) { 322 286 if (istat & (1 << i)) { 323 287 irq = JMR3927_IRQ_IOC + i; 324 - do_IRQ(irq, regs); 288 + do_IRQ(irq); 325 289 } 326 290 } 327 291 return IRQ_HANDLED; ··· 331 295 jmr3927_ioc_interrupt, 0, CPU_MASK_NONE, "IOC", NULL, NULL, 332 296 }; 333 297 334 - static irqreturn_t jmr3927_isac_interrupt(int irq, void *dev_id, struct pt_regs *regs) 298 + static irqreturn_t jmr3927_isac_interrupt(int irq, void *dev_id) 335 299 { 336 300 unsigned char istat = jmr3927_isac_reg_in(JMR3927_ISAC_INTS2_ADDR); 337 301 int i; ··· 339 303 for (i = 0; i < JMR3927_NR_IRQ_ISAC; i++) { 340 304 if (istat & (1 << i)) { 341 305 irq = JMR3927_IRQ_ISAC + i; 342 - do_IRQ(irq, regs); 306 + do_IRQ(irq); 343 307 } 344 308 } 345 309 return IRQ_HANDLED; ··· 350 314 }; 351 315 352 316 353 - static irqreturn_t jmr3927_isaerr_interrupt(int irq, void * dev_id, struct pt_regs * regs) 317 + static irqreturn_t jmr3927_isaerr_interrupt(int irq, void *dev_id) 354 318 { 355 319 printk(KERN_WARNING "ISA error interrupt (irq 0x%x).\n", irq); 356 320 ··· 360 324 jmr3927_isaerr_interrupt, 0, CPU_MASK_NONE, "ISA error", NULL, NULL, 361 325 }; 362 326 363 - static irqreturn_t jmr3927_pcierr_interrupt(int irq, void * dev_id, struct pt_regs * regs) 327 + static irqreturn_t jmr3927_pcierr_interrupt(int irq, void *dev_id) 364 328 { 365 329 printk(KERN_WARNING "PCI error interrupt (irq 0x%x).\n", irq); 366 330 printk(KERN_WARNING "pcistat:%02x, lbstat:%04lx\n", ··· 475 439 476 440 jmr3927_irq_base = irq_base; 477 441 } 478 - 479 - #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND 480 - static int tx_branch_likely_bug_count = 0; 481 - static int have_tx_branch_likely_bug = 0; 482 - void tx_branch_likely_bug_fixup(struct pt_regs *regs) 483 - { 484 - /* TX39/49-BUG: Under this condition, the insn in delay slot 485 - of the branch likely insn is executed (not nullified) even 486 - the branch condition is false. */ 487 - if (!have_tx_branch_likely_bug) 488 - return; 489 - if ((regs->cp0_epc & 0xfff) == 0xffc && 490 - KSEGX(regs->cp0_epc) != KSEG0 && 491 - KSEGX(regs->cp0_epc) != KSEG1) { 492 - unsigned int insn = *(unsigned int*)(regs->cp0_epc - 4); 493 - /* beql,bnel,blezl,bgtzl */ 494 - /* bltzl,bgezl,blezall,bgezall */ 495 - /* bczfl, bcztl */ 496 - if ((insn & 0xf0000000) == 0x50000000 || 497 - (insn & 0xfc0e0000) == 0x04020000 || 498 - (insn & 0xf3fe0000) == 0x41020000) { 499 - regs->cp0_epc -= 4; 500 - tx_branch_likely_bug_count++; 501 - printk(KERN_INFO 502 - "fix branch-likery bug in %s (insn %08x)\n", 503 - current->comm, insn); 504 - } 505 - } 506 - } 507 - #endif
+2 -1
arch/mips/kernel/asm-offsets.c
··· 93 93 offset("#define TI_TASK ", struct thread_info, task); 94 94 offset("#define TI_EXEC_DOMAIN ", struct thread_info, exec_domain); 95 95 offset("#define TI_FLAGS ", struct thread_info, flags); 96 + offset("#define TI_TP_VALUE ", struct thread_info, tp_value); 96 97 offset("#define TI_CPU ", struct thread_info, cpu); 97 98 offset("#define TI_PRE_COUNT ", struct thread_info, preempt_count); 98 99 offset("#define TI_ADDR_LIMIT ", struct thread_info, addr_limit); 99 100 offset("#define TI_RESTART_BLOCK ", struct thread_info, restart_block); 100 - offset("#define TI_TP_VALUE ", struct thread_info, tp_value); 101 + offset("#define TI_REGS ", struct thread_info, regs); 101 102 constant("#define _THREAD_SIZE_ORDER ", THREAD_SIZE_ORDER); 102 103 constant("#define _THREAD_SIZE ", THREAD_SIZE); 103 104 constant("#define _THREAD_MASK ", THREAD_MASK);
-1
arch/mips/kernel/entry.S
··· 79 79 FEXPORT(restore_all) # restore full frame 80 80 #ifdef CONFIG_MIPS_MT_SMTC 81 81 /* Detect and execute deferred IPI "interrupts" */ 82 - move a0,sp 83 82 jal deferred_smtc_ipi 84 83 /* Re-arm any temporarily masked interrupts not explicitly "acked" */ 85 84 mfc0 v0, CP0_TCSTATUS
+10 -5
arch/mips/kernel/genex.S
··· 131 131 CLI 132 132 TRACE_IRQS_OFF 133 133 134 - PTR_LA ra, ret_from_irq 135 - move a0, sp 136 - j plat_irq_dispatch 134 + LONG_L s0, TI_REGS($28) 135 + LONG_S sp, TI_REGS($28) 136 + jal plat_irq_dispatch 137 + LONG_S s0, TI_REGS($28) 138 + j ret_from_irq 137 139 END(handle_int) 138 140 139 141 __INIT ··· 221 219 #endif /* CONFIG_MIPS_MT_SMTC */ 222 220 CLI 223 221 TRACE_IRQS_OFF 224 - move a0, sp 222 + 223 + LONG_L s0, TI_REGS($28) 224 + LONG_S sp, TI_REGS($28) 225 + jalr v0 226 + LONG_S s0, TI_REGS($28) 225 227 PTR_LA ra, ret_from_irq 226 - jr v0 227 228 END(except_vec_vi_handler) 228 229 229 230 /*
+2 -2
arch/mips/kernel/irq-msc01.c
··· 115 115 /* 116 116 * Interrupt handler for interrupts coming from SOC-it. 117 117 */ 118 - void ll_msc_irq(struct pt_regs *regs) 118 + void ll_msc_irq(void) 119 119 { 120 120 unsigned int irq; 121 121 122 122 /* read the interrupt vector register */ 123 123 MSCIC_READ(MSC01_IC_VEC, irq); 124 124 if (irq < 64) 125 - do_IRQ(irq + irq_base, regs); 125 + do_IRQ(irq + irq_base); 126 126 else { 127 127 /* Ignore spurious interrupt */ 128 128 }
+3 -3
arch/mips/kernel/irq-mv6434x.c
··· 113 113 * Interrupt handler for interrupts coming from the Marvell chip. 114 114 * It could be built in ethernet ports etc... 115 115 */ 116 - void ll_mv64340_irq(struct pt_regs *regs) 116 + void ll_mv64340_irq(void) 117 117 { 118 118 unsigned int irq_src_low, irq_src_high; 119 119 unsigned int irq_mask_low, irq_mask_high; ··· 129 129 irq_src_high &= irq_mask_high; 130 130 131 131 if (irq_src_low) 132 - do_IRQ(ls1bit32(irq_src_low) + irq_base, regs); 132 + do_IRQ(ls1bit32(irq_src_low) + irq_base); 133 133 else 134 - do_IRQ(ls1bit32(irq_src_high) + irq_base + 32, regs); 134 + do_IRQ(ls1bit32(irq_src_high) + irq_base + 32); 135 135 } 136 136 137 137 #define shutdown_mv64340_irq disable_mv64340_irq
+2 -4
arch/mips/kernel/irq.c
··· 53 53 * SMP cross-CPU interrupts have their own specific 54 54 * handlers). 55 55 */ 56 - asmlinkage unsigned int do_IRQ(unsigned int irq, struct pt_regs *regs) 56 + asmlinkage unsigned int do_IRQ(unsigned int irq) 57 57 { 58 - struct pt_regs *old_regs = set_irq_regs(regs); 59 58 irq_enter(); 60 59 61 60 __DO_IRQ_SMTC_HOOK(); ··· 62 63 63 64 irq_exit(); 64 65 65 - set_irq_regs(old_regs); 66 66 return 1; 67 67 } 68 68 ··· 110 112 return 0; 111 113 } 112 114 113 - asmlinkage void spurious_interrupt(struct pt_regs *regs) 115 + asmlinkage void spurious_interrupt(void) 114 116 { 115 117 atomic_inc(&irq_err_count); 116 118 }
+3 -3
arch/mips/kernel/rtlx.c
··· 61 61 62 62 extern void *vpe_get_shared(int index); 63 63 64 - static void rtlx_dispatch(struct pt_regs *regs) 64 + static void rtlx_dispatch(void) 65 65 { 66 - do_IRQ(MIPSCPU_INT_BASE + MIPS_CPU_RTLX_IRQ, regs); 66 + do_IRQ(MIPSCPU_INT_BASE + MIPS_CPU_RTLX_IRQ); 67 67 } 68 68 69 69 70 70 /* Interrupt handler may be called before rtlx_init has otherwise had 71 71 a chance to run. 72 72 */ 73 - static irqreturn_t rtlx_interrupt(int irq, void *dev_id, struct pt_regs *regs) 73 + static irqreturn_t rtlx_interrupt(int irq, void *dev_id) 74 74 { 75 75 int i; 76 76
+8 -8
arch/mips/kernel/smp-mt.c
··· 106 106 clear_c0_mvpcontrol(MVPCONTROL_VPC); 107 107 } 108 108 109 - static void ipi_resched_dispatch (struct pt_regs *regs) 109 + static void ipi_resched_dispatch(void) 110 110 { 111 - do_IRQ(MIPSCPU_INT_BASE + MIPS_CPU_IPI_RESCHED_IRQ, regs); 111 + do_IRQ(MIPSCPU_INT_BASE + MIPS_CPU_IPI_RESCHED_IRQ); 112 112 } 113 113 114 - static void ipi_call_dispatch (struct pt_regs *regs) 114 + static void ipi_call_dispatch(void) 115 115 { 116 - do_IRQ(MIPSCPU_INT_BASE + MIPS_CPU_IPI_CALL_IRQ, regs); 116 + do_IRQ(MIPSCPU_INT_BASE + MIPS_CPU_IPI_CALL_IRQ); 117 117 } 118 118 119 - irqreturn_t ipi_resched_interrupt(int irq, void *dev_id, struct pt_regs *regs) 119 + static irqreturn_t ipi_resched_interrupt(int irq, void *dev_id) 120 120 { 121 121 return IRQ_HANDLED; 122 122 } 123 123 124 - irqreturn_t ipi_call_interrupt(int irq, void *dev_id, struct pt_regs *regs) 124 + static irqreturn_t ipi_call_interrupt(int irq, void *dev_id) 125 125 { 126 126 smp_call_function_interrupt(); 127 127 ··· 250 250 { 251 251 /* set up ipi interrupts */ 252 252 if (cpu_has_vint) { 253 - set_vi_handler (MIPS_CPU_IPI_RESCHED_IRQ, ipi_resched_dispatch); 254 - set_vi_handler (MIPS_CPU_IPI_CALL_IRQ, ipi_call_dispatch); 253 + set_vi_handler(MIPS_CPU_IPI_RESCHED_IRQ, ipi_resched_dispatch); 254 + set_vi_handler(MIPS_CPU_IPI_CALL_IRQ, ipi_call_dispatch); 255 255 } 256 256 257 257 cpu_ipi_resched_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_RESCHED_IRQ;
+13 -13
arch/mips/kernel/smtc.c
··· 82 82 83 83 /* Forward declarations */ 84 84 85 - void ipi_decode(struct pt_regs *, struct smtc_ipi *); 85 + void ipi_decode(struct smtc_ipi *); 86 86 void post_direct_ipi(int cpu, struct smtc_ipi *pipi); 87 87 void setup_cross_vpe_interrupts(void); 88 88 void init_smtc_stats(void); ··· 820 820 write_tc_c0_tcrestart(__smtc_ipi_vector); 821 821 } 822 822 823 - void ipi_resched_interrupt(struct pt_regs *regs) 823 + static void ipi_resched_interrupt(void) 824 824 { 825 825 /* Return from interrupt should be enough to cause scheduler check */ 826 826 } 827 827 828 828 829 - void ipi_call_interrupt(struct pt_regs *regs) 829 + static void ipi_call_interrupt(void) 830 830 { 831 831 /* Invoke generic function invocation code in smp.c */ 832 832 smp_call_function_interrupt(); 833 833 } 834 834 835 - void ipi_decode(struct pt_regs *regs, struct smtc_ipi *pipi) 835 + void ipi_decode(struct smtc_ipi *pipi) 836 836 { 837 837 void *arg_copy = pipi->arg; 838 838 int type_copy = pipi->type; ··· 846 846 #ifdef SMTC_IDLE_HOOK_DEBUG 847 847 clock_hang_reported[dest_copy] = 0; 848 848 #endif /* SMTC_IDLE_HOOK_DEBUG */ 849 - local_timer_interrupt(0, NULL, regs); 849 + local_timer_interrupt(0, NULL); 850 850 break; 851 851 case LINUX_SMP_IPI: 852 852 switch ((int)arg_copy) { 853 853 case SMP_RESCHEDULE_YOURSELF: 854 - ipi_resched_interrupt(regs); 854 + ipi_resched_interrupt(); 855 855 break; 856 856 case SMP_CALL_FUNCTION: 857 - ipi_call_interrupt(regs); 857 + ipi_call_interrupt(); 858 858 break; 859 859 default: 860 860 printk("Impossible SMTC IPI Argument 0x%x\n", ··· 868 868 } 869 869 } 870 870 871 - void deferred_smtc_ipi(struct pt_regs *regs) 871 + void deferred_smtc_ipi(void) 872 872 { 873 873 struct smtc_ipi *pipi; 874 874 unsigned long flags; ··· 883 883 while((pipi = smtc_ipi_dq(&IPIQ[q])) != NULL) { 884 884 /* ipi_decode() should be called with interrupts off */ 885 885 local_irq_save(flags); 886 - ipi_decode(regs, pipi); 886 + ipi_decode(pipi); 887 887 local_irq_restore(flags); 888 888 } 889 889 } ··· 917 917 918 918 static int cpu_ipi_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_IRQ; 919 919 920 - static irqreturn_t ipi_interrupt(int irq, void *dev_idm, struct pt_regs *regs) 920 + static irqreturn_t ipi_interrupt(int irq, void *dev_idm) 921 921 { 922 922 int my_vpe = cpu_data[smp_processor_id()].vpe_id; 923 923 int my_tc = cpu_data[smp_processor_id()].tc_id; ··· 978 978 * with interrupts off 979 979 */ 980 980 local_irq_save(flags); 981 - ipi_decode(regs, pipi); 981 + ipi_decode(pipi); 982 982 local_irq_restore(flags); 983 983 } 984 984 } ··· 987 987 return IRQ_HANDLED; 988 988 } 989 989 990 - static void ipi_irq_dispatch(struct pt_regs *regs) 990 + static void ipi_irq_dispatch(void) 991 991 { 992 - do_IRQ(cpu_ipi_irq, regs); 992 + do_IRQ(cpu_ipi_irq); 993 993 } 994 994 995 995 static struct irqaction irq_ipi;
+3 -8
arch/mips/kernel/time.c
··· 324 324 */ 325 325 void local_timer_interrupt(int irq, void *dev_id) 326 326 { 327 - if (current->pid) 328 - profile_tick(CPU_PROFILING); 327 + profile_tick(CPU_PROFILING); 329 328 update_process_times(user_mode(get_irq_regs())); 330 329 } 331 330 ··· 433 434 EXPORT_SYMBOL(null_perf_irq); 434 435 EXPORT_SYMBOL(perf_irq); 435 436 436 - asmlinkage void ll_timer_interrupt(int irq, struct pt_regs *regs) 437 + asmlinkage void ll_timer_interrupt(int irq) 437 438 { 438 - struct pt_regs *old_regs = set_irq_regs(regs); 439 439 int r2 = cpu_has_mips_r2; 440 440 441 441 irq_enter(); ··· 456 458 457 459 out: 458 460 irq_exit(); 459 - set_irq_regs(old_regs); 460 461 } 461 462 462 - asmlinkage void ll_local_timer_interrupt(int irq, struct pt_regs *regs) 463 + asmlinkage void ll_local_timer_interrupt(int irq) 463 464 { 464 - struct pt_regs *old_regs = set_irq_regs(regs); 465 465 irq_enter(); 466 466 if (smp_processor_id() != 0) 467 467 kstat_this_cpu.irqs[irq]++; ··· 468 472 local_timer_interrupt(irq, NULL); 469 473 470 474 irq_exit(); 471 - set_irq_regs(old_regs); 472 475 } 473 476 474 477 /*
+3 -3
arch/mips/lasat/interrupt.c
··· 108 108 return int_status; 109 109 } 110 110 111 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 111 + asmlinkage void plat_irq_dispatch(void) 112 112 { 113 113 unsigned long int_status; 114 114 unsigned int cause = read_c0_cause(); 115 115 int irq; 116 116 117 117 if (cause & CAUSEF_IP7) { /* R4000 count / compare IRQ */ 118 - ll_timer_interrupt(7, regs); 118 + ll_timer_interrupt(7); 119 119 return; 120 120 } 121 121 ··· 125 125 if (int_status) { 126 126 irq = ls1bit32(int_status); 127 127 128 - do_IRQ(irq, regs); 128 + do_IRQ(irq); 129 129 } 130 130 } 131 131
+6 -6
arch/mips/mips-boards/atlas/atlas_int.c
··· 101 101 return b; 102 102 } 103 103 104 - static inline void atlas_hw0_irqdispatch(struct pt_regs *regs) 104 + static inline void atlas_hw0_irqdispatch(void) 105 105 { 106 106 unsigned long int_status; 107 107 int irq; ··· 116 116 117 117 DEBUG_INT("atlas_hw0_irqdispatch: irq=%d\n", irq); 118 118 119 - do_IRQ(irq, regs); 119 + do_IRQ(irq); 120 120 } 121 121 122 122 static inline int clz(unsigned long x) ··· 188 188 * then we just return, if multiple IRQs are pending then we will just take 189 189 * another exception, big deal. 190 190 */ 191 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 191 + asmlinkage void plat_irq_dispatch(void) 192 192 { 193 193 unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; 194 194 int irq; ··· 196 196 irq = irq_ffs(pending); 197 197 198 198 if (irq == MIPSCPU_INT_ATLAS) 199 - atlas_hw0_irqdispatch(regs); 199 + atlas_hw0_irqdispatch(); 200 200 else if (irq >= 0) 201 - do_IRQ(MIPSCPU_INT_BASE + irq, regs); 201 + do_IRQ(MIPSCPU_INT_BASE + irq); 202 202 else 203 - spurious_interrupt(regs); 203 + spurious_interrupt(); 204 204 } 205 205 206 206 static inline void init_atlas_irqs (int base)
+11 -11
arch/mips/mips-boards/generic/time.c
··· 82 82 } 83 83 } 84 84 85 - static void mips_timer_dispatch (struct pt_regs *regs) 85 + static void mips_timer_dispatch(void) 86 86 { 87 - do_IRQ (mips_cpu_timer_irq, regs); 87 + do_IRQ(mips_cpu_timer_irq); 88 88 } 89 89 90 90 /* 91 91 * Redeclare until I get around mopping the timer code insanity on MIPS. 92 92 */ 93 - extern int null_perf_irq(struct pt_regs *regs); 93 + extern int null_perf_irq(void); 94 94 95 - extern int (*perf_irq)(struct pt_regs *regs); 95 + extern int (*perf_irq)(void); 96 96 97 - irqreturn_t mips_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) 97 + irqreturn_t mips_timer_interrupt(int irq, void *dev_id) 98 98 { 99 99 int cpu = smp_processor_id(); 100 100 ··· 119 119 * perf counter overflow, or both. 120 120 */ 121 121 if (read_c0_cause() & (1 << 26)) 122 - perf_irq(regs); 122 + perf_irq(); 123 123 124 124 if (read_c0_cause() & (1 << 30)) { 125 125 /* If timer interrupt, make it de-assert */ ··· 139 139 * the tick on VPE 0 to run the full timer_interrupt(). 140 140 */ 141 141 if (cpu_data[cpu].vpe_id == 0) { 142 - timer_interrupt(irq, NULL, regs); 142 + timer_interrupt(irq, NULL); 143 143 smtc_timer_broadcast(cpu_data[cpu].vpe_id); 144 144 scroll_display_message(); 145 145 } else { 146 146 write_c0_compare(read_c0_count() + 147 147 (mips_hpt_frequency/HZ)); 148 - local_timer_interrupt(irq, dev_id, regs); 148 + local_timer_interrupt(irq, dev_id); 149 149 smtc_timer_broadcast(cpu_data[cpu].vpe_id); 150 150 } 151 151 } ··· 159 159 * timer int. 160 160 */ 161 161 if (!r2 || (read_c0_cause() & (1 << 26))) 162 - if (perf_irq(regs)) 162 + if (perf_irq()) 163 163 goto out; 164 164 165 165 /* we keep interrupt disabled all the time */ 166 166 if (!r2 || (read_c0_cause() & (1 << 30))) 167 - timer_interrupt(irq, NULL, regs); 167 + timer_interrupt(irq, NULL); 168 168 169 169 scroll_display_message(); 170 170 } else { ··· 180 180 /* 181 181 * Other CPUs should do profiling and process accounting 182 182 */ 183 - local_timer_interrupt(irq, dev_id, regs); 183 + local_timer_interrupt(irq, dev_id); 184 184 } 185 185 out: 186 186 #endif /* CONFIG_MIPS_MT_SMTC */
+15 -11
arch/mips/mips-boards/malta/malta_int.c
··· 114 114 return irq; 115 115 } 116 116 117 - static void malta_hw0_irqdispatch(struct pt_regs *regs) 117 + static void malta_hw0_irqdispatch(void) 118 118 { 119 119 int irq; 120 120 ··· 123 123 return; /* interrupt has already been cleared */ 124 124 } 125 125 126 - do_IRQ(MALTA_INT_BASE+irq, regs); 126 + do_IRQ(MALTA_INT_BASE + irq); 127 127 } 128 128 129 - void corehi_irqdispatch(struct pt_regs *regs) 129 + static void corehi_irqdispatch(void) 130 130 { 131 + unsigned int intedge, intsteer, pcicmd, pcibadaddr; 132 + unsigned int pcimstat, intisr, inten, intpol; 131 133 unsigned int intrcause,datalo,datahi; 132 - unsigned int pcimstat, intisr, inten, intpol, intedge, intsteer, pcicmd, pcibadaddr; 134 + struct pt_regs *regs; 133 135 134 136 printk("CoreHI interrupt, shouldn't happen, so we die here!!!\n"); 135 - printk("epc : %08lx\nStatus: %08lx\nCause : %08lx\nbadVaddr : %08lx\n" 136 - , regs->cp0_epc, regs->cp0_status, regs->cp0_cause, regs->cp0_badvaddr); 137 + printk("epc : %08lx\nStatus: %08lx\n" 138 + "Cause : %08lx\nbadVaddr : %08lx\n", 139 + regs->cp0_epc, regs->cp0_status, 140 + regs->cp0_cause, regs->cp0_badvaddr); 137 141 138 142 /* Read all the registers and then print them as there is a 139 143 problem with interspersed printk's upsetting the Bonito controller. ··· 150 146 case MIPS_REVISION_CORID_CORE_FPGA3: 151 147 case MIPS_REVISION_CORID_CORE_24K: 152 148 case MIPS_REVISION_CORID_CORE_EMUL_MSC: 153 - ll_msc_irq(regs); 149 + ll_msc_irq(); 154 150 break; 155 151 case MIPS_REVISION_CORID_QED_RM5261: 156 152 case MIPS_REVISION_CORID_CORE_LV: ··· 259 255 * another exception, big deal. 260 256 */ 261 257 262 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 258 + asmlinkage void plat_irq_dispatch(void) 263 259 { 264 260 unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; 265 261 int irq; ··· 267 263 irq = irq_ffs(pending); 268 264 269 265 if (irq == MIPSCPU_INT_I8259A) 270 - malta_hw0_irqdispatch(regs); 266 + malta_hw0_irqdispatch(); 271 267 else if (irq > 0) 272 - do_IRQ(MIPSCPU_INT_BASE + irq, regs); 268 + do_IRQ(MIPSCPU_INT_BASE + irq); 273 269 else 274 - spurious_interrupt(regs); 270 + spurious_interrupt(); 275 271 } 276 272 277 273 static struct irqaction i8259irq = {
+2 -2
arch/mips/mips-boards/sead/sead_int.c
··· 98 98 * then we just return, if multiple IRQs are pending then we will just take 99 99 * another exception, big deal. 100 100 */ 101 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 101 + asmlinkage void plat_irq_dispatch(void) 102 102 { 103 103 unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; 104 104 int irq; ··· 106 106 irq = irq_ffs(pending); 107 107 108 108 if (irq >= 0) 109 - do_IRQ(MIPSCPU_INT_BASE + irq, regs); 109 + do_IRQ(MIPSCPU_INT_BASE + irq); 110 110 else 111 111 spurious_interrupt(regs); 112 112 }
+3 -8
arch/mips/mips-boards/sim/sim_int.c
··· 71 71 #endif 72 72 } 73 73 74 - static inline void sim_hw0_irqdispatch(struct pt_regs *regs) 75 - { 76 - do_IRQ(2, regs); 77 - } 78 - 79 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 74 + asmlinkage void plat_irq_dispatch(void) 80 75 { 81 76 unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; 82 77 int irq; ··· 79 84 irq = irq_ffs(pending); 80 85 81 86 if (irq > 0) 82 - do_IRQ(MIPSCPU_INT_BASE + irq, regs); 87 + do_IRQ(MIPSCPU_INT_BASE + irq); 83 88 else 84 - spurious_interrupt(regs); 89 + spurious_interrupt(); 85 90 } 86 91 87 92 void __init arch_init_irq(void)
+7 -7
arch/mips/mips-boards/sim/sim_time.c
··· 33 33 34 34 unsigned long cpu_khz; 35 35 36 - irqreturn_t sim_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) 36 + irqreturn_t sim_timer_interrupt(int irq, void *dev_id) 37 37 { 38 38 #ifdef CONFIG_SMP 39 39 int cpu = smp_processor_id(); ··· 44 44 */ 45 45 #ifndef CONFIG_MIPS_MT_SMTC 46 46 if (cpu == 0) { 47 - timer_interrupt(irq, dev_id, regs); 47 + timer_interrupt(irq, dev_id); 48 48 } 49 49 else { 50 50 /* Everyone else needs to reset the timer int here as ··· 84 84 irq_enable_hazard(); 85 85 evpe(vpflags); 86 86 87 - if(cpu_data[cpu].vpe_id == 0) timer_interrupt(irq, dev_id, regs); 87 + if(cpu_data[cpu].vpe_id == 0) timer_interrupt(irq, dev_id); 88 88 else write_c0_compare (read_c0_count() + ( mips_hpt_frequency/HZ)); 89 89 smtc_timer_broadcast(cpu_data[cpu].vpe_id); 90 90 ··· 93 93 /* 94 94 * every CPU should do profiling and process accounting 95 95 */ 96 - local_timer_interrupt (irq, dev_id, regs); 96 + local_timer_interrupt (irq, dev_id); 97 97 return IRQ_HANDLED; 98 98 #else 99 - return timer_interrupt (irq, dev_id, regs); 99 + return timer_interrupt (irq, dev_id); 100 100 #endif 101 101 } 102 102 ··· 177 177 178 178 static int mips_cpu_timer_irq; 179 179 180 - static void mips_timer_dispatch (struct pt_regs *regs) 180 + static void mips_timer_dispatch(void) 181 181 { 182 - do_IRQ (mips_cpu_timer_irq, regs); 182 + do_IRQ(mips_cpu_timer_irq); 183 183 } 184 184 185 185
+10 -10
arch/mips/momentum/jaguar_atx/irq.c
··· 40 40 #include <asm/mipsregs.h> 41 41 #include <asm/time.h> 42 42 43 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 43 + asmlinkage void plat_irq_dispatch(void) 44 44 { 45 45 unsigned int pending = read_c0_cause() & read_c0_status(); 46 46 47 47 if (pending & STATUSF_IP0) 48 - do_IRQ(0, regs); 48 + do_IRQ(0); 49 49 else if (pending & STATUSF_IP1) 50 - do_IRQ(1, regs); 50 + do_IRQ(1); 51 51 else if (pending & STATUSF_IP2) 52 - do_IRQ(2, regs); 52 + do_IRQ(2); 53 53 else if (pending & STATUSF_IP3) 54 - do_IRQ(3, regs); 54 + do_IRQ(3); 55 55 else if (pending & STATUSF_IP4) 56 - do_IRQ(4, regs); 56 + do_IRQ(4); 57 57 else if (pending & STATUSF_IP5) 58 - do_IRQ(5, regs); 58 + do_IRQ(5); 59 59 else if (pending & STATUSF_IP6) 60 - do_IRQ(6, regs); 60 + do_IRQ(6); 61 61 else if (pending & STATUSF_IP7) 62 - ll_timer_interrupt(7, regs); 62 + ll_timer_interrupt(7); 63 63 else { 64 64 /* 65 65 * Now look at the extended interrupts 66 66 */ 67 67 pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16; 68 68 if (pending & STATUSF_IP8) 69 - ll_mv64340_irq(regs); 69 + ll_mv64340_irq(); 70 70 } 71 71 } 72 72
+11 -11
arch/mips/momentum/ocelot_3/irq.c
··· 75 75 76 76 } 77 77 78 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 78 + asmlinkage void plat_irq_dispatch(void) 79 79 { 80 80 unsigned int pending = read_c0_cause() & read_c0_status(); 81 81 82 82 if (pending & STATUSF_IP0) 83 - do_IRQ(0, regs); 83 + do_IRQ(0); 84 84 else if (pending & STATUSF_IP1) 85 - do_IRQ(1, regs); 85 + do_IRQ(1); 86 86 else if (pending & STATUSF_IP2) 87 - do_IRQ(2, regs); 87 + do_IRQ(2); 88 88 else if (pending & STATUSF_IP3) 89 - do_IRQ(3, regs); 89 + do_IRQ(3); 90 90 else if (pending & STATUSF_IP4) 91 - do_IRQ(4, regs); 91 + do_IRQ(4); 92 92 else if (pending & STATUSF_IP5) 93 - do_IRQ(5, regs); 93 + do_IRQ(5); 94 94 else if (pending & STATUSF_IP6) 95 - do_IRQ(6, regs); 95 + do_IRQ(6); 96 96 else if (pending & STATUSF_IP7) 97 - do_IRQ(7, regs); 97 + do_IRQ(7); 98 98 else { 99 99 /* 100 100 * Now look at the extended interrupts ··· 102 102 pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16; 103 103 104 104 if (pending & STATUSF_IP8) 105 - ll_mv64340_irq(regs); 105 + ll_mv64340_irq(); 106 106 else 107 - spurious_interrupt(regs); 107 + spurious_interrupt(); 108 108 } 109 109 }
+2 -2
arch/mips/momentum/ocelot_c/cpci-irq.c
··· 112 112 * Interrupt handler for interrupts coming from the FPGA chip. 113 113 * It could be built in ethernet ports etc... 114 114 */ 115 - void ll_cpci_irq(struct pt_regs *regs) 115 + void ll_cpci_irq(void) 116 116 { 117 117 unsigned int irq_src, irq_mask; 118 118 ··· 123 123 /* mask for just the interrupts we want */ 124 124 irq_src &= ~irq_mask; 125 125 126 - do_IRQ(ls1bit8(irq_src) + CPCI_IRQ_BASE, regs); 126 + do_IRQ(ls1bit8(irq_src) + CPCI_IRQ_BASE); 127 127 } 128 128 129 129 #define shutdown_cpci_irq disable_cpci_irq
+11 -11
arch/mips/momentum/ocelot_c/irq.c
··· 59 59 no_action, IRQF_DISABLED, CPU_MASK_NONE, "cascade via MV64340", NULL, NULL 60 60 }; 61 61 62 - extern void ll_uart_irq(struct pt_regs *regs); 63 - extern void ll_cpci_irq(struct pt_regs *regs); 62 + extern void ll_uart_irq(void); 63 + extern void ll_cpci_irq(void); 64 64 65 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 65 + asmlinkage void plat_irq_dispatch(void) 66 66 { 67 67 unsigned int pending = read_c0_cause() & read_c0_status(); 68 68 69 69 if (pending & STATUSF_IP0) 70 - do_IRQ(0, regs); 70 + do_IRQ(0); 71 71 else if (pending & STATUSF_IP1) 72 - do_IRQ(1, regs); 72 + do_IRQ(1); 73 73 else if (pending & STATUSF_IP2) 74 - do_IRQ(2, regs); 74 + do_IRQ(2); 75 75 else if (pending & STATUSF_IP3) 76 - ll_uart_irq(regs); 76 + ll_uart_irq(); 77 77 else if (pending & STATUSF_IP4) 78 - do_IRQ(4, regs); 78 + do_IRQ(4); 79 79 else if (pending & STATUSF_IP5) 80 - ll_cpci_irq(regs); 80 + ll_cpci_irq(); 81 81 else if (pending & STATUSF_IP6) 82 82 ll_mv64340_irq(regs); 83 83 else if (pending & STATUSF_IP7) 84 - do_IRQ(7, regs); 84 + do_IRQ(7); 85 85 else 86 - spurious_interrupt(regs); 86 + spurious_interrupt(); 87 87 } 88 88 89 89 void __init arch_init_irq(void)
+2 -2
arch/mips/momentum/ocelot_c/uart-irq.c
··· 105 105 /* 106 106 * Interrupt handler for interrupts coming from the FPGA chip. 107 107 */ 108 - void ll_uart_irq(struct pt_regs *regs) 108 + void ll_uart_irq(void) 109 109 { 110 110 unsigned int irq_src, irq_mask; 111 111 ··· 116 116 /* mask for just the interrupts we want */ 117 117 irq_src &= ~irq_mask; 118 118 119 - do_IRQ(ls1bit8(irq_src) + 74, regs); 119 + do_IRQ(ls1bit8(irq_src) + 74); 120 120 } 121 121 122 122 #define shutdown_uart_irq disable_uart_irq
+2 -2
arch/mips/momentum/ocelot_g/gt-irq.c
··· 108 108 * we keep this particular structure in the function. 109 109 */ 110 110 111 - static irqreturn_t gt64240_p0int_irq(int irq, void *dev, struct pt_regs *regs) 111 + static irqreturn_t gt64240_p0int_irq(int irq, void *dev) 112 112 { 113 113 uint32_t irq_src, irq_src_mask; 114 114 int handled; ··· 135 135 /* handle the timer call */ 136 136 do_timer(1); 137 137 #ifndef CONFIG_SMP 138 - update_process_times(user_mode(regs)); 138 + update_process_times(user_mode(get_irq_regs())); 139 139 #endif 140 140 } 141 141
+12 -12
arch/mips/momentum/ocelot_g/irq.c
··· 48 48 #include <asm/mipsregs.h> 49 49 #include <asm/system.h> 50 50 51 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 51 + asmlinkage void plat_irq_dispatch(void) 52 52 { 53 53 unsigned int pending = read_c0_cause() & read_c0_status(); 54 54 55 55 if (pending & STATUSF_IP2) 56 - do_IRQ(2, regs); 56 + do_IRQ(2); 57 57 else if (pending & STATUSF_IP3) 58 - do_IRQ(3, regs); 58 + do_IRQ(3); 59 59 else if (pending & STATUSF_IP4) 60 - do_IRQ(4, regs); 60 + do_IRQ(4); 61 61 else if (pending & STATUSF_IP5) 62 - do_IRQ(5, regs); 62 + do_IRQ(5); 63 63 else if (pending & STATUSF_IP6) 64 - do_IRQ(6, regs); 64 + do_IRQ(6); 65 65 else if (pending & STATUSF_IP7) 66 - do_IRQ(7, regs); 66 + do_IRQ(7); 67 67 else { 68 68 /* 69 69 * Now look at the extended interrupts ··· 71 71 pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16; 72 72 73 73 if (pending & STATUSF_IP8) 74 - do_IRQ(8, regs); 74 + do_IRQ(8); 75 75 else if (pending & STATUSF_IP9) 76 - do_IRQ(9, regs); 76 + do_IRQ(9); 77 77 else if (pending & STATUSF_IP10) 78 - do_IRQ(10, regs); 78 + do_IRQ(10); 79 79 else if (pending & STATUSF_IP11) 80 - do_IRQ(11, regs); 80 + do_IRQ(11); 81 81 else 82 - spurious_interrupt(regs); 82 + spurious_interrupt(); 83 83 } 84 84 } 85 85
+2 -2
arch/mips/oprofile/op_impl.h
··· 12 12 13 13 struct pt_regs; 14 14 15 - extern int null_perf_irq(struct pt_regs *regs); 16 - extern int (*perf_irq)(struct pt_regs *regs); 15 + extern int null_perf_irq(void); 16 + extern int (*perf_irq)(void); 17 17 18 18 /* Per-counter configuration as set via oprofilefs. */ 19 19 struct op_counter_config {
+4 -3
arch/mips/oprofile/op_model_mipsxx.c
··· 3 3 * License. See the file "COPYING" in the main directory of this archive 4 4 * for more details. 5 5 * 6 - * Copyright (C) 2004, 2005 by Ralf Baechle 6 + * Copyright (C) 2004, 05, 06 by Ralf Baechle 7 7 * Copyright (C) 2005 by MIPS Technologies, Inc. 8 8 */ 9 9 #include <linux/oprofile.h> 10 10 #include <linux/interrupt.h> 11 11 #include <linux/smp.h> 12 + #include <asm/irq_regs.h> 12 13 13 14 #include "op_impl.h" 14 15 ··· 171 170 } 172 171 } 173 172 174 - static int mipsxx_perfcount_handler(struct pt_regs *regs) 173 + static int mipsxx_perfcount_handler(void) 175 174 { 176 175 unsigned int counters = op_model_mipsxx_ops.num_counters; 177 176 unsigned int control; ··· 185 184 counter = r_c0_perfcntr ## n(); \ 186 185 if ((control & M_PERFCTL_INTERRUPT_ENABLE) && \ 187 186 (counter & M_COUNTER_OVERFLOW)) { \ 188 - oprofile_add_sample(regs, n); \ 187 + oprofile_add_sample(get_irq_regs(), n); \ 189 188 w_c0_perfcntr ## n(reg.counter[n]); \ 190 189 handled = 1; \ 191 190 }
+1 -1
arch/mips/pci/pci-ip32.c
··· 22 22 * registered on the bridge error irq. It's conceivable that some of these 23 23 * conditions warrant a panic. Anybody care to say which ones? 24 24 */ 25 - static irqreturn_t macepci_error(int irq, void *dev, struct pt_regs *regs) 25 + static irqreturn_t macepci_error(int irq, void *dev) 26 26 { 27 27 char s; 28 28 unsigned int flags = mace->pci.error;
+15 -17
arch/mips/philips/pnx8550/common/int.c
··· 23 23 * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. 24 24 * 25 25 */ 26 + #include <linux/compiler.h> 26 27 #include <linux/init.h> 27 28 #include <linux/irq.h> 28 29 #include <linux/sched.h> ··· 53 52 1 // 70 54 53 }; 55 54 56 - static void hw0_irqdispatch(int irq, struct pt_regs *regs) 55 + static void hw0_irqdispatch(int irq) 57 56 { 58 57 /* find out which interrupt */ 59 58 irq = PNX8550_GIC_VECTOR_0 >> 3; ··· 62 61 printk("hw0_irqdispatch: irq 0, spurious interrupt?\n"); 63 62 return; 64 63 } 65 - do_IRQ(PNX8550_INT_GIC_MIN + irq, regs); 64 + do_IRQ(PNX8550_INT_GIC_MIN + irq); 66 65 } 67 66 68 67 69 - static void timer_irqdispatch(int irq, struct pt_regs *regs) 68 + static void timer_irqdispatch(int irq) 70 69 { 71 70 irq = (0x01c0 & read_c0_config7()) >> 6; 72 71 73 - if (irq == 0) { 72 + if (unlikely(irq == 0)) { 74 73 printk("timer_irqdispatch: irq 0, spurious interrupt?\n"); 75 74 return; 76 75 } 77 76 78 - if (irq & 0x1) { 79 - do_IRQ(PNX8550_INT_TIMER1, regs); 80 - } 81 - if (irq & 0x2) { 82 - do_IRQ(PNX8550_INT_TIMER2, regs); 83 - } 84 - if (irq & 0x4) { 85 - do_IRQ(PNX8550_INT_TIMER3, regs); 86 - } 77 + if (irq & 0x1) 78 + do_IRQ(PNX8550_INT_TIMER1); 79 + if (irq & 0x2) 80 + do_IRQ(PNX8550_INT_TIMER2); 81 + if (irq & 0x4) 82 + do_IRQ(PNX8550_INT_TIMER3); 87 83 } 88 84 89 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 85 + asmlinkage void plat_irq_dispatch(void) 90 86 { 91 87 unsigned int pending = read_c0_status() & read_c0_cause(); 92 88 93 89 if (pending & STATUSF_IP2) 94 - hw0_irqdispatch(2, regs); 90 + hw0_irqdispatch(2); 95 91 else if (pending & STATUSF_IP7) { 96 92 if (read_c0_config7() & 0x01c0) 97 - timer_irqdispatch(7, regs); 93 + timer_irqdispatch(7); 98 94 } 99 95 100 - spurious_interrupt(regs); 96 + spurious_interrupt(); 101 97 } 102 98 103 99 static inline void modify_cp0_intmask(unsigned clr_mask, unsigned set_mask)
+11 -43
arch/mips/pmc-sierra/yosemite/irq.c
··· 56 56 #define HYPERTRANSPORT_INTC 0x7a /* INTC# */ 57 57 #define HYPERTRANSPORT_INTD 0x7b /* INTD# */ 58 58 59 - extern void jaguar_mailbox_irq(struct pt_regs *); 60 - 61 59 /* 62 60 * Handle hypertransport & SMP interrupts. The interrupt lines are scarce. 63 61 * For interprocessor interrupts, the best thing to do is to use the INTMSG 64 62 * register. We use the same external interrupt line, i.e. INTB3 and monitor 65 63 * another status bit 66 64 */ 67 - asmlinkage void ll_ht_smp_irq_handler(int irq, struct pt_regs *regs) 65 + static void ll_ht_smp_irq_handler(int irq) 68 66 { 69 67 u32 status = OCD_READ(RM9000x2_OCD_INTP0STATUS4); 70 68 ··· 105 107 } 106 108 #endif /* CONFIG_HT_LEVEL_TRIGGER */ 107 109 108 - do_IRQ(irq, regs); 110 + do_IRQ(irq); 109 111 } 110 112 111 - asmlinkage void do_extended_irq(struct pt_regs *regs) 112 - { 113 - unsigned int intcontrol = read_c0_intcontrol(); 114 - unsigned int cause = read_c0_cause(); 115 - unsigned int status = read_c0_status(); 116 - unsigned int pending_sr, pending_ic; 117 - 118 - pending_sr = status & cause & 0xff00; 119 - pending_ic = (cause >> 8) & intcontrol & 0xff00; 120 - 121 - if (pending_ic & (1 << 13)) 122 - do_IRQ(13, regs); 123 - 124 - } 125 - 126 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 113 + asmlinkage void plat_irq_dispatch(void) 127 114 { 128 115 unsigned int cause = read_c0_cause(); 129 116 unsigned int status = read_c0_status(); 130 117 unsigned int pending = cause & status; 131 118 132 119 if (pending & STATUSF_IP7) { 133 - do_IRQ(7, regs); 120 + do_IRQ(7); 134 121 } else if (pending & STATUSF_IP2) { 135 122 #ifdef CONFIG_HYPERTRANSPORT 136 - ll_ht_smp_irq_handler(2, regs); 123 + ll_ht_smp_irq_handler(2); 137 124 #else 138 - do_IRQ(2, regs); 125 + do_IRQ(2); 139 126 #endif 140 127 } else if (pending & STATUSF_IP3) { 141 - do_IRQ(3, regs); 128 + do_IRQ(3); 142 129 } else if (pending & STATUSF_IP4) { 143 - do_IRQ(4, regs); 130 + do_IRQ(4); 144 131 } else if (pending & STATUSF_IP5) { 145 132 #ifdef CONFIG_SMP 146 - titan_mailbox_irq(regs); 133 + titan_mailbox_irq(); 147 134 #else 148 - do_IRQ(5, regs); 135 + do_IRQ(5); 149 136 #endif 150 137 } else if (pending & STATUSF_IP6) { 151 - do_IRQ(4, regs); 138 + do_IRQ(4); 152 139 } 153 140 } 154 141 ··· 161 178 register_gdb_console(); 162 179 #endif 163 180 } 164 - 165 - #ifdef CONFIG_KGDB 166 - /* 167 - * The 16550 DUART has two ports, but is allocated one IRQ 168 - * for the serial console. Hence, a generic framework for 169 - * serial IRQ routing in place. Currently, just calls the 170 - * do_IRQ fuction. But, going in the future, need to check 171 - * DUART registers for channel A and B, then decide the 172 - * appropriate action 173 - */ 174 - asmlinkage void yosemite_kgdb_irq(int irq, struct pt_regs *regs) 175 - { 176 - do_IRQ(irq, regs); 177 - } 178 - #endif
+1 -1
arch/mips/pmc-sierra/yosemite/smp.c
··· 110 110 { 111 111 } 112 112 113 - asmlinkage void titan_mailbox_irq(struct pt_regs *regs) 113 + asmlinkage void titan_mailbox_irq(void) 114 114 { 115 115 int cpu = smp_processor_id(); 116 116 unsigned long status;
+3 -3
arch/mips/qemu/q-irq.c
··· 9 9 10 10 extern asmlinkage void qemu_handle_int(void); 11 11 12 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 12 + asmlinkage void plat_irq_dispatch(void) 13 13 { 14 14 unsigned int pending = read_c0_status() & read_c0_cause(); 15 15 16 16 if (pending & 0x8000) { 17 - ll_timer_interrupt(Q_COUNT_COMPARE_IRQ, regs); 17 + ll_timer_interrupt(Q_COUNT_COMPARE_IRQ); 18 18 return; 19 19 } 20 20 if (pending & 0x0400) { 21 21 int irq = i8259_irq(); 22 22 23 23 if (likely(irq >= 0)) 24 - do_IRQ(irq, regs); 24 + do_IRQ(irq); 25 25 26 26 return; 27 27 }
+3 -1
arch/mips/sgi-ip22/ip22-berr.c
··· 12 12 #include <asm/system.h> 13 13 #include <asm/traps.h> 14 14 #include <asm/branch.h> 15 + #include <asm/irq_regs.h> 15 16 #include <asm/sgi/mc.h> 16 17 #include <asm/sgi/hpc3.h> 17 18 #include <asm/sgi/ioc.h> ··· 86 85 * and then clear the interrupt when this happens. 87 86 */ 88 87 89 - void ip22_be_interrupt(int irq, struct pt_regs *regs) 88 + void ip22_be_interrupt(int irq) 90 89 { 91 90 const int field = 2 * sizeof(unsigned long); 91 + const struct pt_regs *regs = get_irq_regs(); 92 92 93 93 save_and_clear_buserr(); 94 94 print_buserr();
+3 -2
arch/mips/sgi-ip22/ip22-eisa.c
··· 70 70 return sig_str; 71 71 } 72 72 73 - static irqreturn_t ip22_eisa_intr(int irq, void *dev_id, struct pt_regs *regs) 73 + static irqreturn_t ip22_eisa_intr(int irq, void *dev_id) 74 74 { 75 75 u8 eisa_irq; 76 76 u8 dma1, dma2; ··· 80 80 dma2 = inb(EISA_DMA2_STATUS); 81 81 82 82 if (eisa_irq < EISA_MAX_IRQ) { 83 - do_IRQ(eisa_irq, regs); 83 + do_IRQ(eisa_irq); 84 84 return IRQ_HANDLED; 85 85 } 86 86 ··· 89 89 90 90 outb(0x20, EISA_INT2_CTRL); 91 91 outb(0x20, EISA_INT1_CTRL); 92 + 92 93 return IRQ_NONE; 93 94 } 94 95
+15 -17
arch/mips/sgi-ip22/ip22-int.c
··· 222 222 .end = end_local3_irq, 223 223 }; 224 224 225 - static void indy_local0_irqdispatch(struct pt_regs *regs) 225 + static void indy_local0_irqdispatch(void) 226 226 { 227 227 u8 mask = sgint->istat0 & sgint->imask0; 228 228 u8 mask2; ··· 236 236 237 237 /* if irq == 0, then the interrupt has already been cleared */ 238 238 if (irq) 239 - do_IRQ(irq, regs); 240 - return; 239 + do_IRQ(irq); 241 240 } 242 241 243 - static void indy_local1_irqdispatch(struct pt_regs *regs) 242 + static void indy_local1_irqdispatch(void) 244 243 { 245 244 u8 mask = sgint->istat1 & sgint->imask1; 246 245 u8 mask2; ··· 253 254 254 255 /* if irq == 0, then the interrupt has already been cleared */ 255 256 if (irq) 256 - do_IRQ(irq, regs); 257 - return; 257 + do_IRQ(irq); 258 258 } 259 259 260 - extern void ip22_be_interrupt(int irq, struct pt_regs *regs); 260 + extern void ip22_be_interrupt(int irq); 261 261 262 - static void indy_buserror_irq(struct pt_regs *regs) 262 + static void indy_buserror_irq(void) 263 263 { 264 264 int irq = SGI_BUSERR_IRQ; 265 265 266 266 irq_enter(); 267 267 kstat_this_cpu.irqs[irq]++; 268 - ip22_be_interrupt(irq, regs); 268 + ip22_be_interrupt(irq); 269 269 irq_exit(); 270 270 } 271 271 ··· 303 305 #define SGI_INTERRUPTS SGINT_LOCAL3 304 306 #endif 305 307 306 - extern void indy_r4k_timer_interrupt(struct pt_regs *regs); 307 - extern void indy_8254timer_irq(struct pt_regs *regs); 308 + extern void indy_r4k_timer_interrupt(void); 309 + extern void indy_8254timer_irq(void); 308 310 309 311 /* 310 312 * IRQs on the INDY look basically (barring software IRQs which we don't use ··· 334 336 * another exception, big deal. 335 337 */ 336 338 337 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 339 + asmlinkage void plat_irq_dispatch(void) 338 340 { 339 341 unsigned int pending = read_c0_cause(); 340 342 ··· 342 344 * First we check for r4k counter/timer IRQ. 343 345 */ 344 346 if (pending & CAUSEF_IP7) 345 - indy_r4k_timer_interrupt(regs); 347 + indy_r4k_timer_interrupt(); 346 348 else if (pending & CAUSEF_IP2) 347 - indy_local0_irqdispatch(regs); 349 + indy_local0_irqdispatch(); 348 350 else if (pending & CAUSEF_IP3) 349 - indy_local1_irqdispatch(regs); 351 + indy_local1_irqdispatch(); 350 352 else if (pending & CAUSEF_IP6) 351 - indy_buserror_irq(regs); 353 + indy_buserror_irq(); 352 354 else if (pending & (CAUSEF_IP4 | CAUSEF_IP5)) 353 - indy_8254timer_irq(regs); 355 + indy_8254timer_irq(); 354 356 } 355 357 356 358 extern void mips_cpu_irq_init(unsigned int irq_base);
+2 -4
arch/mips/sgi-ip22/ip22-time.c
··· 175 175 } 176 176 177 177 /* Generic SGI handler for (spurious) 8254 interrupts */ 178 - void indy_8254timer_irq(struct pt_regs *regs) 178 + void indy_8254timer_irq(void) 179 179 { 180 180 int irq = SGI_8254_0_IRQ; 181 181 ULONG cnt; ··· 189 189 irq_exit(); 190 190 } 191 191 192 - void indy_r4k_timer_interrupt(struct pt_regs *regs) 192 + void indy_r4k_timer_interrupt(void) 193 193 { 194 - struct pt_regs *old_regs = set_irq_regs(regs); 195 194 int irq = SGI_TIMER_IRQ; 196 195 197 196 irq_enter(); 198 197 kstat_this_cpu.irqs[irq]++; 199 198 timer_interrupt(irq, NULL); 200 199 irq_exit(); 201 - set_irq_regs(old_regs); 202 200 } 203 201 204 202 void __init plat_timer_setup(struct irqaction *irq)
+13 -13
arch/mips/sgi-ip27/ip27-irq.c
··· 129 129 * Kanoj 05.13.00 130 130 */ 131 131 132 - static void ip27_do_irq_mask0(struct pt_regs *regs) 132 + static void ip27_do_irq_mask0(void) 133 133 { 134 134 int irq, swlevel; 135 135 hubreg_t pend0, mask0; ··· 164 164 struct slice_data *si = cpu_data[cpu].data; 165 165 166 166 irq = si->level_to_irq[swlevel]; 167 - do_IRQ(irq, regs); 167 + do_IRQ(irq); 168 168 } 169 169 170 170 LOCAL_HUB_L(PI_INT_PEND0); 171 171 } 172 172 173 - static void ip27_do_irq_mask1(struct pt_regs *regs) 173 + static void ip27_do_irq_mask1(void) 174 174 { 175 175 int irq, swlevel; 176 176 hubreg_t pend1, mask1; ··· 190 190 /* "map" swlevel to irq */ 191 191 irq = si->level_to_irq[swlevel]; 192 192 LOCAL_HUB_CLR_INTR(swlevel); 193 - do_IRQ(irq, regs); 193 + do_IRQ(irq); 194 194 195 195 LOCAL_HUB_L(PI_INT_PEND1); 196 196 } 197 197 198 - static void ip27_prof_timer(struct pt_regs *regs) 198 + static void ip27_prof_timer(void) 199 199 { 200 200 panic("CPU %d got a profiling interrupt", smp_processor_id()); 201 201 } 202 202 203 - static void ip27_hub_error(struct pt_regs *regs) 203 + static void ip27_hub_error(void) 204 204 { 205 205 panic("CPU %d got a hub error interrupt", smp_processor_id()); 206 206 } ··· 418 418 return irq; 419 419 } 420 420 421 - extern void ip27_rt_timer_interrupt(struct pt_regs *regs); 421 + extern void ip27_rt_timer_interrupt(void); 422 422 423 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 423 + asmlinkage void plat_irq_dispatch(void) 424 424 { 425 425 unsigned long pending = read_c0_cause() & read_c0_status(); 426 426 427 427 if (pending & CAUSEF_IP4) 428 - ip27_rt_timer_interrupt(regs); 428 + ip27_rt_timer_interrupt(); 429 429 else if (pending & CAUSEF_IP2) /* PI_INT_PEND_0 or CC_PEND_{A|B} */ 430 - ip27_do_irq_mask0(regs); 430 + ip27_do_irq_mask0(); 431 431 else if (pending & CAUSEF_IP3) /* PI_INT_PEND_1 */ 432 - ip27_do_irq_mask1(regs); 432 + ip27_do_irq_mask1(); 433 433 else if (pending & CAUSEF_IP5) 434 - ip27_prof_timer(regs); 434 + ip27_prof_timer(); 435 435 else if (pending & CAUSEF_IP6) 436 - ip27_hub_error(regs); 436 + ip27_hub_error(); 437 437 } 438 438 439 439 void __init arch_init_irq(void)
+2 -2
arch/mips/sgi-ip27/ip27-timer.c
··· 89 89 90 90 static unsigned int rt_timer_irq; 91 91 92 - void ip27_rt_timer_interrupt(struct pt_regs *regs) 92 + void ip27_rt_timer_interrupt(void) 93 93 { 94 94 int cpu = smp_processor_id(); 95 95 int cpuA = cputoslice(cpu) == 0; ··· 111 111 if (cpu == 0) 112 112 do_timer(1); 113 113 114 - update_process_times(user_mode(regs)); 114 + update_process_times(user_mode(get_irq_regs())); 115 115 116 116 /* 117 117 * If we have an externally synchronized Linux clock, then update
+2 -4
arch/mips/sgi-ip32/crime.c
··· 40 40 id, rev, field, (unsigned long) CRIME_BASE); 41 41 } 42 42 43 - irqreturn_t 44 - crime_memerr_intr (unsigned int irq, void *dev_id, struct pt_regs *regs) 43 + irqreturn_t crime_memerr_intr(unsigned int irq, void *dev_id) 45 44 { 46 45 unsigned long stat, addr; 47 46 int fatal = 0; ··· 91 92 return IRQ_HANDLED; 92 93 } 93 94 94 - irqreturn_t 95 - crime_cpuerr_intr (unsigned int irq, void *dev_id, struct pt_regs *regs) 95 + irqreturn_t crime_cpuerr_intr(unsigned int irq, void *dev_id) 96 96 { 97 97 unsigned long stat = crime->cpu_error_stat & CRIME_CPU_ERROR_MASK; 98 98 unsigned long addr = crime->cpu_error_addr & CRIME_CPU_ERROR_ADDR_MASK;
+23 -25
arch/mips/sgi-ip32/ip32-irq.c
··· 120 120 static DEFINE_SPINLOCK(ip32_irq_lock); 121 121 122 122 /* Some initial interrupts to set up */ 123 - extern irqreturn_t crime_memerr_intr (int irq, void *dev_id, 124 - struct pt_regs *regs); 125 - extern irqreturn_t crime_cpuerr_intr (int irq, void *dev_id, 126 - struct pt_regs *regs); 123 + extern irqreturn_t crime_memerr_intr(int irq, void *dev_id); 124 + extern irqreturn_t crime_cpuerr_intr(int irq, void *dev_id); 127 125 128 126 struct irqaction memerr_irq = { crime_memerr_intr, IRQF_DISABLED, 129 127 CPU_MASK_NONE, "CRIME memory error", NULL, NULL }; ··· 477 479 .end = end_mace_irq, 478 480 }; 479 481 480 - static void ip32_unknown_interrupt(struct pt_regs *regs) 482 + static void ip32_unknown_interrupt(void) 481 483 { 482 484 printk ("Unknown interrupt occurred!\n"); 483 485 printk ("cp0_status: %08x\n", read_c0_status()); ··· 490 492 printk ("MACE PCI control register: %08x\n", mace->pci.control); 491 493 492 494 printk("Register dump:\n"); 493 - show_regs(regs); 495 + show_regs(get_irq_regs()); 494 496 495 497 printk("Please mail this report to linux-mips@linux-mips.org\n"); 496 498 printk("Spinning..."); ··· 499 501 500 502 /* CRIME 1.1 appears to deliver all interrupts to this one pin. */ 501 503 /* change this to loop over all edge-triggered irqs, exception masked out ones */ 502 - static void ip32_irq0(struct pt_regs *regs) 504 + static void ip32_irq0(void) 503 505 { 504 506 uint64_t crime_int; 505 507 int irq = 0; ··· 514 516 } 515 517 irq++; 516 518 DBG("*irq %u*\n", irq); 517 - do_IRQ(irq, regs); 519 + do_IRQ(irq); 518 520 } 519 521 520 - static void ip32_irq1(struct pt_regs *regs) 522 + static void ip32_irq1(void) 521 523 { 522 - ip32_unknown_interrupt(regs); 524 + ip32_unknown_interrupt(); 523 525 } 524 526 525 - static void ip32_irq2(struct pt_regs *regs) 527 + static void ip32_irq2(void) 526 528 { 527 - ip32_unknown_interrupt(regs); 529 + ip32_unknown_interrupt(); 528 530 } 529 531 530 - static void ip32_irq3(struct pt_regs *regs) 532 + static void ip32_irq3(void) 531 533 { 532 - ip32_unknown_interrupt(regs); 534 + ip32_unknown_interrupt(); 533 535 } 534 536 535 - static void ip32_irq4(struct pt_regs *regs) 537 + static void ip32_irq4(void) 536 538 { 537 - ip32_unknown_interrupt(regs); 539 + ip32_unknown_interrupt(); 538 540 } 539 541 540 - static void ip32_irq5(struct pt_regs *regs) 542 + static void ip32_irq5(void) 541 543 { 542 - ll_timer_interrupt(IP32_R4K_TIMER_IRQ, regs); 544 + ll_timer_interrupt(IP32_R4K_TIMER_IRQ); 543 545 } 544 546 545 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 547 + asmlinkage void plat_irq_dispatch(void) 546 548 { 547 549 unsigned int pending = read_c0_cause(); 548 550 549 551 if (likely(pending & IE_IRQ0)) 550 - ip32_irq0(regs); 552 + ip32_irq0(); 551 553 else if (unlikely(pending & IE_IRQ1)) 552 - ip32_irq1(regs); 554 + ip32_irq1(); 553 555 else if (unlikely(pending & IE_IRQ2)) 554 - ip32_irq2(regs); 556 + ip32_irq2(); 555 557 else if (unlikely(pending & IE_IRQ3)) 556 - ip32_irq3(regs); 558 + ip32_irq3(); 557 559 else if (unlikely(pending & IE_IRQ4)) 558 - ip32_irq4(regs); 560 + ip32_irq4(); 559 561 else if (likely(pending & IE_IRQ5)) 560 - ip32_irq5(regs); 562 + ip32_irq5(); 561 563 } 562 564 563 565 void __init arch_init_irq(void)
+13 -14
arch/mips/sibyte/bcm1480/irq.c
··· 25 25 #include <linux/kernel_stat.h> 26 26 27 27 #include <asm/errno.h> 28 + #include <asm/irq_regs.h> 28 29 #include <asm/signal.h> 29 30 #include <asm/system.h> 30 31 #include <asm/ptrace.h> ··· 285 284 } 286 285 287 286 288 - static irqreturn_t bcm1480_dummy_handler(int irq, void *dev_id, 289 - struct pt_regs *regs) 287 + static irqreturn_t bcm1480_dummy_handler(int irq, void *dev_id) 290 288 { 291 289 return IRQ_NONE; 292 290 } ··· 453 453 #define duart_out(reg, val) csr_out32(val, IOADDR(A_DUART_CHANREG(kgdb_port,reg))) 454 454 #define duart_in(reg) csr_in32(IOADDR(A_DUART_CHANREG(kgdb_port,reg))) 455 455 456 - void bcm1480_kgdb_interrupt(struct pt_regs *regs) 456 + static void bcm1480_kgdb_interrupt(void) 457 457 { 458 458 /* 459 459 * Clear break-change status (allow some time for the remote ··· 464 464 mdelay(500); 465 465 duart_out(R_DUART_CMD, V_DUART_MISC_CMD_RESET_BREAK_INT | 466 466 M_DUART_RX_EN | M_DUART_TX_EN); 467 - set_async_breakpoint(&regs->cp0_epc); 467 + set_async_breakpoint(&get_irq_regs()->cp0_epc); 468 468 } 469 469 470 470 #endif /* CONFIG_KGDB */ 471 471 472 - extern void bcm1480_timer_interrupt(struct pt_regs *regs); 473 - extern void bcm1480_mailbox_interrupt(struct pt_regs *regs); 474 - extern void bcm1480_kgdb_interrupt(struct pt_regs *regs); 472 + extern void bcm1480_timer_interrupt(void); 473 + extern void bcm1480_mailbox_interrupt(void); 475 474 476 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 475 + asmlinkage void plat_irq_dispatch(void) 477 476 { 478 477 unsigned int pending; 479 478 ··· 485 486 486 487 #ifdef CONFIG_SIBYTE_BCM1480_PROF 487 488 if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */ 488 - sbprof_cpu_intr(exception_epc(regs)); 489 + sbprof_cpu_intr(); 489 490 else 490 491 #endif 491 492 492 493 if (pending & CAUSEF_IP4) 493 - bcm1480_timer_interrupt(regs); 494 + bcm1480_timer_interrupt(); 494 495 495 496 #ifdef CONFIG_SMP 496 497 else if (pending & CAUSEF_IP3) 497 - bcm1480_mailbox_interrupt(regs); 498 + bcm1480_mailbox_interrupt(); 498 499 #endif 499 500 500 501 #ifdef CONFIG_KGDB 501 502 else if (pending & CAUSEF_IP6) 502 - bcm1480_kgdb_interrupt(regs); /* KGDB (uart 1) */ 503 + bcm1480_kgdb_interrupt(); /* KGDB (uart 1) */ 503 504 #endif 504 505 505 506 else if (pending & CAUSEF_IP2) { ··· 520 521 521 522 if (mask_h) { 522 523 if (mask_h ^ 1) 523 - do_IRQ(fls64(mask_h) - 1, regs); 524 + do_IRQ(fls64(mask_h) - 1); 524 525 else 525 - do_IRQ(63 + fls64(mask_l), regs); 526 + do_IRQ(63 + fls64(mask_l)); 526 527 } 527 528 } 528 529 }
+1 -1
arch/mips/sibyte/bcm1480/smp.c
··· 88 88 __raw_writeq((((u64)action)<< 48), mailbox_0_set_regs[cpu]); 89 89 } 90 90 91 - void bcm1480_mailbox_interrupt(struct pt_regs *regs) 91 + void bcm1480_mailbox_interrupt(void) 92 92 { 93 93 int cpu = smp_processor_id(); 94 94 unsigned int action;
+4 -4
arch/mips/sibyte/bcm1480/time.c
··· 100 100 101 101 #include <asm/sibyte/sb1250.h> 102 102 103 - void bcm1480_timer_interrupt(struct pt_regs *regs) 103 + void bcm1480_timer_interrupt(void) 104 104 { 105 105 int cpu = smp_processor_id(); 106 - int irq = K_BCM1480_INT_TIMER_0+cpu; 106 + int irq = K_BCM1480_INT_TIMER_0 + cpu; 107 107 108 108 /* Reset the timer */ 109 109 __raw_writeq(M_SCD_TIMER_ENABLE|M_SCD_TIMER_MODE_CONTINUOUS, ··· 113 113 /* 114 114 * CPU 0 handles the global timer interrupt job 115 115 */ 116 - ll_timer_interrupt(irq, regs); 116 + ll_timer_interrupt(irq); 117 117 } 118 118 else { 119 119 /* 120 120 * other CPUs should just do profiling and process accounting 121 121 */ 122 - ll_local_timer_interrupt(irq, regs); 122 + ll_local_timer_interrupt(irq); 123 123 } 124 124 } 125 125
+13 -15
arch/mips/sibyte/sb1250/irq.c
··· 254 254 } 255 255 256 256 257 - static irqreturn_t sb1250_dummy_handler(int irq, void *dev_id, 258 - struct pt_regs *regs) 257 + static irqreturn_t sb1250_dummy_handler(int irq, void *dev_id) 259 258 { 260 259 return IRQ_NONE; 261 260 } ··· 402 403 #define duart_out(reg, val) csr_out32(val, IOADDR(A_DUART_CHANREG(kgdb_port,reg))) 403 404 #define duart_in(reg) csr_in32(IOADDR(A_DUART_CHANREG(kgdb_port,reg))) 404 405 405 - static void sb1250_kgdb_interrupt(struct pt_regs *regs) 406 + static void sb1250_kgdb_interrupt(void) 406 407 { 407 408 /* 408 409 * Clear break-change status (allow some time for the remote ··· 413 414 mdelay(500); 414 415 duart_out(R_DUART_CMD, V_DUART_MISC_CMD_RESET_BREAK_INT | 415 416 M_DUART_RX_EN | M_DUART_TX_EN); 416 - set_async_breakpoint(&regs->cp0_epc); 417 + set_async_breakpoint(&get_irq_regs()->cp0_epc); 417 418 } 418 419 419 420 #endif /* CONFIG_KGDB */ 420 421 421 - extern void sb1250_timer_interrupt(struct pt_regs *regs); 422 - extern void sb1250_mailbox_interrupt(struct pt_regs *regs); 423 - extern void sb1250_kgdb_interrupt(struct pt_regs *regs); 422 + extern void sb1250_timer_interrupt(void); 423 + extern void sb1250_mailbox_interrupt(void); 424 424 425 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 425 + asmlinkage void plat_irq_dispatch(void) 426 426 { 427 427 unsigned int pending; 428 428 ··· 444 446 445 447 #ifdef CONFIG_SIBYTE_SB1250_PROF 446 448 if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */ 447 - sbprof_cpu_intr(exception_epc(regs)); 449 + sbprof_cpu_intr(); 448 450 else 449 451 #endif 450 452 451 453 if (pending & CAUSEF_IP4) 452 - sb1250_timer_interrupt(regs); 454 + sb1250_timer_interrupt(); 453 455 454 456 #ifdef CONFIG_SMP 455 457 else if (pending & CAUSEF_IP3) 456 - sb1250_mailbox_interrupt(regs); 458 + sb1250_mailbox_interrupt(); 457 459 #endif 458 460 459 461 #ifdef CONFIG_KGDB 460 462 else if (pending & CAUSEF_IP6) /* KGDB (uart 1) */ 461 - sb1250_kgdb_interrupt(regs); 463 + sb1250_kgdb_interrupt(); 462 464 #endif 463 465 464 466 else if (pending & CAUSEF_IP2) { ··· 473 475 mask = __raw_readq(IOADDR(A_IMR_REGISTER(smp_processor_id(), 474 476 R_IMR_INTERRUPT_STATUS_BASE))); 475 477 if (mask) 476 - do_IRQ(fls64(mask) - 1, regs); 478 + do_IRQ(fls64(mask) - 1); 477 479 else 478 - spurious_interrupt(regs); 480 + spurious_interrupt(); 479 481 } else 480 - spurious_interrupt(regs); 482 + spurious_interrupt(); 481 483 }
+1 -1
arch/mips/sibyte/sb1250/smp.c
··· 76 76 __raw_writeq((((u64)action) << 48), mailbox_set_regs[cpu]); 77 77 } 78 78 79 - void sb1250_mailbox_interrupt(struct pt_regs *regs) 79 + void sb1250_mailbox_interrupt(void) 80 80 { 81 81 int cpu = smp_processor_id(); 82 82 unsigned int action;
+3 -3
arch/mips/sibyte/sb1250/time.c
··· 125 125 */ 126 126 } 127 127 128 - void sb1250_timer_interrupt(struct pt_regs *regs) 128 + void sb1250_timer_interrupt(void) 129 129 { 130 130 int cpu = smp_processor_id(); 131 131 int irq = K_INT_TIMER_0 + cpu; ··· 138 138 /* 139 139 * CPU 0 handles the global timer interrupt job 140 140 */ 141 - ll_timer_interrupt(irq, regs); 141 + ll_timer_interrupt(irq); 142 142 } 143 143 else { 144 144 /* 145 145 * other CPUs should just do profiling and process accounting 146 146 */ 147 - ll_local_timer_interrupt(irq, regs); 147 + ll_local_timer_interrupt(irq); 148 148 } 149 149 } 150 150
+17 -17
arch/mips/sni/irq.c
··· 69 69 * hwint0 should deal with MP agent, ASIC PCI, EISA NMI and debug 70 70 * button interrupts. Later ... 71 71 */ 72 - static void pciasic_hwint0(struct pt_regs *regs) 72 + static void pciasic_hwint0(void) 73 73 { 74 74 panic("Received int0 but no handler yet ..."); 75 75 } 76 76 77 77 /* This interrupt was used for the com1 console on the first prototypes. */ 78 - static void pciasic_hwint2(struct pt_regs *regs) 78 + static void pciasic_hwint2(void) 79 79 { 80 80 /* I think this shouldn't happen on production machines. */ 81 81 panic("hwint2 and no handler yet"); 82 82 } 83 83 84 84 /* hwint5 is the r4k count / compare interrupt */ 85 - static void pciasic_hwint5(struct pt_regs *regs) 85 + static void pciasic_hwint5(void) 86 86 { 87 87 panic("hwint5 and no handler yet"); 88 88 } ··· 103 103 * 104 104 * The EISA_INT bit in CSITPEND is high active, all others are low active. 105 105 */ 106 - static void pciasic_hwint1(struct pt_regs *regs) 106 + static void pciasic_hwint1(void) 107 107 { 108 108 u8 pend = *(volatile char *)PCIMT_CSITPEND; 109 109 unsigned long flags; ··· 119 119 if (unlikely(irq < 0)) 120 120 return; 121 121 122 - do_IRQ(irq, regs); 122 + do_IRQ(irq); 123 123 } 124 124 125 125 if (!(pend & IT_SCSI)) { 126 126 flags = read_c0_status(); 127 127 clear_c0_status(ST0_IM); 128 - do_IRQ(PCIMT_IRQ_SCSI, regs); 128 + do_IRQ(PCIMT_IRQ_SCSI); 129 129 write_c0_status(flags); 130 130 } 131 131 } ··· 133 133 /* 134 134 * hwint 3 should deal with the PCI A - D interrupts, 135 135 */ 136 - static void pciasic_hwint3(struct pt_regs *regs) 136 + static void pciasic_hwint3(void) 137 137 { 138 138 u8 pend = *(volatile char *)PCIMT_CSITPEND; 139 139 int irq; ··· 141 141 pend &= (IT_INTA | IT_INTB | IT_INTC | IT_INTD); 142 142 clear_c0_status(IE_IRQ3); 143 143 irq = PCIMT_IRQ_INT2 + ls1bit8(pend); 144 - do_IRQ(irq, regs); 144 + do_IRQ(irq); 145 145 set_c0_status(IE_IRQ3); 146 146 } 147 147 148 148 /* 149 149 * hwint 4 is used for only the onboard PCnet 32. 150 150 */ 151 - static void pciasic_hwint4(struct pt_regs *regs) 151 + static void pciasic_hwint4(void) 152 152 { 153 153 clear_c0_status(IE_IRQ4); 154 - do_IRQ(PCIMT_IRQ_ETHERNET, regs); 154 + do_IRQ(PCIMT_IRQ_ETHERNET); 155 155 set_c0_status(IE_IRQ4); 156 156 } 157 157 158 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 158 + asmlinkage void plat_irq_dispatch(void) 159 159 { 160 160 unsigned int pending = read_c0_status() & read_c0_cause(); 161 161 static unsigned char led_cache; ··· 163 163 *(volatile unsigned char *) PCIMT_CSLED = ++led_cache; 164 164 165 165 if (pending & 0x0800) 166 - pciasic_hwint1(regs); 166 + pciasic_hwint1(); 167 167 else if (pending & 0x4000) 168 - pciasic_hwint4(regs); 168 + pciasic_hwint4(); 169 169 else if (pending & 0x2000) 170 - pciasic_hwint3(regs); 170 + pciasic_hwint3(); 171 171 else if (pending & 0x1000) 172 - pciasic_hwint2(regs); 172 + pciasic_hwint2(); 173 173 else if (pending & 0x8000) 174 - pciasic_hwint5(regs); 174 + pciasic_hwint5(); 175 175 else if (pending & 0x0400) 176 - pciasic_hwint0(regs); 176 + pciasic_hwint0(); 177 177 } 178 178 179 179 void __init init_pciasic(void)
+7 -7
arch/mips/tx4927/common/tx4927_irq.c
··· 576 576 return (sw_irq); 577 577 } 578 578 579 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 579 + asmlinkage void plat_irq_dispatch(void) 580 580 { 581 581 unsigned int pending = read_c0_status() & read_c0_cause(); 582 582 583 583 if (pending & STATUSF_IP7) /* cpu timer */ 584 - do_IRQ(TX4927_IRQ_CPU_TIMER, regs); 584 + do_IRQ(TX4927_IRQ_CPU_TIMER); 585 585 else if (pending & STATUSF_IP2) { /* tx4927 pic */ 586 586 unsigned int irq = tx4927_irq_nested(); 587 587 588 588 if (unlikely(irq == 0)) { 589 - spurious_interrupt(regs); 589 + spurious_interrupt(); 590 590 return; 591 591 } 592 - do_IRQ(irq, regs); 592 + do_IRQ(irq); 593 593 } else if (pending & STATUSF_IP0) /* user line 0 */ 594 - do_IRQ(TX4927_IRQ_USER0, regs); 594 + do_IRQ(TX4927_IRQ_USER0); 595 595 else if (pending & STATUSF_IP1) /* user line 1 */ 596 - do_IRQ(TX4927_IRQ_USER1, regs); 596 + do_IRQ(TX4927_IRQ_USER1); 597 597 else 598 - spurious_interrupt(regs); 598 + spurious_interrupt(); 599 599 }
+3 -3
arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c
··· 58 58 #include <asm/page.h> 59 59 #include <asm/io.h> 60 60 #include <asm/irq.h> 61 + #include <asm/irq_regs.h> 61 62 #include <asm/processor.h> 62 63 #include <asm/ptrace.h> 63 64 #include <asm/reboot.h> ··· 161 160 char *toshiba_name = ""; 162 161 163 162 #ifdef CONFIG_PCI 164 - static void tx4927_pcierr_interrupt(int irq, void *dev_id, 165 - struct pt_regs *regs) 163 + static void tx4927_pcierr_interrupt(int irq, void *dev_id) 166 164 { 167 165 #ifdef CONFIG_BLK_DEV_IDEPCI 168 166 /* ignore MasterAbort for ide probing... */ ··· 185 185 (unsigned long) tx4927_ccfgptr->ccfg, 186 186 (unsigned long) (tx4927_ccfgptr->tear >> 32), 187 187 (unsigned long) tx4927_ccfgptr->tear); 188 - show_regs(regs); 188 + show_regs(get_irq_regs()); 189 189 } 190 190 191 191 void __init toshiba_rbtx4927_pci_irq_init(void)
+11 -35
arch/mips/tx4938/common/irq.c
··· 104 104 irq_desc[i].depth = 1; 105 105 irq_desc[i].chip = &tx4938_irq_cp0_type; 106 106 } 107 - 108 - return; 109 107 } 110 108 111 109 static unsigned int ··· 111 113 { 112 114 tx4938_irq_cp0_enable(irq); 113 115 114 - return (0); 116 + return 0; 115 117 } 116 118 117 119 static void ··· 142 144 clear_c0_status(tx4938_irq_cp0_mask(irq)); 143 145 144 146 spin_unlock_irqrestore(&tx4938_cp0_lock, flags); 145 - 146 - return; 147 147 } 148 148 149 149 static void 150 150 tx4938_irq_cp0_mask_and_ack(unsigned int irq) 151 151 { 152 152 tx4938_irq_cp0_disable(irq); 153 - 154 - return; 155 153 } 156 154 157 155 static void ··· 156 162 if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) { 157 163 tx4938_irq_cp0_enable(irq); 158 164 } 159 - 160 - return; 161 165 } 162 166 163 167 /**********************************************************************************/ ··· 219 227 } 220 228 } 221 229 222 - return (0); 230 + return 0; 223 231 } 224 232 225 233 u32 ··· 270 278 return (0x00000007); 271 279 } 272 280 } 273 - return (0x00000000); 281 + return 0x00000000; 274 282 } 275 283 276 284 static void ··· 284 292 TX4938_WR(pic_reg, val); 285 293 mmiowb(); 286 294 TX4938_RD(pic_reg); 287 - 288 - return; 289 295 } 290 296 291 297 static void __init ··· 307 317 TX4938_WR(0xff1ff600, TX4938_RD(0xff1ff600) | 0x1); /* irq enable */ 308 318 309 319 spin_unlock_irqrestore(&tx4938_pic_lock, flags); 310 - 311 - return; 312 320 } 313 321 314 322 static unsigned int ··· 314 326 { 315 327 tx4938_irq_pic_enable(irq); 316 328 317 - return (0); 329 + return 0; 318 330 } 319 331 320 332 static void 321 333 tx4938_irq_pic_shutdown(unsigned int irq) 322 334 { 323 335 tx4938_irq_pic_disable(irq); 324 - 325 - return; 326 336 } 327 337 328 338 static void ··· 334 348 tx4938_irq_pic_mask(irq)); 335 349 336 350 spin_unlock_irqrestore(&tx4938_pic_lock, flags); 337 - 338 - return; 339 351 } 340 352 341 353 static void ··· 347 363 tx4938_irq_pic_mask(irq), 0); 348 364 349 365 spin_unlock_irqrestore(&tx4938_pic_lock, flags); 350 - 351 - return; 352 366 } 353 367 354 368 static void 355 369 tx4938_irq_pic_mask_and_ack(unsigned int irq) 356 370 { 357 371 tx4938_irq_pic_disable(irq); 358 - 359 - return; 360 372 } 361 373 362 374 static void ··· 361 381 if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) { 362 382 tx4938_irq_pic_enable(irq); 363 383 } 364 - 365 - return; 366 384 } 367 385 368 386 /**********************************************************************************/ ··· 372 394 { 373 395 tx4938_irq_cp0_init(); 374 396 tx4938_irq_pic_init(); 375 - 376 - return; 377 397 } 378 398 379 399 int ··· 393 417 } 394 418 395 419 wbflush(); 396 - return (sw_irq); 420 + return sw_irq; 397 421 } 398 422 399 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 423 + asmlinkage void plat_irq_dispatch(void) 400 424 { 401 425 unsigned int pending = read_c0_cause() & read_c0_status(); 402 426 403 427 if (pending & STATUSF_IP7) 404 - do_IRQ(TX4938_IRQ_CPU_TIMER, regs); 428 + do_IRQ(TX4938_IRQ_CPU_TIMER); 405 429 else if (pending & STATUSF_IP2) { 406 430 int irq = tx4938_irq_nested(); 407 431 if (irq) 408 - do_IRQ(irq, regs); 432 + do_IRQ(irq); 409 433 else 410 - spurious_interrupt(regs); 434 + spurious_interrupt(); 411 435 } else if (pending & STATUSF_IP1) 412 - do_IRQ(TX4938_IRQ_USER1, regs); 436 + do_IRQ(TX4938_IRQ_USER1); 413 437 else if (pending & STATUSF_IP0) 414 - do_IRQ(TX4938_IRQ_USER0, regs); 438 + do_IRQ(TX4938_IRQ_USER0); 415 439 }
+2 -1
arch/mips/tx4938/toshiba_rbtx4938/spi_txx9.c
··· 35 35 } 36 36 37 37 static DECLARE_WAIT_QUEUE_HEAD(txx9_spi_wait); 38 - static void txx9_spi_interrupt(int irq, void *dev_id, struct pt_regs *regs) 38 + 39 + static void txx9_spi_interrupt(int irq, void *dev_id) 39 40 { 40 41 /* disable rx intr */ 41 42 tx4938_spiptr->cr0 &= ~TXx9_SPCR0_RBSIE;
+1 -1
arch/mips/vr41xx/common/icu.c
··· 635 635 636 636 EXPORT_SYMBOL(vr41xx_set_intassign); 637 637 638 - static int icu_get_irq(unsigned int irq, struct pt_regs *regs) 638 + static int icu_get_irq(unsigned int irq) 639 639 { 640 640 uint16_t pend1, pend2; 641 641 uint16_t mask1, mask2;
+16 -16
arch/mips/vr41xx/common/irq.c
··· 25 25 #include <asm/vr41xx/irq.h> 26 26 27 27 typedef struct irq_cascade { 28 - int (*get_irq)(unsigned int, struct pt_regs *); 28 + int (*get_irq)(unsigned int); 29 29 } irq_cascade_t; 30 30 31 31 static irq_cascade_t irq_cascade[NR_IRQS] __cacheline_aligned; ··· 36 36 .name = "cascade", 37 37 }; 38 38 39 - int cascade_irq(unsigned int irq, int (*get_irq)(unsigned int, struct pt_regs *)) 39 + int cascade_irq(unsigned int irq, int (*get_irq)(unsigned int)) 40 40 { 41 41 int retval = 0; 42 42 ··· 59 59 60 60 EXPORT_SYMBOL_GPL(cascade_irq); 61 61 62 - static void irq_dispatch(unsigned int irq, struct pt_regs *regs) 62 + static void irq_dispatch(unsigned int irq) 63 63 { 64 64 irq_cascade_t *cascade; 65 65 struct irq_desc *desc; ··· 74 74 unsigned int source_irq = irq; 75 75 desc = irq_desc + source_irq; 76 76 desc->chip->ack(source_irq); 77 - irq = cascade->get_irq(irq, regs); 77 + irq = cascade->get_irq(irq); 78 78 if (irq < 0) 79 79 atomic_inc(&irq_err_count); 80 80 else 81 - irq_dispatch(irq, regs); 81 + irq_dispatch(irq); 82 82 desc->chip->end(source_irq); 83 83 } else 84 - do_IRQ(irq, regs); 84 + do_IRQ(irq); 85 85 } 86 86 87 - asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 87 + asmlinkage void plat_irq_dispatch(void) 88 88 { 89 89 unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; 90 90 91 91 if (pending & CAUSEF_IP7) 92 - do_IRQ(7, regs); 92 + do_IRQ(7); 93 93 else if (pending & 0x7800) { 94 94 if (pending & CAUSEF_IP3) 95 - irq_dispatch(3, regs); 95 + irq_dispatch(3); 96 96 else if (pending & CAUSEF_IP4) 97 - irq_dispatch(4, regs); 97 + irq_dispatch(4); 98 98 else if (pending & CAUSEF_IP5) 99 - irq_dispatch(5, regs); 99 + irq_dispatch(5); 100 100 else if (pending & CAUSEF_IP6) 101 - irq_dispatch(6, regs); 101 + irq_dispatch(6); 102 102 } else if (pending & CAUSEF_IP2) 103 - irq_dispatch(2, regs); 103 + irq_dispatch(2); 104 104 else if (pending & CAUSEF_IP0) 105 - do_IRQ(0, regs); 105 + do_IRQ(0); 106 106 else if (pending & CAUSEF_IP1) 107 - do_IRQ(1, regs); 107 + do_IRQ(1); 108 108 else 109 - spurious_interrupt(regs); 109 + spurious_interrupt(); 110 110 } 111 111 112 112 void __init arch_init_irq(void)
+4 -4
include/asm-mips/irq.h
··· 26 26 27 27 struct pt_regs; 28 28 29 - extern asmlinkage unsigned int do_IRQ(unsigned int irq, struct pt_regs *regs); 29 + extern asmlinkage unsigned int do_IRQ(unsigned int irq); 30 30 31 31 #ifdef CONFIG_MIPS_MT_SMTC 32 32 /* ··· 55 55 * Ideally there should be away to get this into kernel/irq/handle.c to 56 56 * avoid the overhead of a call for just a tiny function ... 57 57 */ 58 - #define do_IRQ(irq, regs) \ 58 + #define do_IRQ(irq) \ 59 59 do { \ 60 60 irq_enter(); \ 61 61 __DO_IRQ_SMTC_HOOK(); \ 62 - __do_IRQ((irq), (regs)); \ 62 + __do_IRQ((irq)); \ 63 63 irq_exit(); \ 64 64 } while (0) 65 65 66 66 #endif 67 67 68 68 extern void arch_init_irq(void); 69 - extern void spurious_interrupt(struct pt_regs *regs); 69 + extern void spurious_interrupt(void); 70 70 71 71 #ifdef CONFIG_MIPS_MT_SMTC 72 72 struct irqaction;
+21 -1
include/asm-mips/irq_regs.h
··· 1 - #include <asm-generic/irq_regs.h> 1 + /* 2 + * This program is free software; you can redistribute it and/or 3 + * modify it under the terms of the GNU General Public License 4 + * as published by the Free Software Foundation; either version 5 + * 2 of the License, or (at your option) any later version. 6 + * 7 + * Copyright (C) 2006 Ralf Baechle (ralf@linux-mips.org) 8 + */ 9 + #ifndef __ASM_IRQ_REGS_H 10 + #define __ASM_IRQ_REGS_H 11 + 12 + #define ARCH_HAS_OWN_IRQ_REGS 13 + 14 + #include <linux/thread_info.h> 15 + 16 + static inline struct pt_regs *get_irq_regs(void) 17 + { 18 + return current_thread_info()->regs; 19 + } 20 + 21 + #endif /* __ASM_IRQ_REGS_H */
-4
include/asm-mips/jmr3927/irq.h
··· 45 45 toshibaboards_setup_irq(int irq, struct irqaction * new); 46 46 47 47 48 - #ifdef CONFIG_TX_BRANCH_LIKELY_BUG_WORKAROUND 49 - extern void tx_branch_likely_bug_fixup(struct pt_regs *regs); 50 - #endif 51 - 52 48 extern int (*toshibaboards_gen_iack)(void); 53 49 54 50 #endif /* !__ASSEMBLY__ */
+1 -2
include/asm-mips/mach-au1x00/au1000_dma.h
··· 123 123 extern struct dma_chan au1000_dma_table[]; 124 124 extern int request_au1000_dma(int dev_id, 125 125 const char *dev_str, 126 - irqreturn_t (*irqhandler)(int, void *, 127 - struct pt_regs *), 126 + irqreturn_t (*irqhandler)(int, void *), 128 127 unsigned long irqflags, 129 128 void *irq_dev_id); 130 129 extern void free_au1000_dma(unsigned int dmanr);
+1 -1
include/asm-mips/marvell.h
··· 53 53 unsigned long config_vreg; 54 54 }; 55 55 56 - extern void ll_mv64340_irq(struct pt_regs *regs); 56 + extern void ll_mv64340_irq(void); 57 57 58 58 #endif /* __ASM_MIPS_MARVELL_H */
+1 -1
include/asm-mips/msc01_ic.h
··· 145 145 #define MSC01_IRQ_EDGE 1 146 146 147 147 extern void __init init_msc_irqs(unsigned int base, msc_irqmap_t *imp, int nirq); 148 - extern void ll_msc_irq(struct pt_regs *regs); 148 + extern void ll_msc_irq(void); 149 149 150 150 #endif /* __ASM_MIPS_BOARDS_MSC01_IC_H */ 151 151
+1
include/asm-mips/thread_info.h
··· 34 34 0-0xFFFFFFFF for kernel-thread 35 35 */ 36 36 struct restart_block restart_block; 37 + struct pt_regs *regs; 37 38 }; 38 39 39 40 /*
+2 -2
include/asm-mips/time.h
··· 72 72 /* 73 73 * the corresponding low-level timer interrupt routine. 74 74 */ 75 - extern asmlinkage void ll_timer_interrupt(int irq, struct pt_regs *regs); 75 + extern asmlinkage void ll_timer_interrupt(int irq); 76 76 77 77 /* 78 78 * profiling and process accouting is done separately in local_timer_interrupt 79 79 */ 80 80 extern void local_timer_interrupt(int irq, void *dev_id); 81 - extern asmlinkage void ll_local_timer_interrupt(int irq, struct pt_regs *regs); 81 + extern asmlinkage void ll_local_timer_interrupt(int irq); 82 82 83 83 /* 84 84 * board specific routines required by time_init().