From 727439709f07e54a3c3d66a5b4a93f5616bf9e19 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Thu, 24 Apr 2003 08:58:29 -0700 Subject: [PATCH] [PATCH] irqs: char drivers Fix up various char drivers for the IRQ API change. Also IDE, ISDN and i2o bits. Fix various warnings and compilation errors. --- drivers/char/cyclades.c | 13 +++++++------ drivers/char/esp.c | 6 ++++-- drivers/char/ip2main.c | 7 +++++-- drivers/char/isicom.c | 11 ++++++----- drivers/char/mxser.c | 11 +++++++---- drivers/char/rio/rio_linux.c | 5 +++-- drivers/char/riscom8.c | 10 ++++++---- drivers/char/specialix.c | 7 ++++--- drivers/char/stallion.c | 6 ++++-- drivers/char/sx.c | 11 +++++++---- drivers/char/synclink.c | 6 +++--- drivers/char/synclinkmp.c | 7 ++++--- drivers/char/tpqic02.c | 9 +++++---- drivers/ide/legacy/hd.c | 3 ++- drivers/isdn/hardware/eicon/diva.c | 7 ++++--- drivers/isdn/hardware/eicon/divasmain.c | 2 +- drivers/message/i2o/i2o_core.c | 3 ++- 17 files changed, 74 insertions(+), 50 deletions(-) diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c index dfc7daa0bffaa..eb42b54d56469 100644 --- a/drivers/char/cyclades.c +++ b/drivers/char/cyclades.c @@ -1090,7 +1090,7 @@ detect_isa_irq (volatile ucchar *address) whenever the card wants its hand held--chars received, out buffer empty, modem change, etc. */ -static void +static irqreturn_t cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct tty_struct *tty; @@ -1113,7 +1113,7 @@ cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs) #ifdef CY_DEBUG_INTERRUPTS printk("cyy_interrupt: spurious interrupt %d\n\r", irq); #endif - return; /* spurious interrupt */ + return IRQ_NONE; /* spurious interrupt */ } card_base_addr = (unsigned char *)cinfo->base_addr; @@ -1500,6 +1500,7 @@ cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs) cy_writeb((u_long)card_base_addr + (Cy_ClrIntr<card_lock); + return IRQ_HANDLED; } /* cyy_interrupt */ /***********************************************************/ @@ -1881,7 +1882,7 @@ cyz_handle_cmd(struct cyclades_card *cinfo) } #ifdef CONFIG_CYZ_INTR -static void +static irqreturn_t cyz_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct cyclades_card *cinfo; @@ -1890,20 +1891,20 @@ cyz_interrupt(int irq, void *dev_id, struct pt_regs *regs) #ifdef CY_DEBUG_INTERRUPTS printk("cyz_interrupt: spurious interrupt %d\n\r", irq); #endif - return; /* spurious interrupt */ + return IRQ_NONE; /* spurious interrupt */ } if (!ISZLOADED(*cinfo)) { #ifdef CY_DEBUG_INTERRUPTS printk("cyz_interrupt: board not yet loaded (IRQ%d).\n\r", irq); #endif - return; + return IRQ_NONE; } /* Handle the interrupts */ cyz_handle_cmd(cinfo); - return; + return IRQ_HANDLED; } /* cyz_interrupt */ static void diff --git a/drivers/char/esp.c b/drivers/char/esp.c index a07aa6de333db..614ff9f1e7826 100644 --- a/drivers/char/esp.c +++ b/drivers/char/esp.c @@ -653,7 +653,8 @@ static _INLINE_ void check_modem_status(struct esp_struct *info) /* * This is the serial driver's interrupt routine */ -static void rs_interrupt_single(int irq, void *dev_id, struct pt_regs * regs) +static irqreturn_t rs_interrupt_single(int irq, void *dev_id, + struct pt_regs *regs) { struct esp_struct * info; unsigned err_status; @@ -670,7 +671,7 @@ static void rs_interrupt_single(int irq, void *dev_id, struct pt_regs * regs) if (!info->tty) { sti(); - return; + return IRQ_NONE; } if (scratch & 0x04) { /* error */ @@ -753,6 +754,7 @@ static void rs_interrupt_single(int irq, void *dev_id, struct pt_regs * regs) printk("end.\n"); #endif sti(); + return IRQ_HANDLED; } /* diff --git a/drivers/char/ip2main.c b/drivers/char/ip2main.c index c601cd743ed63..249f4ed44cbb1 100644 --- a/drivers/char/ip2main.c +++ b/drivers/char/ip2main.c @@ -274,7 +274,7 @@ static void ip2_hangup(PTTY); static void set_irq(int, int); static void ip2_interrupt_bh(i2eBordStrPtr pB); -static void ip2_interrupt(int irq, void *dev_id, struct pt_regs * regs); +static irqreturn_t ip2_interrupt(int irq, void *dev_id, struct pt_regs * regs); static void ip2_poll(unsigned long arg); static inline void service_all_boards(void); static void do_input(void *p); @@ -1339,11 +1339,12 @@ ip2_interrupt_bh(i2eBordStrPtr pB) /* */ /* */ /******************************************************************************/ -static void +static irqreturn_t ip2_interrupt(int irq, void *dev_id, struct pt_regs * regs) { int i; i2eBordStrPtr pB; + int handled = 0; ip2trace (ITRC_NO_PORT, ITRC_INTR, 99, 1, irq ); @@ -1355,6 +1356,7 @@ ip2_interrupt(int irq, void *dev_id, struct pt_regs * regs) // IRQ = 0 for polled boards, we won't poll "IRQ" boards if ( pB && (pB->i2eUsingIrq == irq) ) { + handled = 1; #ifdef USE_IQI if (NO_MAIL_HERE != ( pB->i2eStartMail = iiGetMail(pB))) { @@ -1379,6 +1381,7 @@ ip2_interrupt(int irq, void *dev_id, struct pt_regs * regs) ++irq_counter; ip2trace (ITRC_NO_PORT, ITRC_INTR, ITRC_RETURN, 0 ); + return IRQ_RETVAL(handled); } /******************************************************************************/ diff --git a/drivers/char/isicom.c b/drivers/char/isicom.c index 658a194b9daf3..8e82ff0a6dce6 100644 --- a/drivers/char/isicom.c +++ b/drivers/char/isicom.c @@ -509,7 +509,8 @@ static void isicom_bottomhalf(void * data) } /* main interrupt handler routine */ -static void isicom_interrupt(int irq, void * dev_id, struct pt_regs * regs) +static irqreturn_t isicom_interrupt(int irq, void *dev_id, + struct pt_regs *regs) { struct isi_board * card; struct isi_port * port; @@ -534,7 +535,7 @@ static void isicom_interrupt(int irq, void * dev_id, struct pt_regs * regs) if (!card || !(card->status & FIRMWARE_LOADED)) { /* printk(KERN_DEBUG "ISICOM: interrupt: not handling irq%d!.\n", irq);*/ - return; + return IRQ_NONE; } base = card->base; @@ -561,7 +562,7 @@ static void isicom_interrupt(int irq, void * dev_id, struct pt_regs * regs) ClearInterrupt(base); else outw(0x0000, base+0x04); /* enable interrupts */ - return; + return IRQ_HANDLED; } port = card->ports + channel; if (!(port->flags & ASYNC_INITIALIZED)) { @@ -569,7 +570,7 @@ static void isicom_interrupt(int irq, void * dev_id, struct pt_regs * regs) ClearInterrupt(base); else outw(0x0000, base+0x04); /* enable interrupts */ - return; + return IRQ_HANDLED; } tty = port->tty; @@ -702,7 +703,7 @@ static void isicom_interrupt(int irq, void * dev_id, struct pt_regs * regs) ClearInterrupt(base); else outw(0x0000, base+0x04); /* enable interrupts */ - return; + return IRQ_HANDLED; } /* called with interrupts disabled */ diff --git a/drivers/char/mxser.c b/drivers/char/mxser.c index ec87ad19c7903..7efe92eaf0d9a 100644 --- a/drivers/char/mxser.c +++ b/drivers/char/mxser.c @@ -348,7 +348,7 @@ static void mxser_set_termios(struct tty_struct *, struct termios *); static void mxser_stop(struct tty_struct *); static void mxser_start(struct tty_struct *); static void mxser_hangup(struct tty_struct *); -static void mxser_interrupt(int, void *, struct pt_regs *); +static irqreturn_t mxser_interrupt(int, void *, struct pt_regs *); static inline void mxser_receive_chars(struct mxser_struct *, int *); static inline void mxser_transmit_chars(struct mxser_struct *); static inline void mxser_check_modem_status(struct mxser_struct *, int); @@ -1362,13 +1362,14 @@ void mxser_hangup(struct tty_struct *tty) /* * This is the serial driver's generic interrupt routine */ -static void mxser_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t mxser_interrupt(int irq, void *dev_id, struct pt_regs *regs) { int status, i; struct mxser_struct *info; struct mxser_struct *port; int max, irqbits, bits, msr; int pass_counter = 0; + int handled = 0; port = 0; for (i = 0; i < MXSER_BOARDS; i++) { @@ -1379,15 +1380,16 @@ static void mxser_interrupt(int irq, void *dev_id, struct pt_regs *regs) } if (i == MXSER_BOARDS) - return; + return IRQ_NONE; if (port == 0) - return; + return IRQ_NONE; max = mxser_numports[mxsercfg[i].board_type]; while (1) { irqbits = inb(port->vector) & port->vectormask; if (irqbits == port->vectormask) break; + handled = 1; for (i = 0, bits = 1; i < max; i++, irqbits |= bits, bits <<= 1) { if (irqbits == port->vectormask) break; @@ -1417,6 +1419,7 @@ static void mxser_interrupt(int irq, void *dev_id, struct pt_regs *regs) break; /* Prevent infinite loops */ } } + return IRQ_RETVAL(handled); } static inline void mxser_receive_chars(struct mxser_struct *info, diff --git a/drivers/char/rio/rio_linux.c b/drivers/char/rio/rio_linux.c index ea909fd9f6787..29a076b73a975 100644 --- a/drivers/char/rio/rio_linux.c +++ b/drivers/char/rio/rio_linux.c @@ -445,7 +445,7 @@ void rio_reset_interrupt (struct Host *HostP) } -static void rio_interrupt (int irq, void *ptr, struct pt_regs *regs) +static irqreturn_t rio_interrupt (int irq, void *ptr, struct pt_regs *regs) { struct Host *HostP; func_enter (); @@ -506,7 +506,7 @@ static void rio_interrupt (int irq, void *ptr, struct pt_regs *regs) if (test_and_set_bit (RIO_BOARD_INTR_LOCK, &HostP->locks)) { printk (KERN_ERR "Recursive interrupt! (host %d/irq%d)\n", (int) ptr, HostP->Ivec); - return; + return IRQ_HANDLED; } RIOServiceHost(p, HostP, irq); @@ -518,6 +518,7 @@ static void rio_interrupt (int irq, void *ptr, struct pt_regs *regs) rio_dprintk (RIO_DEBUG_IFLOW, "rio: exit rio_interrupt (%d/%d)\n", irq, HostP->Ivec); func_exit (); + return IRQ_HANDLED; } diff --git a/drivers/char/riscom8.c b/drivers/char/riscom8.c index 558f01c9a8bc5..a8815eaa75768 100644 --- a/drivers/char/riscom8.c +++ b/drivers/char/riscom8.c @@ -590,23 +590,24 @@ static inline void rc_check_modem(struct riscom_board const * bp) } /* The main interrupt processing routine */ -static void rc_interrupt(int irq, void * dev_id, struct pt_regs * regs) +static irqreturn_t rc_interrupt(int irq, void * dev_id, struct pt_regs * regs) { unsigned char status; unsigned char ack; struct riscom_board *bp; unsigned long loop = 0; - + int handled = 0; + bp = IRQ_to_board[irq]; if (!bp || !(bp->flags & RC_BOARD_ACTIVE)) { - return; + return IRQ_NONE; } while ((++loop < 16) && ((status = ~(rc_in(bp, RC_BSR))) & (RC_BSR_TOUT | RC_BSR_TINT | RC_BSR_MINT | RC_BSR_RINT))) { - + handled = 1; if (status & RC_BSR_TOUT) printk(KERN_WARNING "rc%d: Got timeout. Hardware " "error?\n", board_No(bp)); @@ -648,6 +649,7 @@ static void rc_interrupt(int irq, void * dev_id, struct pt_regs * regs) rc_out(bp, CD180_EOIR, 0); /* Mark end of interrupt */ rc_out(bp, RC_CTOUT, 0); /* Clear timeout flag */ } + return IRQ_RETVAL(handled); } /* diff --git a/drivers/char/specialix.c b/drivers/char/specialix.c index f49d36edbdc9b..d132207f5f6bd 100644 --- a/drivers/char/specialix.c +++ b/drivers/char/specialix.c @@ -204,7 +204,7 @@ static struct specialix_port sx_port[SX_NBOARD * SX_NPORT]; #ifdef SPECIALIX_TIMER static struct timer_list missed_irq_timer; -static void sx_interrupt(int irq, void * dev_id, struct pt_regs * regs); +static irqreturn_t sx_interrupt(int irq, void * dev_id, struct pt_regs * regs); #endif @@ -876,7 +876,7 @@ static inline void sx_check_modem(struct specialix_board * bp) /* The main interrupt processing routine */ -static void sx_interrupt(int irq, void * dev_id, struct pt_regs * regs) +static irqreturn_t sx_interrupt(int irq, void *dev_id, struct pt_regs *regs) { unsigned char status; unsigned char ack; @@ -890,7 +890,7 @@ static void sx_interrupt(int irq, void * dev_id, struct pt_regs * regs) #ifdef SPECIALIX_DEBUG printk (KERN_DEBUG "sx: False interrupt. irq %d.\n", irq); #endif - return; + return IRQ_NONE; } saved_reg = bp->reg; @@ -933,6 +933,7 @@ static void sx_interrupt(int irq, void * dev_id, struct pt_regs * regs) } bp->reg = saved_reg; outb (bp->reg, bp->base + SX_ADDR_REG); + return IRQ_HANDLED; } diff --git a/drivers/char/stallion.c b/drivers/char/stallion.c index 8a5d7ce37b70a..9506f50e5f5bc 100644 --- a/drivers/char/stallion.c +++ b/drivers/char/stallion.c @@ -530,7 +530,6 @@ static int stl_getportstruct(unsigned long arg); static int stl_getbrdstruct(unsigned long arg); static int stl_waitcarrier(stlport_t *portp, struct file *filp); static void stl_delay(int len); -static void stl_intr(int irq, void *dev_id, struct pt_regs *regs); static void stl_eiointr(stlbrd_t *brdp); static void stl_echatintr(stlbrd_t *brdp); static void stl_echmcaintr(stlbrd_t *brdp); @@ -2085,10 +2084,11 @@ stl_readdone: * calls off to the approrpriate board interrupt handlers. */ -static void stl_intr(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t stl_intr(int irq, void *dev_id, struct pt_regs *regs) { stlbrd_t *brdp; int i; + int handled = 0; #if DEBUG printk("stl_intr(irq=%d,regs=%x)\n", irq, (int) regs); @@ -2099,8 +2099,10 @@ static void stl_intr(int irq, void *dev_id, struct pt_regs *regs) continue; if (brdp->state == 0) continue; + handled = 1; (* brdp->isr)(brdp); } + return IRQ_RETVAL(handled); } /*****************************************************************************/ diff --git a/drivers/char/sx.c b/drivers/char/sx.c index d101b6397fadf..d8d0f11a0bc28 100644 --- a/drivers/char/sx.c +++ b/drivers/char/sx.c @@ -1202,7 +1202,7 @@ static inline void sx_check_modem_signals (struct sx_port *port) * Small, elegant, clear. */ -static void sx_interrupt (int irq, void *ptr, struct pt_regs *regs) +static irqreturn_t sx_interrupt (int irq, void *ptr, struct pt_regs *regs) { struct sx_board *board = ptr; struct sx_port *port; @@ -1269,12 +1269,14 @@ static void sx_interrupt (int irq, void *ptr, struct pt_regs *regs) } } - if (!sx_initialized) return; - if (!(board->flags & SX_BOARD_INITIALIZED)) return; + if (!sx_initialized) + return IRQ_HANDLED; + if (!(board->flags & SX_BOARD_INITIALIZED)) + return IRQ_HANDLED; if (test_and_set_bit (SX_BOARD_INTR_LOCK, &board->locks)) { printk (KERN_ERR "Recursive interrupt! (%d)\n", board->irq); - return; + return IRQ_HANDLED; } for (i=0;inports;i++) { @@ -1298,6 +1300,7 @@ static void sx_interrupt (int irq, void *ptr, struct pt_regs *regs) sx_dprintk (SX_DEBUG_FLOW, "sx: exit sx_interrupt (%d/%d)\n", irq, board->irq); /* func_exit (); */ + return IRQ_HANDLED; } diff --git a/drivers/char/synclink.c b/drivers/char/synclink.c index f274368a8f39a..ceaa76b37fd10 100644 --- a/drivers/char/synclink.c +++ b/drivers/char/synclink.c @@ -1704,7 +1704,7 @@ void mgsl_isr_transmit_dma( struct mgsl_struct *info ) * * Return Value: None */ -static void mgsl_interrupt(int irq, void *dev_id, struct pt_regs * regs) +static irqreturn_t mgsl_interrupt(int irq, void *dev_id, struct pt_regs * regs) { struct mgsl_struct * info; u16 UscVector; @@ -1716,7 +1716,7 @@ static void mgsl_interrupt(int irq, void *dev_id, struct pt_regs * regs) info = (struct mgsl_struct *)dev_id; if (!info) - return; + return IRQ_NONE; spin_lock(&info->irq_spinlock); @@ -1766,7 +1766,7 @@ static void mgsl_interrupt(int irq, void *dev_id, struct pt_regs * regs) if ( debug_level >= DEBUG_LEVEL_ISR ) printk("%s(%d):mgsl_interrupt(%d)exit.\n", __FILE__,__LINE__,irq); - + return IRQ_HANDLED; } /* end of mgsl_interrupt() */ /* startup() diff --git a/drivers/char/synclinkmp.c b/drivers/char/synclinkmp.c index a79298e19dccd..46e784ec86ab0 100644 --- a/drivers/char/synclinkmp.c +++ b/drivers/char/synclinkmp.c @@ -652,7 +652,6 @@ static void isr_rxdmaerror(SLMP_INFO *info); static void isr_txdmaok(SLMP_INFO *info); static void isr_txdmaerror(SLMP_INFO *info); static void isr_io_pin(SLMP_INFO *info, u16 status); -static void synclinkmp_interrupt(int irq, void *dev_id, struct pt_regs * regs); static int alloc_dma_bufs(SLMP_INFO *info); static void free_dma_bufs(SLMP_INFO *info); @@ -2446,7 +2445,8 @@ void isr_io_pin( SLMP_INFO *info, u16 status ) * dev_id device ID supplied during interrupt registration * regs interrupted processor context */ -static void synclinkmp_interrupt(int irq, void *dev_id, struct pt_regs * regs) +static irqreturn_t synclinkmp_interrupt(int irq, void *dev_id, + struct pt_regs *regs) { SLMP_INFO * info; unsigned char status, status0, status1=0; @@ -2462,7 +2462,7 @@ static void synclinkmp_interrupt(int irq, void *dev_id, struct pt_regs * regs) info = (SLMP_INFO *)dev_id; if (!info) - return; + return IRQ_NONE; spin_lock(&info->lock); @@ -2564,6 +2564,7 @@ static void synclinkmp_interrupt(int irq, void *dev_id, struct pt_regs * regs) if ( debug_level >= DEBUG_LEVEL_ISR ) printk("%s(%d):synclinkmp_interrupt(%d)exit.\n", __FILE__,__LINE__,irq); + return IRQ_HANDLED; } /* Initialize and start device. diff --git a/drivers/char/tpqic02.c b/drivers/char/tpqic02.c index 23b89aa8f8f46..a2e9230cc1fc6 100644 --- a/drivers/char/tpqic02.c +++ b/drivers/char/tpqic02.c @@ -1604,7 +1604,7 @@ static void qic02_tape_times_out(unsigned long dummy) * When we are finished, set flags to indicate end, disable timer. * NOTE: This *must* be fast! */ -static void qic02_tape_interrupt(int irq, void *dev_id, +static irqreturn_t qic02_tape_interrupt(int irq, void *dev_id, struct pt_regs *regs) { int stat, r, i; @@ -1622,7 +1622,7 @@ static void qic02_tape_interrupt(int irq, void *dev_id, if (((stat & (AR_STAT_DMADONE)) == 0) && ((stat & (QIC02_STAT_EXCEPTION)) != 0)) { TIMERCONT; - return; /* "Linux with IRQ sharing" */ + return IRQ_NONE;/* "Linux with IRQ sharing" */ } } @@ -1642,7 +1642,7 @@ static void qic02_tape_interrupt(int irq, void *dev_id, dma_mode = 0; /* wake up rw() */ status_expect_int = NO; wake_up(&qic02_tape_transfer); - return; + return IRQ_HANDLED; } /* return if tape controller not ready, or * if dma channel hasn't finished last byte yet. @@ -1668,7 +1668,7 @@ static void qic02_tape_interrupt(int irq, void *dev_id, release_dma_lock(flags); if (r) - return; + return IRQ_HANDLED; /* finish DMA cycle */ @@ -1688,6 +1688,7 @@ static void qic02_tape_interrupt(int irq, void *dev_id, } else { printk(TPQIC02_NAME ": Unexpected interrupt, stat == %x\n", inb(QIC02_STAT_PORT)); } + return IRQ_HANDLED; } /* qic02_tape_interrupt */ diff --git a/drivers/ide/legacy/hd.c b/drivers/ide/legacy/hd.c index 8946722f91157..ac8651d33febe 100644 --- a/drivers/ide/legacy/hd.c +++ b/drivers/ide/legacy/hd.c @@ -679,7 +679,7 @@ static int hd_ioctl(struct inode * inode, struct file * file, * be forgotten about... */ -static void hd_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t hd_interrupt(int irq, void *dev_id, struct pt_regs *regs) { void (*handler)(void) = do_hd; @@ -689,6 +689,7 @@ static void hd_interrupt(int irq, void *dev_id, struct pt_regs *regs) handler = unexpected_hd_interrupt; handler(); local_irq_enable(); + return IRQ_HANDLED; } static struct block_device_operations hd_fops = { diff --git a/drivers/isdn/hardware/eicon/diva.c b/drivers/isdn/hardware/eicon/diva.c index 81cf2292c1c81..c96f0a3b55302 100644 --- a/drivers/isdn/hardware/eicon/diva.c +++ b/drivers/isdn/hardware/eicon/diva.c @@ -509,22 +509,23 @@ diva_xdi_read(void *adapter, void *os_handle, void *dst, } -void diva_os_irq_wrapper(int irq, void *context, struct pt_regs *regs) +irqreturn_t diva_os_irq_wrapper(int irq, void *context, struct pt_regs *regs) { diva_os_xdi_adapter_t *a = (diva_os_xdi_adapter_t *) context; diva_xdi_clear_interrupts_proc_t clear_int_proc; if (!a || !a->xdi_adapter.diva_isr_handler) { - return; + return IRQ_NONE; } if ((clear_int_proc = a->clear_interrupts_proc)) { (*clear_int_proc) (a); a->clear_interrupts_proc = 0; - return; + return IRQ_HANDLED; } (*(a->xdi_adapter.diva_isr_handler)) (&a->xdi_adapter); + return IRQ_HANDLED; } static void diva_init_request_array(void) diff --git a/drivers/isdn/hardware/eicon/divasmain.c b/drivers/isdn/hardware/eicon/divasmain.c index bf872061b77a3..9ad1f26487223 100644 --- a/drivers/isdn/hardware/eicon/divasmain.c +++ b/drivers/isdn/hardware/eicon/divasmain.c @@ -61,7 +61,7 @@ static char *DRIVERNAME = static char *DRIVERLNAME = "divas"; char *DRIVERRELEASE = "2.0"; -extern void diva_os_irq_wrapper(int irq, void *context, +extern irqreturn_t diva_os_irq_wrapper(int irq, void *context, struct pt_regs *regs); extern int create_divas_proc(void); extern void remove_divas_proc(void); diff --git a/drivers/message/i2o/i2o_core.c b/drivers/message/i2o/i2o_core.c index e914c3cb7de54..50df0cf65eaf0 100644 --- a/drivers/message/i2o/i2o_core.c +++ b/drivers/message/i2o/i2o_core.c @@ -3463,10 +3463,11 @@ static void i2o_pci_dispose(struct i2o_controller *c) * to be rather simple. We keep the controller pointer in the cookie. */ -static void i2o_pci_interrupt(int irq, void *dev_id, struct pt_regs *r) +static irqreturn_t i2o_pci_interrupt(int irq, void *dev_id, struct pt_regs *r) { struct i2o_controller *c = dev_id; i2o_run_queue(c); + return IRQ_HANDLED; } /** -- 2.53.0