···108108 return int_status;109109}110110111111-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)111111+asmlinkage void plat_irq_dispatch(void)112112{113113 unsigned long int_status;114114 unsigned int cause = read_c0_cause();115115 int irq;116116117117 if (cause & CAUSEF_IP7) { /* R4000 count / compare IRQ */118118- ll_timer_interrupt(7, regs);118118+ ll_timer_interrupt(7);119119 return;120120 }121121···125125 if (int_status) {126126 irq = ls1bit32(int_status);127127128128- do_IRQ(irq, regs);128128+ do_IRQ(irq);129129 }130130}131131
+6-6
arch/mips/mips-boards/atlas/atlas_int.c
···101101 return b;102102}103103104104-static inline void atlas_hw0_irqdispatch(struct pt_regs *regs)104104+static inline void atlas_hw0_irqdispatch(void)105105{106106 unsigned long int_status;107107 int irq;···116116117117 DEBUG_INT("atlas_hw0_irqdispatch: irq=%d\n", irq);118118119119- do_IRQ(irq, regs);119119+ do_IRQ(irq);120120}121121122122static inline int clz(unsigned long x)···188188 * then we just return, if multiple IRQs are pending then we will just take189189 * another exception, big deal.190190 */191191-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)191191+asmlinkage void plat_irq_dispatch(void)192192{193193 unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM;194194 int irq;···196196 irq = irq_ffs(pending);197197198198 if (irq == MIPSCPU_INT_ATLAS)199199- atlas_hw0_irqdispatch(regs);199199+ atlas_hw0_irqdispatch();200200 else if (irq >= 0)201201- do_IRQ(MIPSCPU_INT_BASE + irq, regs);201201+ do_IRQ(MIPSCPU_INT_BASE + irq);202202 else203203- spurious_interrupt(regs);203203+ spurious_interrupt();204204}205205206206static inline void init_atlas_irqs (int base)
+11-11
arch/mips/mips-boards/generic/time.c
···8282 }8383}84848585-static void mips_timer_dispatch (struct pt_regs *regs)8585+static void mips_timer_dispatch(void)8686{8787- do_IRQ (mips_cpu_timer_irq, regs);8787+ do_IRQ(mips_cpu_timer_irq);8888}89899090/*9191 * Redeclare until I get around mopping the timer code insanity on MIPS.9292 */9393-extern int null_perf_irq(struct pt_regs *regs);9393+extern int null_perf_irq(void);94949595-extern int (*perf_irq)(struct pt_regs *regs);9595+extern int (*perf_irq)(void);96969797-irqreturn_t mips_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)9797+irqreturn_t mips_timer_interrupt(int irq, void *dev_id)9898{9999 int cpu = smp_processor_id();100100···119119 * perf counter overflow, or both.120120 */121121 if (read_c0_cause() & (1 << 26))122122- perf_irq(regs);122122+ perf_irq();123123124124 if (read_c0_cause() & (1 << 30)) {125125 /* If timer interrupt, make it de-assert */···139139 * the tick on VPE 0 to run the full timer_interrupt().140140 */141141 if (cpu_data[cpu].vpe_id == 0) {142142- timer_interrupt(irq, NULL, regs);142142+ timer_interrupt(irq, NULL);143143 smtc_timer_broadcast(cpu_data[cpu].vpe_id);144144 scroll_display_message();145145 } else {146146 write_c0_compare(read_c0_count() +147147 (mips_hpt_frequency/HZ));148148- local_timer_interrupt(irq, dev_id, regs);148148+ local_timer_interrupt(irq, dev_id);149149 smtc_timer_broadcast(cpu_data[cpu].vpe_id);150150 }151151 }···159159 * timer int.160160 */161161 if (!r2 || (read_c0_cause() & (1 << 26)))162162- if (perf_irq(regs))162162+ if (perf_irq())163163 goto out;164164165165 /* we keep interrupt disabled all the time */166166 if (!r2 || (read_c0_cause() & (1 << 30)))167167- timer_interrupt(irq, NULL, regs);167167+ timer_interrupt(irq, NULL);168168169169 scroll_display_message();170170 } else {···180180 /*181181 * Other CPUs should do profiling and process accounting182182 */183183- local_timer_interrupt(irq, dev_id, regs);183183+ local_timer_interrupt(irq, dev_id);184184 }185185out:186186#endif /* CONFIG_MIPS_MT_SMTC */
+15-11
arch/mips/mips-boards/malta/malta_int.c
···114114 return irq;115115}116116117117-static void malta_hw0_irqdispatch(struct pt_regs *regs)117117+static void malta_hw0_irqdispatch(void)118118{119119 int irq;120120···123123 return; /* interrupt has already been cleared */124124 }125125126126- do_IRQ(MALTA_INT_BASE+irq, regs);126126+ do_IRQ(MALTA_INT_BASE + irq);127127}128128129129-void corehi_irqdispatch(struct pt_regs *regs)129129+static void corehi_irqdispatch(void)130130{131131+ unsigned int intedge, intsteer, pcicmd, pcibadaddr;132132+ unsigned int pcimstat, intisr, inten, intpol;131133 unsigned int intrcause,datalo,datahi;132132- unsigned int pcimstat, intisr, inten, intpol, intedge, intsteer, pcicmd, pcibadaddr;134134+ struct pt_regs *regs;133135134136 printk("CoreHI interrupt, shouldn't happen, so we die here!!!\n");135135- printk("epc : %08lx\nStatus: %08lx\nCause : %08lx\nbadVaddr : %08lx\n"136136-, regs->cp0_epc, regs->cp0_status, regs->cp0_cause, regs->cp0_badvaddr);137137+ printk("epc : %08lx\nStatus: %08lx\n"138138+ "Cause : %08lx\nbadVaddr : %08lx\n",139139+ regs->cp0_epc, regs->cp0_status,140140+ regs->cp0_cause, regs->cp0_badvaddr);137141138142 /* Read all the registers and then print them as there is a139143 problem with interspersed printk's upsetting the Bonito controller.···150146 case MIPS_REVISION_CORID_CORE_FPGA3:151147 case MIPS_REVISION_CORID_CORE_24K:152148 case MIPS_REVISION_CORID_CORE_EMUL_MSC:153153- ll_msc_irq(regs);149149+ ll_msc_irq();154150 break;155151 case MIPS_REVISION_CORID_QED_RM5261:156152 case MIPS_REVISION_CORID_CORE_LV:···259255 * another exception, big deal.260256 */261257262262-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)258258+asmlinkage void plat_irq_dispatch(void)263259{264260 unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM;265261 int irq;···267263 irq = irq_ffs(pending);268264269265 if (irq == MIPSCPU_INT_I8259A)270270- malta_hw0_irqdispatch(regs);266266+ malta_hw0_irqdispatch();271267 else if (irq > 0)272272- do_IRQ(MIPSCPU_INT_BASE + irq, regs);268268+ do_IRQ(MIPSCPU_INT_BASE + irq);273269 else274274- spurious_interrupt(regs);270270+ spurious_interrupt();275271}276272277273static struct irqaction i8259irq = {
+2-2
arch/mips/mips-boards/sead/sead_int.c
···9898 * then we just return, if multiple IRQs are pending then we will just take9999 * another exception, big deal.100100 */101101-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)101101+asmlinkage void plat_irq_dispatch(void)102102{103103 unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM;104104 int irq;···106106 irq = irq_ffs(pending);107107108108 if (irq >= 0)109109- do_IRQ(MIPSCPU_INT_BASE + irq, regs);109109+ do_IRQ(MIPSCPU_INT_BASE + irq);110110 else111111 spurious_interrupt(regs);112112}
···33333434unsigned long cpu_khz;35353636-irqreturn_t sim_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)3636+irqreturn_t sim_timer_interrupt(int irq, void *dev_id)3737{3838#ifdef CONFIG_SMP3939 int cpu = smp_processor_id();···4444 */4545#ifndef CONFIG_MIPS_MT_SMTC4646 if (cpu == 0) {4747- timer_interrupt(irq, dev_id, regs);4747+ timer_interrupt(irq, dev_id);4848 }4949 else {5050 /* Everyone else needs to reset the timer int here as···8484 irq_enable_hazard();8585 evpe(vpflags);86868787- if(cpu_data[cpu].vpe_id == 0) timer_interrupt(irq, dev_id, regs);8787+ if(cpu_data[cpu].vpe_id == 0) timer_interrupt(irq, dev_id);8888 else write_c0_compare (read_c0_count() + ( mips_hpt_frequency/HZ));8989 smtc_timer_broadcast(cpu_data[cpu].vpe_id);9090···9393 /*9494 * every CPU should do profiling and process accounting9595 */9696- local_timer_interrupt (irq, dev_id, regs);9696+ local_timer_interrupt (irq, dev_id);9797 return IRQ_HANDLED;9898#else9999- return timer_interrupt (irq, dev_id, regs);9999+ return timer_interrupt (irq, dev_id);100100#endif101101}102102···177177178178static int mips_cpu_timer_irq;179179180180-static void mips_timer_dispatch (struct pt_regs *regs)180180+static void mips_timer_dispatch(void)181181{182182- do_IRQ (mips_cpu_timer_irq, regs);182182+ do_IRQ(mips_cpu_timer_irq);183183}184184185185
+10-10
arch/mips/momentum/jaguar_atx/irq.c
···4040#include <asm/mipsregs.h>4141#include <asm/time.h>42424343-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)4343+asmlinkage void plat_irq_dispatch(void)4444{4545 unsigned int pending = read_c0_cause() & read_c0_status();46464747 if (pending & STATUSF_IP0)4848- do_IRQ(0, regs);4848+ do_IRQ(0);4949 else if (pending & STATUSF_IP1)5050- do_IRQ(1, regs);5050+ do_IRQ(1);5151 else if (pending & STATUSF_IP2)5252- do_IRQ(2, regs);5252+ do_IRQ(2);5353 else if (pending & STATUSF_IP3)5454- do_IRQ(3, regs);5454+ do_IRQ(3);5555 else if (pending & STATUSF_IP4)5656- do_IRQ(4, regs);5656+ do_IRQ(4);5757 else if (pending & STATUSF_IP5)5858- do_IRQ(5, regs);5858+ do_IRQ(5);5959 else if (pending & STATUSF_IP6)6060- do_IRQ(6, regs);6060+ do_IRQ(6);6161 else if (pending & STATUSF_IP7)6262- ll_timer_interrupt(7, regs);6262+ ll_timer_interrupt(7);6363 else {6464 /*6565 * Now look at the extended interrupts6666 */6767 pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16;6868 if (pending & STATUSF_IP8)6969- ll_mv64340_irq(regs);6969+ ll_mv64340_irq();7070 }7171}7272
+11-11
arch/mips/momentum/ocelot_3/irq.c
···75757676}77777878-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)7878+asmlinkage void plat_irq_dispatch(void)7979{8080 unsigned int pending = read_c0_cause() & read_c0_status();81818282 if (pending & STATUSF_IP0)8383- do_IRQ(0, regs);8383+ do_IRQ(0);8484 else if (pending & STATUSF_IP1)8585- do_IRQ(1, regs);8585+ do_IRQ(1);8686 else if (pending & STATUSF_IP2)8787- do_IRQ(2, regs);8787+ do_IRQ(2);8888 else if (pending & STATUSF_IP3)8989- do_IRQ(3, regs);8989+ do_IRQ(3);9090 else if (pending & STATUSF_IP4)9191- do_IRQ(4, regs);9191+ do_IRQ(4);9292 else if (pending & STATUSF_IP5)9393- do_IRQ(5, regs);9393+ do_IRQ(5);9494 else if (pending & STATUSF_IP6)9595- do_IRQ(6, regs);9595+ do_IRQ(6);9696 else if (pending & STATUSF_IP7)9797- do_IRQ(7, regs);9797+ do_IRQ(7);9898 else {9999 /*100100 * Now look at the extended interrupts···102102 pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16;103103104104 if (pending & STATUSF_IP8)105105- ll_mv64340_irq(regs);105105+ ll_mv64340_irq();106106 else107107- spurious_interrupt(regs);107107+ spurious_interrupt();108108 }109109}
+2-2
arch/mips/momentum/ocelot_c/cpci-irq.c
···112112 * Interrupt handler for interrupts coming from the FPGA chip.113113 * It could be built in ethernet ports etc...114114 */115115-void ll_cpci_irq(struct pt_regs *regs)115115+void ll_cpci_irq(void)116116{117117 unsigned int irq_src, irq_mask;118118···123123 /* mask for just the interrupts we want */124124 irq_src &= ~irq_mask;125125126126- do_IRQ(ls1bit8(irq_src) + CPCI_IRQ_BASE, regs);126126+ do_IRQ(ls1bit8(irq_src) + CPCI_IRQ_BASE);127127}128128129129#define shutdown_cpci_irq disable_cpci_irq
+11-11
arch/mips/momentum/ocelot_c/irq.c
···5959 no_action, IRQF_DISABLED, CPU_MASK_NONE, "cascade via MV64340", NULL, NULL6060};61616262-extern void ll_uart_irq(struct pt_regs *regs);6363-extern void ll_cpci_irq(struct pt_regs *regs);6262+extern void ll_uart_irq(void);6363+extern void ll_cpci_irq(void);64646565-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)6565+asmlinkage void plat_irq_dispatch(void)6666{6767 unsigned int pending = read_c0_cause() & read_c0_status();68686969 if (pending & STATUSF_IP0)7070- do_IRQ(0, regs);7070+ do_IRQ(0);7171 else if (pending & STATUSF_IP1)7272- do_IRQ(1, regs);7272+ do_IRQ(1);7373 else if (pending & STATUSF_IP2)7474- do_IRQ(2, regs);7474+ do_IRQ(2);7575 else if (pending & STATUSF_IP3)7676- ll_uart_irq(regs);7676+ ll_uart_irq();7777 else if (pending & STATUSF_IP4)7878- do_IRQ(4, regs);7878+ do_IRQ(4);7979 else if (pending & STATUSF_IP5)8080- ll_cpci_irq(regs);8080+ ll_cpci_irq();8181 else if (pending & STATUSF_IP6)8282 ll_mv64340_irq(regs);8383 else if (pending & STATUSF_IP7)8484- do_IRQ(7, regs);8484+ do_IRQ(7);8585 else8686- spurious_interrupt(regs);8686+ spurious_interrupt();8787}88888989void __init arch_init_irq(void)
+2-2
arch/mips/momentum/ocelot_c/uart-irq.c
···105105/*106106 * Interrupt handler for interrupts coming from the FPGA chip.107107 */108108-void ll_uart_irq(struct pt_regs *regs)108108+void ll_uart_irq(void)109109{110110 unsigned int irq_src, irq_mask;111111···116116 /* mask for just the interrupts we want */117117 irq_src &= ~irq_mask;118118119119- do_IRQ(ls1bit8(irq_src) + 74, regs);119119+ do_IRQ(ls1bit8(irq_src) + 74);120120}121121122122#define shutdown_uart_irq disable_uart_irq
+2-2
arch/mips/momentum/ocelot_g/gt-irq.c
···108108 * we keep this particular structure in the function.109109 */110110111111-static irqreturn_t gt64240_p0int_irq(int irq, void *dev, struct pt_regs *regs)111111+static irqreturn_t gt64240_p0int_irq(int irq, void *dev)112112{113113 uint32_t irq_src, irq_src_mask;114114 int handled;···135135 /* handle the timer call */136136 do_timer(1);137137#ifndef CONFIG_SMP138138- update_process_times(user_mode(regs));138138+ update_process_times(user_mode(get_irq_regs()));139139#endif140140 }141141
+12-12
arch/mips/momentum/ocelot_g/irq.c
···4848#include <asm/mipsregs.h>4949#include <asm/system.h>50505151-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)5151+asmlinkage void plat_irq_dispatch(void)5252{5353 unsigned int pending = read_c0_cause() & read_c0_status();54545555 if (pending & STATUSF_IP2)5656- do_IRQ(2, regs);5656+ do_IRQ(2);5757 else if (pending & STATUSF_IP3)5858- do_IRQ(3, regs);5858+ do_IRQ(3);5959 else if (pending & STATUSF_IP4)6060- do_IRQ(4, regs);6060+ do_IRQ(4);6161 else if (pending & STATUSF_IP5)6262- do_IRQ(5, regs);6262+ do_IRQ(5);6363 else if (pending & STATUSF_IP6)6464- do_IRQ(6, regs);6464+ do_IRQ(6);6565 else if (pending & STATUSF_IP7)6666- do_IRQ(7, regs);6666+ do_IRQ(7);6767 else {6868 /*6969 * Now look at the extended interrupts···7171 pending = (read_c0_cause() & (read_c0_intcontrol() << 8)) >> 16;72727373 if (pending & STATUSF_IP8)7474- do_IRQ(8, regs);7474+ do_IRQ(8);7575 else if (pending & STATUSF_IP9)7676- do_IRQ(9, regs);7676+ do_IRQ(9);7777 else if (pending & STATUSF_IP10)7878- do_IRQ(10, regs);7878+ do_IRQ(10);7979 else if (pending & STATUSF_IP11)8080- do_IRQ(11, regs);8080+ do_IRQ(11);8181 else8282- spurious_interrupt(regs);8282+ spurious_interrupt();8383 }8484}8585
+2-2
arch/mips/oprofile/op_impl.h
···12121313struct pt_regs;14141515-extern int null_perf_irq(struct pt_regs *regs);1616-extern int (*perf_irq)(struct pt_regs *regs);1515+extern int null_perf_irq(void);1616+extern int (*perf_irq)(void);17171818/* Per-counter configuration as set via oprofilefs. */1919struct op_counter_config {
+4-3
arch/mips/oprofile/op_model_mipsxx.c
···33 * License. See the file "COPYING" in the main directory of this archive44 * for more details.55 *66- * Copyright (C) 2004, 2005 by Ralf Baechle66+ * Copyright (C) 2004, 05, 06 by Ralf Baechle77 * Copyright (C) 2005 by MIPS Technologies, Inc.88 */99#include <linux/oprofile.h>1010#include <linux/interrupt.h>1111#include <linux/smp.h>1212+#include <asm/irq_regs.h>12131314#include "op_impl.h"1415···171170 }172171}173172174174-static int mipsxx_perfcount_handler(struct pt_regs *regs)173173+static int mipsxx_perfcount_handler(void)175174{176175 unsigned int counters = op_model_mipsxx_ops.num_counters;177176 unsigned int control;···185184 counter = r_c0_perfcntr ## n(); \186185 if ((control & M_PERFCTL_INTERRUPT_ENABLE) && \187186 (counter & M_COUNTER_OVERFLOW)) { \188188- oprofile_add_sample(regs, n); \187187+ oprofile_add_sample(get_irq_regs(), n); \189188 w_c0_perfcntr ## n(reg.counter[n]); \190189 handled = 1; \191190 }
+1-1
arch/mips/pci/pci-ip32.c
···2222 * registered on the bridge error irq. It's conceivable that some of these2323 * conditions warrant a panic. Anybody care to say which ones?2424 */2525-static irqreturn_t macepci_error(int irq, void *dev, struct pt_regs *regs)2525+static irqreturn_t macepci_error(int irq, void *dev)2626{2727 char s;2828 unsigned int flags = mace->pci.error;
+15-17
arch/mips/philips/pnx8550/common/int.c
···2323 * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.2424 *2525 */2626+#include <linux/compiler.h>2627#include <linux/init.h>2728#include <linux/irq.h>2829#include <linux/sched.h>···5352 1 // 705453};55545656-static void hw0_irqdispatch(int irq, struct pt_regs *regs)5555+static void hw0_irqdispatch(int irq)5756{5857 /* find out which interrupt */5958 irq = PNX8550_GIC_VECTOR_0 >> 3;···6261 printk("hw0_irqdispatch: irq 0, spurious interrupt?\n");6362 return;6463 }6565- do_IRQ(PNX8550_INT_GIC_MIN + irq, regs);6464+ do_IRQ(PNX8550_INT_GIC_MIN + irq);6665}676668676969-static void timer_irqdispatch(int irq, struct pt_regs *regs)6868+static void timer_irqdispatch(int irq)7069{7170 irq = (0x01c0 & read_c0_config7()) >> 6;72717373- if (irq == 0) {7272+ if (unlikely(irq == 0)) {7473 printk("timer_irqdispatch: irq 0, spurious interrupt?\n");7574 return;7675 }77767878- if (irq & 0x1) {7979- do_IRQ(PNX8550_INT_TIMER1, regs);8080- }8181- if (irq & 0x2) {8282- do_IRQ(PNX8550_INT_TIMER2, regs);8383- }8484- if (irq & 0x4) {8585- do_IRQ(PNX8550_INT_TIMER3, regs);8686- }7777+ if (irq & 0x1)7878+ do_IRQ(PNX8550_INT_TIMER1);7979+ if (irq & 0x2)8080+ do_IRQ(PNX8550_INT_TIMER2);8181+ if (irq & 0x4)8282+ do_IRQ(PNX8550_INT_TIMER3);8783}88848989-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)8585+asmlinkage void plat_irq_dispatch(void)9086{9187 unsigned int pending = read_c0_status() & read_c0_cause();92889389 if (pending & STATUSF_IP2)9494- hw0_irqdispatch(2, regs);9090+ hw0_irqdispatch(2);9591 else if (pending & STATUSF_IP7) {9692 if (read_c0_config7() & 0x01c0)9797- timer_irqdispatch(7, regs);9393+ timer_irqdispatch(7);9894 }9995100100- spurious_interrupt(regs);9696+ spurious_interrupt();10197}1029810399static inline void modify_cp0_intmask(unsigned clr_mask, unsigned set_mask)
+11-43
arch/mips/pmc-sierra/yosemite/irq.c
···5656#define HYPERTRANSPORT_INTC 0x7a /* INTC# */5757#define HYPERTRANSPORT_INTD 0x7b /* INTD# */58585959-extern void jaguar_mailbox_irq(struct pt_regs *);6060-6159/*6260 * Handle hypertransport & SMP interrupts. The interrupt lines are scarce.6361 * For interprocessor interrupts, the best thing to do is to use the INTMSG6462 * register. We use the same external interrupt line, i.e. INTB3 and monitor6563 * another status bit6664 */6767-asmlinkage void ll_ht_smp_irq_handler(int irq, struct pt_regs *regs)6565+static void ll_ht_smp_irq_handler(int irq)6866{6967 u32 status = OCD_READ(RM9000x2_OCD_INTP0STATUS4);7068···105107 }106108#endif /* CONFIG_HT_LEVEL_TRIGGER */107109108108- do_IRQ(irq, regs);110110+ do_IRQ(irq);109111}110112111111-asmlinkage void do_extended_irq(struct pt_regs *regs)112112-{113113- unsigned int intcontrol = read_c0_intcontrol();114114- unsigned int cause = read_c0_cause();115115- unsigned int status = read_c0_status();116116- unsigned int pending_sr, pending_ic;117117-118118- pending_sr = status & cause & 0xff00;119119- pending_ic = (cause >> 8) & intcontrol & 0xff00;120120-121121- if (pending_ic & (1 << 13))122122- do_IRQ(13, regs);123123-124124-}125125-126126-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)113113+asmlinkage void plat_irq_dispatch(void)127114{128115 unsigned int cause = read_c0_cause();129116 unsigned int status = read_c0_status();130117 unsigned int pending = cause & status;131118132119 if (pending & STATUSF_IP7) {133133- do_IRQ(7, regs);120120+ do_IRQ(7);134121 } else if (pending & STATUSF_IP2) {135122#ifdef CONFIG_HYPERTRANSPORT136136- ll_ht_smp_irq_handler(2, regs);123123+ ll_ht_smp_irq_handler(2);137124#else138138- do_IRQ(2, regs);125125+ do_IRQ(2);139126#endif140127 } else if (pending & STATUSF_IP3) {141141- do_IRQ(3, regs);128128+ do_IRQ(3);142129 } else if (pending & STATUSF_IP4) {143143- do_IRQ(4, regs);130130+ do_IRQ(4);144131 } else if (pending & STATUSF_IP5) {145132#ifdef CONFIG_SMP146146- titan_mailbox_irq(regs);133133+ titan_mailbox_irq();147134#else148148- do_IRQ(5, regs);135135+ do_IRQ(5);149136#endif150137 } else if (pending & STATUSF_IP6) {151151- do_IRQ(4, regs);138138+ do_IRQ(4);152139 }153140}154141···161178 register_gdb_console();162179#endif163180}164164-165165-#ifdef CONFIG_KGDB166166-/*167167- * The 16550 DUART has two ports, but is allocated one IRQ168168- * for the serial console. Hence, a generic framework for169169- * serial IRQ routing in place. Currently, just calls the170170- * do_IRQ fuction. But, going in the future, need to check171171- * DUART registers for channel A and B, then decide the172172- * appropriate action173173- */174174-asmlinkage void yosemite_kgdb_irq(int irq, struct pt_regs *regs)175175-{176176- do_IRQ(irq, regs);177177-}178178-#endif
+1-1
arch/mips/pmc-sierra/yosemite/smp.c
···110110{111111}112112113113-asmlinkage void titan_mailbox_irq(struct pt_regs *regs)113113+asmlinkage void titan_mailbox_irq(void)114114{115115 int cpu = smp_processor_id();116116 unsigned long status;
+3-3
arch/mips/qemu/q-irq.c
···991010extern asmlinkage void qemu_handle_int(void);11111212-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)1212+asmlinkage void plat_irq_dispatch(void)1313{1414 unsigned int pending = read_c0_status() & read_c0_cause();15151616 if (pending & 0x8000) {1717- ll_timer_interrupt(Q_COUNT_COMPARE_IRQ, regs);1717+ ll_timer_interrupt(Q_COUNT_COMPARE_IRQ);1818 return;1919 }2020 if (pending & 0x0400) {2121 int irq = i8259_irq();22222323 if (likely(irq >= 0))2424- do_IRQ(irq, regs);2424+ do_IRQ(irq);25252626 return;2727 }
+3-1
arch/mips/sgi-ip22/ip22-berr.c
···1212#include <asm/system.h>1313#include <asm/traps.h>1414#include <asm/branch.h>1515+#include <asm/irq_regs.h>1516#include <asm/sgi/mc.h>1617#include <asm/sgi/hpc3.h>1718#include <asm/sgi/ioc.h>···8685 * and then clear the interrupt when this happens.8786 */88878989-void ip22_be_interrupt(int irq, struct pt_regs *regs)8888+void ip22_be_interrupt(int irq)9089{9190 const int field = 2 * sizeof(unsigned long);9191+ const struct pt_regs *regs = get_irq_regs();92929393 save_and_clear_buserr();9494 print_buserr();
···89899090static unsigned int rt_timer_irq;91919292-void ip27_rt_timer_interrupt(struct pt_regs *regs)9292+void ip27_rt_timer_interrupt(void)9393{9494 int cpu = smp_processor_id();9595 int cpuA = cputoslice(cpu) == 0;···111111 if (cpu == 0)112112 do_timer(1);113113114114- update_process_times(user_mode(regs));114114+ update_process_times(user_mode(get_irq_regs()));115115116116 /*117117 * If we have an externally synchronized Linux clock, then update
+2-4
arch/mips/sgi-ip32/crime.c
···4040 id, rev, field, (unsigned long) CRIME_BASE);4141}42424343-irqreturn_t4444-crime_memerr_intr (unsigned int irq, void *dev_id, struct pt_regs *regs)4343+irqreturn_t crime_memerr_intr(unsigned int irq, void *dev_id)4544{4645 unsigned long stat, addr;4746 int fatal = 0;···9192 return IRQ_HANDLED;9293}93949494-irqreturn_t9595-crime_cpuerr_intr (unsigned int irq, void *dev_id, struct pt_regs *regs)9595+irqreturn_t crime_cpuerr_intr(unsigned int irq, void *dev_id)9696{9797 unsigned long stat = crime->cpu_error_stat & CRIME_CPU_ERROR_MASK;9898 unsigned long addr = crime->cpu_error_addr & CRIME_CPU_ERROR_ADDR_MASK;
+23-25
arch/mips/sgi-ip32/ip32-irq.c
···120120static DEFINE_SPINLOCK(ip32_irq_lock);121121122122/* Some initial interrupts to set up */123123-extern irqreturn_t crime_memerr_intr (int irq, void *dev_id,124124- struct pt_regs *regs);125125-extern irqreturn_t crime_cpuerr_intr (int irq, void *dev_id,126126- struct pt_regs *regs);123123+extern irqreturn_t crime_memerr_intr(int irq, void *dev_id);124124+extern irqreturn_t crime_cpuerr_intr(int irq, void *dev_id);127125128126struct irqaction memerr_irq = { crime_memerr_intr, IRQF_DISABLED,129127 CPU_MASK_NONE, "CRIME memory error", NULL, NULL };···477479 .end = end_mace_irq,478480};479481480480-static void ip32_unknown_interrupt(struct pt_regs *regs)482482+static void ip32_unknown_interrupt(void)481483{482484 printk ("Unknown interrupt occurred!\n");483485 printk ("cp0_status: %08x\n", read_c0_status());···490492 printk ("MACE PCI control register: %08x\n", mace->pci.control);491493492494 printk("Register dump:\n");493493- show_regs(regs);495495+ show_regs(get_irq_regs());494496495497 printk("Please mail this report to linux-mips@linux-mips.org\n");496498 printk("Spinning...");···499501500502/* CRIME 1.1 appears to deliver all interrupts to this one pin. */501503/* change this to loop over all edge-triggered irqs, exception masked out ones */502502-static void ip32_irq0(struct pt_regs *regs)504504+static void ip32_irq0(void)503505{504506 uint64_t crime_int;505507 int irq = 0;···514516 }515517 irq++;516518 DBG("*irq %u*\n", irq);517517- do_IRQ(irq, regs);519519+ do_IRQ(irq);518520}519521520520-static void ip32_irq1(struct pt_regs *regs)522522+static void ip32_irq1(void)521523{522522- ip32_unknown_interrupt(regs);524524+ ip32_unknown_interrupt();523525}524526525525-static void ip32_irq2(struct pt_regs *regs)527527+static void ip32_irq2(void)526528{527527- ip32_unknown_interrupt(regs);529529+ ip32_unknown_interrupt();528530}529531530530-static void ip32_irq3(struct pt_regs *regs)532532+static void ip32_irq3(void)531533{532532- ip32_unknown_interrupt(regs);534534+ ip32_unknown_interrupt();533535}534536535535-static void ip32_irq4(struct pt_regs *regs)537537+static void ip32_irq4(void)536538{537537- ip32_unknown_interrupt(regs);539539+ ip32_unknown_interrupt();538540}539541540540-static void ip32_irq5(struct pt_regs *regs)542542+static void ip32_irq5(void)541543{542542- ll_timer_interrupt(IP32_R4K_TIMER_IRQ, regs);544544+ ll_timer_interrupt(IP32_R4K_TIMER_IRQ);543545}544546545545-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)547547+asmlinkage void plat_irq_dispatch(void)546548{547549 unsigned int pending = read_c0_cause();548550549551 if (likely(pending & IE_IRQ0))550550- ip32_irq0(regs);552552+ ip32_irq0();551553 else if (unlikely(pending & IE_IRQ1))552552- ip32_irq1(regs);554554+ ip32_irq1();553555 else if (unlikely(pending & IE_IRQ2))554554- ip32_irq2(regs);556556+ ip32_irq2();555557 else if (unlikely(pending & IE_IRQ3))556556- ip32_irq3(regs);558558+ ip32_irq3();557559 else if (unlikely(pending & IE_IRQ4))558558- ip32_irq4(regs);560560+ ip32_irq4();559561 else if (likely(pending & IE_IRQ5))560560- ip32_irq5(regs);562562+ ip32_irq5();561563}562564563565void __init arch_init_irq(void)
···8888 __raw_writeq((((u64)action)<< 48), mailbox_0_set_regs[cpu]);8989}90909191-void bcm1480_mailbox_interrupt(struct pt_regs *regs)9191+void bcm1480_mailbox_interrupt(void)9292{9393 int cpu = smp_processor_id();9494 unsigned int action;
+4-4
arch/mips/sibyte/bcm1480/time.c
···100100101101#include <asm/sibyte/sb1250.h>102102103103-void bcm1480_timer_interrupt(struct pt_regs *regs)103103+void bcm1480_timer_interrupt(void)104104{105105 int cpu = smp_processor_id();106106- int irq = K_BCM1480_INT_TIMER_0+cpu;106106+ int irq = K_BCM1480_INT_TIMER_0 + cpu;107107108108 /* Reset the timer */109109 __raw_writeq(M_SCD_TIMER_ENABLE|M_SCD_TIMER_MODE_CONTINUOUS,···113113 /*114114 * CPU 0 handles the global timer interrupt job115115 */116116- ll_timer_interrupt(irq, regs);116116+ ll_timer_interrupt(irq);117117 }118118 else {119119 /*120120 * other CPUs should just do profiling and process accounting121121 */122122- ll_local_timer_interrupt(irq, regs);122122+ ll_local_timer_interrupt(irq);123123 }124124}125125
···7676 __raw_writeq((((u64)action) << 48), mailbox_set_regs[cpu]);7777}78787979-void sb1250_mailbox_interrupt(struct pt_regs *regs)7979+void sb1250_mailbox_interrupt(void)8080{8181 int cpu = smp_processor_id();8282 unsigned int action;
+3-3
arch/mips/sibyte/sb1250/time.c
···125125 */126126}127127128128-void sb1250_timer_interrupt(struct pt_regs *regs)128128+void sb1250_timer_interrupt(void)129129{130130 int cpu = smp_processor_id();131131 int irq = K_INT_TIMER_0 + cpu;···138138 /*139139 * CPU 0 handles the global timer interrupt job140140 */141141- ll_timer_interrupt(irq, regs);141141+ ll_timer_interrupt(irq);142142 }143143 else {144144 /*145145 * other CPUs should just do profiling and process accounting146146 */147147- ll_local_timer_interrupt(irq, regs);147147+ ll_local_timer_interrupt(irq);148148 }149149}150150
+17-17
arch/mips/sni/irq.c
···6969 * hwint0 should deal with MP agent, ASIC PCI, EISA NMI and debug7070 * button interrupts. Later ...7171 */7272-static void pciasic_hwint0(struct pt_regs *regs)7272+static void pciasic_hwint0(void)7373{7474 panic("Received int0 but no handler yet ...");7575}76767777/* This interrupt was used for the com1 console on the first prototypes. */7878-static void pciasic_hwint2(struct pt_regs *regs)7878+static void pciasic_hwint2(void)7979{8080 /* I think this shouldn't happen on production machines. */8181 panic("hwint2 and no handler yet");8282}83838484/* hwint5 is the r4k count / compare interrupt */8585-static void pciasic_hwint5(struct pt_regs *regs)8585+static void pciasic_hwint5(void)8686{8787 panic("hwint5 and no handler yet");8888}···103103 *104104 * The EISA_INT bit in CSITPEND is high active, all others are low active.105105 */106106-static void pciasic_hwint1(struct pt_regs *regs)106106+static void pciasic_hwint1(void)107107{108108 u8 pend = *(volatile char *)PCIMT_CSITPEND;109109 unsigned long flags;···119119 if (unlikely(irq < 0))120120 return;121121122122- do_IRQ(irq, regs);122122+ do_IRQ(irq);123123 }124124125125 if (!(pend & IT_SCSI)) {126126 flags = read_c0_status();127127 clear_c0_status(ST0_IM);128128- do_IRQ(PCIMT_IRQ_SCSI, regs);128128+ do_IRQ(PCIMT_IRQ_SCSI);129129 write_c0_status(flags);130130 }131131}···133133/*134134 * hwint 3 should deal with the PCI A - D interrupts,135135 */136136-static void pciasic_hwint3(struct pt_regs *regs)136136+static void pciasic_hwint3(void)137137{138138 u8 pend = *(volatile char *)PCIMT_CSITPEND;139139 int irq;···141141 pend &= (IT_INTA | IT_INTB | IT_INTC | IT_INTD);142142 clear_c0_status(IE_IRQ3);143143 irq = PCIMT_IRQ_INT2 + ls1bit8(pend);144144- do_IRQ(irq, regs);144144+ do_IRQ(irq);145145 set_c0_status(IE_IRQ3);146146}147147148148/*149149 * hwint 4 is used for only the onboard PCnet 32.150150 */151151-static void pciasic_hwint4(struct pt_regs *regs)151151+static void pciasic_hwint4(void)152152{153153 clear_c0_status(IE_IRQ4);154154- do_IRQ(PCIMT_IRQ_ETHERNET, regs);154154+ do_IRQ(PCIMT_IRQ_ETHERNET);155155 set_c0_status(IE_IRQ4);156156}157157158158-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)158158+asmlinkage void plat_irq_dispatch(void)159159{160160 unsigned int pending = read_c0_status() & read_c0_cause();161161 static unsigned char led_cache;···163163 *(volatile unsigned char *) PCIMT_CSLED = ++led_cache;164164165165 if (pending & 0x0800)166166- pciasic_hwint1(regs);166166+ pciasic_hwint1();167167 else if (pending & 0x4000)168168- pciasic_hwint4(regs);168168+ pciasic_hwint4();169169 else if (pending & 0x2000)170170- pciasic_hwint3(regs);170170+ pciasic_hwint3();171171 else if (pending & 0x1000)172172- pciasic_hwint2(regs);172172+ pciasic_hwint2();173173 else if (pending & 0x8000)174174- pciasic_hwint5(regs);174174+ pciasic_hwint5();175175 else if (pending & 0x0400)176176- pciasic_hwint0(regs);176176+ pciasic_hwint0();177177}178178179179void __init init_pciasic(void)
+7-7
arch/mips/tx4927/common/tx4927_irq.c
···576576 return (sw_irq);577577}578578579579-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)579579+asmlinkage void plat_irq_dispatch(void)580580{581581 unsigned int pending = read_c0_status() & read_c0_cause();582582583583 if (pending & STATUSF_IP7) /* cpu timer */584584- do_IRQ(TX4927_IRQ_CPU_TIMER, regs);584584+ do_IRQ(TX4927_IRQ_CPU_TIMER);585585 else if (pending & STATUSF_IP2) { /* tx4927 pic */586586 unsigned int irq = tx4927_irq_nested();587587588588 if (unlikely(irq == 0)) {589589- spurious_interrupt(regs);589589+ spurious_interrupt();590590 return;591591 }592592- do_IRQ(irq, regs);592592+ do_IRQ(irq);593593 } else if (pending & STATUSF_IP0) /* user line 0 */594594- do_IRQ(TX4927_IRQ_USER0, regs);594594+ do_IRQ(TX4927_IRQ_USER0);595595 else if (pending & STATUSF_IP1) /* user line 1 */596596- do_IRQ(TX4927_IRQ_USER1, regs);596596+ do_IRQ(TX4927_IRQ_USER1);597597 else598598- spurious_interrupt(regs);598598+ spurious_interrupt();599599}
···635635636636EXPORT_SYMBOL(vr41xx_set_intassign);637637638638-static int icu_get_irq(unsigned int irq, struct pt_regs *regs)638638+static int icu_get_irq(unsigned int irq)639639{640640 uint16_t pend1, pend2;641641 uint16_t mask1, mask2;
+16-16
arch/mips/vr41xx/common/irq.c
···2525#include <asm/vr41xx/irq.h>26262727typedef struct irq_cascade {2828- int (*get_irq)(unsigned int, struct pt_regs *);2828+ int (*get_irq)(unsigned int);2929} irq_cascade_t;30303131static irq_cascade_t irq_cascade[NR_IRQS] __cacheline_aligned;···3636 .name = "cascade",3737};38383939-int cascade_irq(unsigned int irq, int (*get_irq)(unsigned int, struct pt_regs *))3939+int cascade_irq(unsigned int irq, int (*get_irq)(unsigned int))4040{4141 int retval = 0;4242···59596060EXPORT_SYMBOL_GPL(cascade_irq);61616262-static void irq_dispatch(unsigned int irq, struct pt_regs *regs)6262+static void irq_dispatch(unsigned int irq)6363{6464 irq_cascade_t *cascade;6565 struct irq_desc *desc;···7474 unsigned int source_irq = irq;7575 desc = irq_desc + source_irq;7676 desc->chip->ack(source_irq);7777- irq = cascade->get_irq(irq, regs);7777+ irq = cascade->get_irq(irq);7878 if (irq < 0)7979 atomic_inc(&irq_err_count);8080 else8181- irq_dispatch(irq, regs);8181+ irq_dispatch(irq);8282 desc->chip->end(source_irq);8383 } else8484- do_IRQ(irq, regs);8484+ do_IRQ(irq);8585}86868787-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)8787+asmlinkage void plat_irq_dispatch(void)8888{8989 unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM;90909191 if (pending & CAUSEF_IP7)9292- do_IRQ(7, regs);9292+ do_IRQ(7);9393 else if (pending & 0x7800) {9494 if (pending & CAUSEF_IP3)9595- irq_dispatch(3, regs);9595+ irq_dispatch(3);9696 else if (pending & CAUSEF_IP4)9797- irq_dispatch(4, regs);9797+ irq_dispatch(4);9898 else if (pending & CAUSEF_IP5)9999- irq_dispatch(5, regs);9999+ irq_dispatch(5);100100 else if (pending & CAUSEF_IP6)101101- irq_dispatch(6, regs);101101+ irq_dispatch(6);102102 } else if (pending & CAUSEF_IP2)103103- irq_dispatch(2, regs);103103+ irq_dispatch(2);104104 else if (pending & CAUSEF_IP0)105105- do_IRQ(0, regs);105105+ do_IRQ(0);106106 else if (pending & CAUSEF_IP1)107107- do_IRQ(1, regs);107107+ do_IRQ(1);108108 else109109- spurious_interrupt(regs);109109+ spurious_interrupt();110110}111111112112void __init arch_init_irq(void)
+4-4
include/asm-mips/irq.h
···26262727struct pt_regs;28282929-extern asmlinkage unsigned int do_IRQ(unsigned int irq, struct pt_regs *regs);2929+extern asmlinkage unsigned int do_IRQ(unsigned int irq);30303131#ifdef CONFIG_MIPS_MT_SMTC3232/*···5555 * Ideally there should be away to get this into kernel/irq/handle.c to5656 * avoid the overhead of a call for just a tiny function ...5757 */5858-#define do_IRQ(irq, regs) \5858+#define do_IRQ(irq) \5959do { \6060 irq_enter(); \6161 __DO_IRQ_SMTC_HOOK(); \6262- __do_IRQ((irq), (regs)); \6262+ __do_IRQ((irq)); \6363 irq_exit(); \6464} while (0)65656666#endif67676868extern void arch_init_irq(void);6969-extern void spurious_interrupt(struct pt_regs *regs);6969+extern void spurious_interrupt(void);70707171#ifdef CONFIG_MIPS_MT_SMTC7272struct irqaction;
+21-1
include/asm-mips/irq_regs.h
···11-#include <asm-generic/irq_regs.h>11+/*22+ * This program is free software; you can redistribute it and/or33+ * modify it under the terms of the GNU General Public License44+ * as published by the Free Software Foundation; either version55+ * 2 of the License, or (at your option) any later version.66+ *77+ * Copyright (C) 2006 Ralf Baechle (ralf@linux-mips.org)88+ */99+#ifndef __ASM_IRQ_REGS_H1010+#define __ASM_IRQ_REGS_H1111+1212+#define ARCH_HAS_OWN_IRQ_REGS1313+1414+#include <linux/thread_info.h>1515+1616+static inline struct pt_regs *get_irq_regs(void)1717+{1818+ return current_thread_info()->regs;1919+}2020+2121+#endif /* __ASM_IRQ_REGS_H */