]> git.hungrycats.org Git - linux/commitdiff
[PATCH] irqs: char drivers
authorAndrew Morton <akpm@digeo.com>
Thu, 24 Apr 2003 15:58:29 +0000 (08:58 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Thu, 24 Apr 2003 15:58:29 +0000 (08:58 -0700)
Fix up various char drivers for the IRQ API change.  Also IDE, ISDN and i2o
bits.  Fix various warnings and compilation errors.

17 files changed:
drivers/char/cyclades.c
drivers/char/esp.c
drivers/char/ip2main.c
drivers/char/isicom.c
drivers/char/mxser.c
drivers/char/rio/rio_linux.c
drivers/char/riscom8.c
drivers/char/specialix.c
drivers/char/stallion.c
drivers/char/sx.c
drivers/char/synclink.c
drivers/char/synclinkmp.c
drivers/char/tpqic02.c
drivers/ide/legacy/hd.c
drivers/isdn/hardware/eicon/diva.c
drivers/isdn/hardware/eicon/divasmain.c
drivers/message/i2o/i2o_core.c

index dfc7daa0bffaa891d465b38db938c054de2376c2..eb42b54d564693adec86f207a87e106db6aa6bf3 100644 (file)
@@ -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<<index), 0);
                                 /* Cy_ClrIntr is 0x1800 */
    spin_unlock(&cinfo->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
index a07aa6de333dbd4a27289a2a5c1e37a2911f58d6..614ff9f1e78260fb5c63734761e93c73a6459295 100644 (file)
@@ -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;
 }
 
 /*
index c601cd743ed632a7a90edc2ec508afc5ec881150..249f4ed44cbb1612560ea86349fad099741997f9 100644 (file)
@@ -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);
 }
 
 /******************************************************************************/
index 658a194b9daf3a01373964819a21dc19352b9880..8e82ff0a6dce622916e7f03ae812f68cd16009a3 100644 (file)
@@ -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 */ 
index ec87ad19c790381398fa020b524c2dd71398c990..7efe92eaf0d9a7b02fedb4d2950244f80b4a423c 100644 (file)
@@ -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,
index ea909fd9f678782551b60843ae6a6e40cab86f67..29a076b73a975de85b8d3ab3949fa9ede911b652 100644 (file)
@@ -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;
 }
 
 
index 558f01c9a8bc514aff49b01c1b1c917a163427c2..a8815eaa757684010632d8e72bebdfbbd13eb034 100644 (file)
@@ -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);
 }
 
 /*
index f49d36edbdc9bde970d7396e80f49821ddbe3603..d132207f5f6bd87595aa7e0a781a58a33db5ecc1 100644 (file)
@@ -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;
 }
 
 
index 8a5d7ce37b70a0ea483d335408dfcff07f75ce00..9506f50e5f5bc5c7ca9ecf65764d2c1e29c70b3f 100644 (file)
@@ -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);
 }
 
 /*****************************************************************************/
index d101b6397fadf8af5dd2a187a308b85d6e941e33..d8d0f11a0bc285d2ecba1d9e955fb64885f9e172 100644 (file)
@@ -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;i<board->nports;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;
 }
 
 
index f274368a8f39ad58dd075588faa449d79ac6f44b..ceaa76b37fd10eac80c2ef8b3f60144fc2be3662 100644 (file)
@@ -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()
index a79298e19dccdc6faf9d49876df543ac1715545e..46e784ec86ab0a2e1a19fc6ce46d1e1a0f85d5dd 100644 (file)
@@ -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.
index 23b89aa8f8f4652ee90ef57399b5fbcdb87c1867..a2e9230cc1fc60c030b69904ed6da3476c382afd 100644 (file)
@@ -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 */
 
 
index 8946722f911573634f7817dc616d9d2499b53ae1..ac8651d33febe3a0463c7570adaa2fe2129a92f9 100644 (file)
@@ -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 = {
index 81cf2292c1c810409fe0d76acdf880e12c88d2c1..c96f0a3b55302856bcbacb975614c6aa52057044 100644 (file)
@@ -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)
index bf872061b77a32ba3d28503f02a7df40388f4194..9ad1f26487223df65cbb806cbf02fdbb66f652ce 100644 (file)
@@ -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);
index e914c3cb7de5461c00c9acbc2284f955678fc1a6..50df0cf65eaf0fe7ce05ab8bf18dfca0a21d2e18 100644 (file)
@@ -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;
 }      
 
 /**