lkml.org 
[lkml]   [2007]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 4/9] irq-remove: driver non-trivial

    commit 654f4a242cac0148ffe98ce288c9116e65b08e44
    Author: Jeff Garzik <jeff@garzik.org>
    Date: Fri Oct 19 00:47:17 2007 -0400

    [IRQ ARG REMOVAL] non-trivial driver updates

    drivers/atm/ambassador.c | 5 +++--
    drivers/bluetooth/btuart_cs.c | 2 +-
    drivers/bluetooth/dtl1_cs.c | 2 +-
    drivers/char/cyclades.c | 21 +++------------------
    drivers/char/ip2/ip2main.c | 10 +++++-----
    drivers/char/mwave/tp3780i.c | 10 ++++++----
    drivers/char/pcmcia/synclink_cs.c | 8 ++++----
    drivers/char/rio/rio_linux.c | 14 ++++++++------
    drivers/char/riscom8.c | 4 ++--
    drivers/char/specialix.c | 7 ++++---
    drivers/char/sx.c | 14 +++++++-------
    drivers/char/synclink.c | 4 ++--
    drivers/char/synclink_gt.c | 9 ++++-----
    drivers/char/synclinkmp.c | 7 +++----
    drivers/char/tpm/tpm_tis.c | 6 +++---
    drivers/ide/ide-io.c | 8 ++++----
    drivers/input/serio/i8042.c | 9 +++++----
    drivers/isdn/act2000/act2000_isa.c | 3 ++-
    drivers/isdn/hisax/amd7930_fn.c | 2 +-
    drivers/isdn/hisax/hisax.h | 2 +-
    drivers/isdn/hisax/icc.c | 2 +-
    drivers/isdn/hisax/isac.c | 2 +-
    drivers/isdn/hisax/w6692.c | 4 ++--
    drivers/isdn/sc/interrupt.c | 3 ++-
    drivers/macintosh/via-macii.c | 6 +++---
    drivers/macintosh/via-maciisi.c | 9 ++++-----
    drivers/macintosh/via-pmu68k.c | 10 +++++-----
    drivers/media/video/planb.c | 7 ++++---
    drivers/net/eexpress.c | 5 +++--
    drivers/net/forcedeth.c | 26 +++++++++++++-------------
    drivers/net/hamradio/scc.c | 6 +++---
    drivers/net/irda/au1k_ir.c | 8 +++++---
    drivers/net/irda/smsc-ircc2.c | 6 +++---
    drivers/net/irda/via-ircc.c | 6 +++---
    drivers/net/lib82596.c | 2 +-
    drivers/net/netxen/netxen_nic_main.c | 4 ++--
    drivers/net/pcmcia/fmvj18x_cs.c | 6 +++---
    drivers/net/phy/phy.c | 4 ++--
    drivers/net/wan/sdla.c | 5 +++--
    drivers/pcmcia/i82365.c | 13 +++++++------
    drivers/pcmcia/tcic.c | 10 +++++-----
    drivers/rtc/rtc-ds1374.c | 3 ++-
    drivers/scsi/NCR5380.c | 6 +++---
    drivers/scsi/NCR53C9x.c | 7 ++++---
    drivers/scsi/aha152x.c | 4 ++--
    drivers/scsi/aha1542.c | 5 +++--
    drivers/scsi/eata.c | 19 ++++++++++---------
    drivers/scsi/psi240i.c | 10 +++++-----
    drivers/scsi/sym53c416.c | 3 ++-
    drivers/scsi/u14-34f.c | 12 +++++++-----
    drivers/serial/8250.c | 4 ++--
    include/linux/uio_driver.h | 3 ++-
    sound/drivers/mts64.c | 2 ++
    sound/drivers/portman2x4.c | 2 ++
    54 files changed, 190 insertions(+), 181 deletions(-)

    654f4a242cac0148ffe98ce288c9116e65b08e44
    diff --git a/drivers/atm/ambassador.c b/drivers/atm/ambassador.c
    index c2b9464..8f6a8a2 100644
    --- a/drivers/atm/ambassador.c
    +++ b/drivers/atm/ambassador.c
    @@ -862,9 +862,10 @@ static inline void interrupts_off (amb_dev * dev) {

    /********** interrupt handling **********/

    -static irqreturn_t interrupt_handler(int irq, void *dev_id) {
    +static irqreturn_t interrupt_handler(void *dev_id)
    +{
    amb_dev * dev = dev_id;
    -
    +
    PRINTD (DBG_IRQ|DBG_FLOW, "interrupt_handler: %p", dev_id);

    {
    diff --git a/drivers/bluetooth/btuart_cs.c b/drivers/bluetooth/btuart_cs.c
    index 08f48d5..1fdf756 100644
    --- a/drivers/bluetooth/btuart_cs.c
    +++ b/drivers/bluetooth/btuart_cs.c
    @@ -287,7 +287,7 @@ static void btuart_receive(btuart_info_t *info)
    }


    -static irqreturn_t btuart_interrupt(int irq, void *dev_inst)
    +static irqreturn_t btuart_interrupt(void *dev_inst)
    {
    btuart_info_t *info = dev_inst;
    unsigned int iobase;
    diff --git a/drivers/bluetooth/dtl1_cs.c b/drivers/bluetooth/dtl1_cs.c
    index dae45cd..3f9d5b9 100644
    --- a/drivers/bluetooth/dtl1_cs.c
    +++ b/drivers/bluetooth/dtl1_cs.c
    @@ -290,7 +290,7 @@ static void dtl1_receive(dtl1_info_t *info)
    }


    -static irqreturn_t dtl1_interrupt(int irq, void *dev_inst)
    +static irqreturn_t dtl1_interrupt(void *dev_inst)
    {
    dtl1_info_t *info = dev_inst;
    unsigned int iobase;
    diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c
    index d15234c..7e8fe35 100644
    --- a/drivers/char/cyclades.c
    +++ b/drivers/char/cyclades.c
    @@ -1312,7 +1312,7 @@ end:
    whenever the card wants its hand held--chars
    received, out buffer empty, modem change, etc.
    */
    -static irqreturn_t cyy_interrupt(int irq, void *dev_id)
    +static irqreturn_t cyy_interrupt(void *dev_id)
    {
    int status;
    struct cyclades_card *cinfo = dev_id;
    @@ -1320,13 +1320,6 @@ static irqreturn_t cyy_interrupt(int irq, void *dev_id)
    unsigned int chip, too_many, had_work;
    int index;

    - if (unlikely(cinfo == NULL)) {
    -#ifdef CY_DEBUG_INTERRUPTS
    - printk(KERN_DEBUG "cyy_interrupt: spurious interrupt %d\n",irq);
    -#endif
    - return IRQ_NONE; /* spurious interrupt */
    - }
    -
    card_base_addr = cinfo->base_addr;
    index = cinfo->bus_index;

    @@ -1728,21 +1721,13 @@ static void cyz_handle_cmd(struct cyclades_card *cinfo)
    }

    #ifdef CONFIG_CYZ_INTR
    -static irqreturn_t cyz_interrupt(int irq, void *dev_id)
    +static irqreturn_t cyz_interrupt(void *dev_id)
    {
    struct cyclades_card *cinfo = dev_id;

    - if (unlikely(cinfo == NULL)) {
    -#ifdef CY_DEBUG_INTERRUPTS
    - printk(KERN_DEBUG "cyz_interrupt: spurious interrupt %d\n",irq);
    -#endif
    - return IRQ_NONE; /* spurious interrupt */
    - }
    -
    if (unlikely(!ISZLOADED(*cinfo))) {
    #ifdef CY_DEBUG_INTERRUPTS
    - printk(KERN_DEBUG "cyz_interrupt: board not yet loaded "
    - "(IRQ%d).\n", irq);
    + printk(KERN_DEBUG "cyz_interrupt: board not yet loaded\n");
    #endif
    return IRQ_NONE;
    }
    diff --git a/drivers/char/ip2/ip2main.c b/drivers/char/ip2/ip2main.c
    index 2124dce..1d4c528 100644
    --- a/drivers/char/ip2/ip2main.c
    +++ b/drivers/char/ip2/ip2main.c
    @@ -190,7 +190,7 @@ static int ip2_tiocmset(struct tty_struct *tty, struct file *file,

    static void set_irq(int, int);
    static void ip2_interrupt_bh(struct work_struct *work);
    -static irqreturn_t ip2_interrupt(int irq, void *dev_id);
    +static irqreturn_t ip2_interrupt(void *dev_id);
    static void ip2_poll(unsigned long arg);
    static inline void service_all_boards(void);
    static void do_input(struct work_struct *);
    @@ -1149,7 +1149,7 @@ ip2_interrupt_bh(struct work_struct *work)


    /******************************************************************************/
    -/* Function: ip2_interrupt(int irq, void *dev_id) */
    +/* Function: ip2_interrupt(void *dev_id) */
    /* Parameters: irq - interrupt number */
    /* pointer to optional device ID structure */
    /* Returns: Nothing */
    @@ -1167,7 +1167,7 @@ ip2_interrupt_bh(struct work_struct *work)
    /* */
    /******************************************************************************/
    static irqreturn_t
    -ip2_interrupt(int irq, void *dev_id)
    +ip2_interrupt(void *dev_id)
    {
    int i;
    i2eBordStrPtr pB;
    @@ -1182,7 +1182,7 @@ ip2_interrupt(int irq, void *dev_id)
    // Only process those boards which match our IRQ.
    // IRQ = 0 for polled boards, we won't poll "IRQ" boards

    - if ( pB && (pB->i2eUsingIrq == irq) ) {
    + if ( pB && (pB->i2eUsingIrq == get_irqfunc_irq()) ) {
    handled = 1;
    #ifdef USE_IQI

    @@ -1231,7 +1231,7 @@ ip2_poll(unsigned long arg)
    // Just polled boards, IRQ = 0 will hit all non-interrupt boards.
    // It will NOT poll boards handled by hard interrupts.
    // The issue of queued BH interrups is handled in ip2_interrupt().
    - ip2_interrupt(0, NULL);
    + ip2_interrupt(NULL);

    PollTimer.expires = POLL_TIMEOUT;
    add_timer( &PollTimer );
    diff --git a/drivers/char/mwave/tp3780i.c b/drivers/char/mwave/tp3780i.c
    index f282976..ff57eb1 100644
    --- a/drivers/char/mwave/tp3780i.c
    +++ b/drivers/char/mwave/tp3780i.c
    @@ -95,14 +95,15 @@ static void EnableSRAM(THINKPAD_BD_DATA * pBDData)
    }


    -static irqreturn_t UartInterrupt(int irq, void *dev_id)
    +static irqreturn_t UartInterrupt(void *dev_id)
    {
    PRINTK_3(TRACE_TP3780I,
    - "tp3780i::UartInterrupt entry irq %x dev_id %p\n", irq, dev_id);
    + "tp3780i::UartInterrupt entry irq %x dev_id %p\n",
    + get_irqfunc_irq(), dev_id);
    return IRQ_HANDLED;
    }

    -static irqreturn_t DspInterrupt(int irq, void *dev_id)
    +static irqreturn_t DspInterrupt(void *dev_id)
    {
    pMWAVE_DEVICE_DATA pDrvData = &mwave_s_mdd;
    DSP_3780I_CONFIG_SETTINGS *pSettings = &pDrvData->rBDData.rDspSettings;
    @@ -110,7 +111,8 @@ static irqreturn_t DspInterrupt(int irq, void *dev_id)
    unsigned short usIPCSource = 0, usIsolationMask, usPCNum;

    PRINTK_3(TRACE_TP3780I,
    - "tp3780i::DspInterrupt entry irq %x dev_id %p\n", irq, dev_id);
    + "tp3780i::DspInterrupt entry irq %x dev_id %p\n",
    + get_irqfunc_irq(), dev_id);

    if (dsp3780I_GetIPCSource(usDspBaseIO, &usIPCSource) == 0) {
    PRINTK_2(TRACE_TP3780I,
    diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c
    index 2b88931..922cf60 100644
    --- a/drivers/char/pcmcia/synclink_cs.c
    +++ b/drivers/char/pcmcia/synclink_cs.c
    @@ -417,7 +417,7 @@ static void rx_reset_buffers(MGSLPC_INFO *info);
    static int rx_alloc_buffers(MGSLPC_INFO *info);
    static void rx_free_buffers(MGSLPC_INFO *info);

    -static irqreturn_t mgslpc_isr(int irq, void *dev_id);
    +static irqreturn_t mgslpc_isr(void *dev_id);

    /*
    * Bottom half interrupt handlers
    @@ -1226,7 +1226,7 @@ static void ri_change(MGSLPC_INFO *info)
    * irq interrupt number that caused interrupt
    * dev_id device ID supplied during interrupt registration
    */
    -static irqreturn_t mgslpc_isr(int irq, void *dev_id)
    +static irqreturn_t mgslpc_isr(void *dev_id)
    {
    MGSLPC_INFO * info = (MGSLPC_INFO *)dev_id;
    unsigned short isr;
    @@ -1234,7 +1234,7 @@ static irqreturn_t mgslpc_isr(int irq, void *dev_id)
    int count=0;

    if (debug_level >= DEBUG_LEVEL_ISR)
    - printk("mgslpc_isr(%d) entry.\n", irq);
    + printk("mgslpc_isr(%d) entry.\n", get_irqfunc_irq());
    if (!info)
    return IRQ_NONE;

    @@ -1328,7 +1328,7 @@ static irqreturn_t mgslpc_isr(int irq, void *dev_id)

    if (debug_level >= DEBUG_LEVEL_ISR)
    printk("%s(%d):mgslpc_isr(%d)exit.\n",
    - __FILE__,__LINE__,irq);
    + __FILE__, __LINE__, get_irqfunc_irq());

    return IRQ_HANDLED;
    }
    diff --git a/drivers/char/rio/rio_linux.c b/drivers/char/rio/rio_linux.c
    index 0ce9667..616a1cf 100644
    --- a/drivers/char/rio/rio_linux.c
    +++ b/drivers/char/rio/rio_linux.c
    @@ -363,13 +363,14 @@ static void rio_reset_interrupt(struct Host *HostP)
    }


    -static irqreturn_t rio_interrupt(int irq, void *ptr)
    +static irqreturn_t rio_interrupt(void *ptr)
    {
    struct Host *HostP;
    func_enter();

    - HostP = ptr; /* &p->RIOHosts[(long)ptr]; */
    - rio_dprintk(RIO_DEBUG_IFLOW, "rio: enter rio_interrupt (%d/%d)\n", irq, HostP->Ivec);
    + HostP = ptr; /* &p->RIOHosts[(long)ptr]; */
    + rio_dprintk(RIO_DEBUG_IFLOW, "rio: enter rio_interrupt (%d/%d)\n",
    + get_irqfunc_irq(), HostP->Ivec);

    /* AAargh! The order in which to do these things is essential and
    not trivial.
    @@ -389,7 +390,7 @@ static irqreturn_t rio_interrupt(int irq, void *ptr)
    */

    rio_dprintk(RIO_DEBUG_IFLOW, "rio: We've have noticed the interrupt\n");
    - if (HostP->Ivec == irq) {
    + if (HostP->Ivec == get_irqfunc_irq()) {
    /* Tell the card we've noticed the interrupt. */
    rio_reset_interrupt(HostP);
    }
    @@ -407,7 +408,8 @@ static irqreturn_t rio_interrupt(int irq, void *ptr)
    rio_dprintk(RIO_DEBUG_IFLOW, "riointr() doing host %p type %d\n", ptr, HostP->Type);

    clear_bit(RIO_BOARD_INTR_LOCK, &HostP->locks);
    - rio_dprintk(RIO_DEBUG_IFLOW, "rio: exit rio_interrupt (%d/%d)\n", irq, HostP->Ivec);
    + rio_dprintk(RIO_DEBUG_IFLOW, "rio: exit rio_interrupt (%d/%d)\n",
    + get_irqfunc_irq(), HostP->Ivec);
    func_exit();
    return IRQ_HANDLED;
    }
    @@ -417,7 +419,7 @@ static void rio_pollfunc(unsigned long data)
    {
    func_enter();

    - rio_interrupt(0, &p->RIOHosts[data]);
    + rio_interrupt(&p->RIOHosts[data]);
    mod_timer(&p->RIOHosts[data].timer, jiffies + rio_poll);

    func_exit();
    diff --git a/drivers/char/riscom8.c b/drivers/char/riscom8.c
    index b37e626..1c0741a 100644
    --- a/drivers/char/riscom8.c
    +++ b/drivers/char/riscom8.c
    @@ -537,7 +537,7 @@ static inline void rc_check_modem(struct riscom_board const * bp)
    }

    /* The main interrupt processing routine */
    -static irqreturn_t rc_interrupt(int irq, void * dev_id)
    +static irqreturn_t rc_interrupt(void * dev_id)
    {
    unsigned char status;
    unsigned char ack;
    @@ -545,7 +545,7 @@ static irqreturn_t rc_interrupt(int irq, void * dev_id)
    unsigned long loop = 0;
    int handled = 0;

    - bp = IRQ_to_board[irq];
    + bp = IRQ_to_board[get_irqfunc_irq()];

    if (!(bp->flags & RC_BOARD_ACTIVE))
    return IRQ_NONE;
    diff --git a/drivers/char/specialix.c b/drivers/char/specialix.c
    index 4558556..bad86e0 100644
    --- a/drivers/char/specialix.c
    +++ b/drivers/char/specialix.c
    @@ -195,7 +195,7 @@ static struct specialix_port sx_port[SX_NBOARD * SX_NPORT];

    #ifdef SPECIALIX_TIMER
    static struct timer_list missed_irq_timer;
    -static irqreturn_t sx_interrupt(int irq, void * dev_id);
    +static irqreturn_t sx_interrupt(void * dev_id);
    #endif


    @@ -876,7 +876,7 @@ static inline void sx_check_modem(struct specialix_board * bp)


    /* The main interrupt processing routine */
    -static irqreturn_t sx_interrupt(int irq, void *dev_id)
    +static irqreturn_t sx_interrupt(void *dev_id)
    {
    unsigned char status;
    unsigned char ack;
    @@ -892,7 +892,8 @@ static irqreturn_t sx_interrupt(int irq, void *dev_id)

    dprintk (SX_DEBUG_FLOW, "enter %s port %d room: %ld\n", __FUNCTION__, port_No(sx_get_port(bp, "INT")), SERIAL_XMIT_SIZE - sx_get_port(bp, "ITN")->xmit_cnt - 1);
    if (!(bp->flags & SX_BOARD_ACTIVE)) {
    - dprintk (SX_DEBUG_IRQ, "sx: False interrupt. irq %d.\n", irq);
    + dprintk (SX_DEBUG_IRQ, "sx: False interrupt. irq %d.\n",
    + get_irqfunc_irq());
    spin_unlock_irqrestore(&bp->lock, flags);
    func_exit();
    return IRQ_NONE;
    diff --git a/drivers/char/sx.c b/drivers/char/sx.c
    index 85a2328..ff7fac3 100644
    --- a/drivers/char/sx.c
    +++ b/drivers/char/sx.c
    @@ -1241,15 +1241,15 @@ static inline void sx_check_modem_signals(struct sx_port *port)
    * Small, elegant, clear.
    */

    -static irqreturn_t sx_interrupt(int irq, void *ptr)
    +static irqreturn_t sx_interrupt(void *ptr)
    {
    struct sx_board *board = ptr;
    struct sx_port *port;
    int i;

    func_enter();
    - sx_dprintk(SX_DEBUG_FLOW, "sx: enter sx_interrupt (%d/%d)\n", irq,
    - board->irq);
    + sx_dprintk(SX_DEBUG_FLOW, "sx: enter sx_interrupt (%d/%d)\n",
    + get_irqfunc_irq(), board->irq);

    /* AAargh! The order in which to do these things is essential and
    not trivial.
    @@ -1293,7 +1293,7 @@ static irqreturn_t sx_interrupt(int irq, void *ptr)
    }
    #endif

    - if (board->irq == irq) {
    + if (board->irq == get_irqfunc_irq()) {
    /* Tell the card we've noticed the interrupt. */

    sx_write_board_word(board, cc_int_pending, 0);
    @@ -1339,8 +1339,8 @@ static irqreturn_t sx_interrupt(int irq, void *ptr)

    clear_bit(SX_BOARD_INTR_LOCK, &board->locks);

    - sx_dprintk(SX_DEBUG_FLOW, "sx: exit sx_interrupt (%d/%d)\n", irq,
    - board->irq);
    + sx_dprintk(SX_DEBUG_FLOW, "sx: exit sx_interrupt (%d/%d)\n",
    + get_irqfunc_irq(), board->irq);
    func_exit();
    return IRQ_HANDLED;
    }
    @@ -1351,7 +1351,7 @@ static void sx_pollfunc(unsigned long data)

    func_enter();

    - sx_interrupt(0, board);
    + sx_interrupt(board);

    mod_timer(&board->timer, jiffies + sx_poll);
    func_exit();
    diff --git a/drivers/char/synclink.c b/drivers/char/synclink.c
    index 905d1f5..6b1ff07 100644
    --- a/drivers/char/synclink.c
    +++ b/drivers/char/synclink.c
    @@ -1691,16 +1691,16 @@ static void mgsl_isr_transmit_dma( struct mgsl_struct *info )
    *
    * Arguments:
    *
    - * irq interrupt number that caused interrupt
    * dev_id device ID supplied during interrupt registration
    *
    * Return Value: None
    */
    -static irqreturn_t mgsl_interrupt(int irq, void *dev_id)
    +static irqreturn_t mgsl_interrupt(void *dev_id)
    {
    struct mgsl_struct * info;
    u16 UscVector;
    u16 DmaVector;
    + int irq = get_irqfunc_irq();

    if ( debug_level >= DEBUG_LEVEL_ISR )
    printk("%s(%d):mgsl_interrupt(%d)entry.\n",
    diff --git a/drivers/char/synclink_gt.c b/drivers/char/synclink_gt.c
    index 64e835f..ecc5b0c 100644
    --- a/drivers/char/synclink_gt.c
    +++ b/drivers/char/synclink_gt.c
    @@ -492,7 +492,7 @@ static void isr_serial(struct slgt_info *info);
    static void isr_rdma(struct slgt_info *info);
    static void isr_txeom(struct slgt_info *info, unsigned short status);
    static void isr_tdma(struct slgt_info *info);
    -static irqreturn_t slgt_interrupt(int irq, void *dev_id);
    +static irqreturn_t slgt_interrupt(void *dev_id);

    static int alloc_dma_bufs(struct slgt_info *info);
    static void free_dma_bufs(struct slgt_info *info);
    @@ -2318,16 +2318,15 @@ static void isr_gpio(struct slgt_info *info, unsigned int changed, unsigned int

    /* interrupt service routine
    *
    - * irq interrupt number
    * dev_id device ID supplied during interrupt registration
    */
    -static irqreturn_t slgt_interrupt(int irq, void *dev_id)
    +static irqreturn_t slgt_interrupt(void *dev_id)
    {
    struct slgt_info *info;
    unsigned int gsr;
    unsigned int i;

    - DBGISR(("slgt_interrupt irq=%d entry\n", irq));
    + DBGISR(("slgt_interrupt irq=%d entry\n", get_irqfunc_irq()));

    info = dev_id;
    if (!info)
    @@ -2380,7 +2379,7 @@ static irqreturn_t slgt_interrupt(int irq, void *dev_id)

    spin_unlock(&info->lock);

    - DBGISR(("slgt_interrupt irq=%d exit\n", irq));
    + DBGISR(("slgt_interrupt irq=%d exit\n", get_irqfunc_irq()));
    return IRQ_HANDLED;
    }

    diff --git a/drivers/char/synclinkmp.c b/drivers/char/synclinkmp.c
    index c63013b..2173e5c 100644
    --- a/drivers/char/synclinkmp.c
    +++ b/drivers/char/synclinkmp.c
    @@ -2583,11 +2583,10 @@ void isr_io_pin( SLMP_INFO *info, u16 status )
    /* Interrupt service routine entry point.
    *
    * Arguments:
    - * irq interrupt number that caused interrupt
    * dev_id device ID supplied during interrupt registration
    * regs interrupted processor context
    */
    -static irqreturn_t synclinkmp_interrupt(int irq, void *dev_id)
    +static irqreturn_t synclinkmp_interrupt(void *dev_id)
    {
    SLMP_INFO * info;
    unsigned char status, status0, status1=0;
    @@ -2599,7 +2598,7 @@ static irqreturn_t synclinkmp_interrupt(int irq, void *dev_id)

    if ( debug_level >= DEBUG_LEVEL_ISR )
    printk("%s(%d): synclinkmp_interrupt(%d)entry.\n",
    - __FILE__,__LINE__,irq);
    + __FILE__, __LINE__, get_irqfunc_irq());

    info = (SLMP_INFO *)dev_id;
    if (!info)
    @@ -2704,7 +2703,7 @@ static irqreturn_t synclinkmp_interrupt(int irq, void *dev_id)

    if ( debug_level >= DEBUG_LEVEL_ISR )
    printk("%s(%d):synclinkmp_interrupt(%d)exit.\n",
    - __FILE__,__LINE__,irq);
    + __FILE__, __LINE__, get_irqfunc_irq());
    return IRQ_HANDLED;
    }

    diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
    index fd771a4..4b7e738 100644
    --- a/drivers/char/tpm/tpm_tis.c
    +++ b/drivers/char/tpm/tpm_tis.c
    @@ -379,7 +379,7 @@ static struct tpm_vendor_specific tpm_tis = {
    .fops = &tis_ops,},
    };

    -static irqreturn_t tis_int_probe(int irq, void *dev_id)
    +static irqreturn_t tis_int_probe(void *dev_id)
    {
    struct tpm_chip *chip = dev_id;
    u32 interrupt;
    @@ -390,7 +390,7 @@ static irqreturn_t tis_int_probe(int irq, void *dev_id)
    if (interrupt == 0)
    return IRQ_NONE;

    - chip->vendor.irq = irq;
    + chip->vendor.irq = get_irqfunc_irq();

    /* Clear interrupts handled with TPM_EOI */
    iowrite32(interrupt,
    @@ -399,7 +399,7 @@ static irqreturn_t tis_int_probe(int irq, void *dev_id)
    return IRQ_HANDLED;
    }

    -static irqreturn_t tis_int_handler(int irq, void *dev_id)
    +static irqreturn_t tis_int_handler(void *dev_id)
    {
    struct tpm_chip *chip = dev_id;
    u32 interrupt;
    diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
    index 5c8b008..9b6e5e2 100644
    --- a/drivers/ide/ide-io.c
    +++ b/drivers/ide/ide-io.c
    @@ -1533,7 +1533,7 @@ void ide_timer_expiry (unsigned long data)
    * mysteriously.
    */

    -static void unexpected_intr (int irq, ide_hwgroup_t *hwgroup)
    +static void unexpected_intr (ide_hwgroup_t *hwgroup)
    {
    u8 stat;
    ide_hwif_t *hwif = hwgroup->hwif;
    @@ -1542,7 +1542,7 @@ static void unexpected_intr (int irq, ide_hwgroup_t *hwgroup)
    * handle the unexpected interrupt
    */
    do {
    - if (hwif->irq == irq) {
    + if (hwif->irq == get_irqfunc_irq()) {
    stat = hwif->INB(hwif->io_ports[IDE_STATUS_OFFSET]);
    if (!OK_STAT(stat, READY_STAT, BAD_STAT)) {
    /* Try to not flood the console with msgs */
    @@ -1585,7 +1585,7 @@ static void unexpected_intr (int irq, ide_hwgroup_t *hwgroup)
    * on the hwgroup and the process begins again.
    */

    -irqreturn_t ide_intr (int irq, void *dev_id)
    +irqreturn_t ide_intr (void *dev_id)
    {
    unsigned long flags;
    ide_hwgroup_t *hwgroup = (ide_hwgroup_t *)dev_id;
    @@ -1626,7 +1626,7 @@ irqreturn_t ide_intr (int irq, void *dev_id)
    * Probably not a shared PCI interrupt,
    * so we can safely try to do something about it:
    */
    - unexpected_intr(irq, hwgroup);
    + unexpected_intr(hwgroup);
    #ifdef CONFIG_BLK_DEV_IDEPCI
    } else {
    /*
    diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
    index 11dafc0..660964c 100644
    --- a/drivers/input/serio/i8042.c
    +++ b/drivers/input/serio/i8042.c
    @@ -102,7 +102,7 @@ static unsigned char i8042_aux_irq_registered;
    static unsigned char i8042_suppress_kbd_ack;
    static struct platform_device *i8042_platform_device;

    -static irqreturn_t i8042_interrupt(int irq, void *dev_id);
    +static irqreturn_t i8042_interrupt(void *dev_id);

    /*
    * The i8042_wait_read() and i8042_wait_write functions wait for the i8042 to
    @@ -288,7 +288,7 @@ static void i8042_stop(struct serio *serio)
    * to the upper layers.
    */

    -static irqreturn_t i8042_interrupt(int irq, void *dev_id)
    +static irqreturn_t i8042_interrupt(void *dev_id)
    {
    struct i8042_port *port;
    unsigned long flags;
    @@ -296,6 +296,7 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id)
    unsigned int dfl;
    unsigned int port_no;
    int ret = 1;
    + int irq = get_irqfunc_irq();

    spin_lock_irqsave(&i8042_lock, flags);
    str = i8042_read_status();
    @@ -512,7 +513,7 @@ static int __devinit i8042_check_mux(void)
    static struct completion i8042_aux_irq_delivered __devinitdata;
    static int i8042_irq_being_tested __devinitdata;

    -static irqreturn_t __devinit i8042_aux_test_irq(int irq, void *dev_id)
    +static irqreturn_t __devinit i8042_aux_test_irq(void *dev_id)
    {
    unsigned long flags;
    unsigned char str, data;
    @@ -939,7 +940,7 @@ static int i8042_resume(struct platform_device *dev)
    if (i8042_ports[I8042_KBD_PORT_NO].serio)
    i8042_enable_kbd_port();

    - i8042_interrupt(0, NULL);
    + i8042_interrupt(NULL);

    dev->dev.power.power_state = PMSG_ON;

    diff --git a/drivers/isdn/act2000/act2000_isa.c b/drivers/isdn/act2000/act2000_isa.c
    index 09ea50d..a3756d9 100644
    --- a/drivers/isdn/act2000/act2000_isa.c
    +++ b/drivers/isdn/act2000/act2000_isa.c
    @@ -61,8 +61,9 @@ act2000_isa_detect(unsigned short portbase)
    }

    static irqreturn_t
    -act2000_isa_interrupt(int irq, void *dev_id)
    +act2000_isa_interrupt(void *dev_id)
    {
    + unsigned int irq = get_irqfunc_irq();
    act2000_card *card = dev_id;
    u_char istatus;

    diff --git a/drivers/isdn/hisax/amd7930_fn.c b/drivers/isdn/hisax/amd7930_fn.c
    index 3b19cae..0d9e8cb 100644
    --- a/drivers/isdn/hisax/amd7930_fn.c
    +++ b/drivers/isdn/hisax/amd7930_fn.c
    @@ -734,7 +734,7 @@ dbusy_timer_handler(struct IsdnCardState *cs)
    wByteAMD(cs, 0x21, 0x82);
    wByteAMD(cs, 0x21, 0x02);
    spin_unlock_irqrestore(&cs->lock, flags);
    - cs->irq_func(cs->irq, cs);
    + cs->irq_func(cs);

    if (cs->debug & L1_DEB_ISAC)
    debugl1(cs, "Amd7930: dbusy_timer_handler: Transmitter reset");
    diff --git a/drivers/isdn/hisax/hisax.h b/drivers/isdn/hisax/hisax.h
    index 34733c9..e8d429f 100644
    --- a/drivers/isdn/hisax/hisax.h
    +++ b/drivers/isdn/hisax/hisax.h
    @@ -925,7 +925,7 @@ struct IsdnCardState {
    int (*cardmsg) (struct IsdnCardState *, int, void *);
    void (*setstack_d) (struct PStack *, struct IsdnCardState *);
    void (*DC_Close) (struct IsdnCardState *);
    - int (*irq_func) (int, void *);
    + irq_handler_t irq_func;
    int (*auxcmd) (struct IsdnCardState *, isdn_ctrl *);
    struct Channel channel[2+MAX_WAITING_CALLS];
    struct BCState bcs[2+MAX_WAITING_CALLS];
    diff --git a/drivers/isdn/hisax/icc.c b/drivers/isdn/hisax/icc.c
    index 682cac3..b2ea701 100644
    --- a/drivers/isdn/hisax/icc.c
    +++ b/drivers/isdn/hisax/icc.c
    @@ -610,7 +610,7 @@ dbusy_timer_handler(struct IsdnCardState *cs)
    debugl1(cs, "D-Channel Busy no skb");
    }
    cs->writeisac(cs, ICC_CMDR, 0x01); /* Transmitter reset */
    - cs->irq_func(cs->irq, cs);
    + cs->irq_func(cs);
    }
    }
    }
    diff --git a/drivers/isdn/hisax/isac.c b/drivers/isdn/hisax/isac.c
    index 4e9f238..6b30b24 100644
    --- a/drivers/isdn/hisax/isac.c
    +++ b/drivers/isdn/hisax/isac.c
    @@ -611,7 +611,7 @@ dbusy_timer_handler(struct IsdnCardState *cs)
    debugl1(cs, "D-Channel Busy no skb");
    }
    cs->writeisac(cs, ISAC_CMDR, 0x01); /* Transmitter reset */
    - cs->irq_func(cs->irq, cs);
    + cs->irq_func(cs);
    }
    }
    }
    diff --git a/drivers/isdn/hisax/w6692.c b/drivers/isdn/hisax/w6692.c
    index 39129b9..470afc7 100644
    --- a/drivers/isdn/hisax/w6692.c
    +++ b/drivers/isdn/hisax/w6692.c
    @@ -402,7 +402,7 @@ W6692B_interrupt(struct IsdnCardState *cs, u_char bchan)
    }

    static irqreturn_t
    -W6692_interrupt(int intno, void *dev_id)
    +W6692_interrupt(void *dev_id)
    {
    struct IsdnCardState *cs = dev_id;
    u_char val, exval, v1;
    @@ -717,7 +717,7 @@ dbusy_timer_handler(struct IsdnCardState *cs)
    }
    cs->writeW6692(cs, W_D_CMDR, W_D_CMDR_XRST); /* Transmitter reset */
    spin_unlock_irqrestore(&cs->lock, flags);
    - cs->irq_func(cs->irq, cs);
    + cs->irq_func(cs);
    return;
    }
    }
    diff --git a/drivers/isdn/sc/interrupt.c b/drivers/isdn/sc/interrupt.c
    index bef7963..2a43e27 100644
    --- a/drivers/isdn/sc/interrupt.c
    +++ b/drivers/isdn/sc/interrupt.c
    @@ -35,12 +35,13 @@ static int get_card_from_irq(int irq)
    /*
    *
    */
    -irqreturn_t interrupt_handler(int interrupt, void *cardptr)
    +irqreturn_t interrupt_handler(void *cardptr)
    {

    RspMessage rcvmsg;
    int channel;
    int card;
    + unsigned int interrupt = get_irqfunc_irq();

    card = get_card_from_irq(interrupt);

    diff --git a/drivers/macintosh/via-macii.c b/drivers/macintosh/via-macii.c
    index 01b8eca..1c015b3 100644
    --- a/drivers/macintosh/via-macii.c
    +++ b/drivers/macintosh/via-macii.c
    @@ -80,7 +80,7 @@ static volatile unsigned char *via;

    static int macii_init_via(void);
    static void macii_start(void);
    -static irqreturn_t macii_interrupt(int irq, void *arg);
    +static irqreturn_t macii_interrupt(void *arg);
    static void macii_queue_poll(void);

    static int macii_probe(void);
    @@ -319,7 +319,7 @@ static inline int need_autopoll(void) {
    static void macii_poll(void)
    {
    disable_irq(IRQ_MAC_ADB);
    - macii_interrupt(0, NULL);
    + macii_interrupt(NULL);
    enable_irq(IRQ_MAC_ADB);
    }

    @@ -385,7 +385,7 @@ static void macii_start(void)
    * with the VIA shift register interrupt. /IRQ never actually interrupts the
    * processor, it's just an ordinary input.)
    */
    -static irqreturn_t macii_interrupt(int irq, void *arg)
    +static irqreturn_t macii_interrupt(void *arg)
    {
    int x;
    static int entered;
    diff --git a/drivers/macintosh/via-maciisi.c b/drivers/macintosh/via-maciisi.c
    index 2dc7880..a970f62 100644
    --- a/drivers/macintosh/via-maciisi.c
    +++ b/drivers/macintosh/via-maciisi.c
    @@ -83,7 +83,7 @@ static int maciisi_init(void);
    static int maciisi_send_request(struct adb_request* req, int sync);
    static void maciisi_sync(struct adb_request *req);
    static int maciisi_write(struct adb_request* req);
    -static irqreturn_t maciisi_interrupt(int irq, void* arg);
    +static irqreturn_t maciisi_interrupt(void* arg);
    static void maciisi_input(unsigned char *buf, int nb);
    static int maciisi_init_via(void);
    static void maciisi_poll(void);
    @@ -419,9 +419,8 @@ maciisi_poll(void)
    unsigned long flags;

    local_irq_save(flags);
    - if (via[IFR] & SR_INT) {
    - maciisi_interrupt(0, NULL);
    - }
    + if (via[IFR] & SR_INT)
    + maciisi_interrupt(NULL);
    else /* avoid calling this function too quickly in a loop */
    udelay(ADB_DELAY);

    @@ -432,7 +431,7 @@ maciisi_poll(void)
    register is either full or empty. In practice, I have no idea what
    it means :( */
    static irqreturn_t
    -maciisi_interrupt(int irq, void* arg)
    +maciisi_interrupt(void* arg)
    {
    int status;
    struct adb_request *req;
    diff --git a/drivers/macintosh/via-pmu68k.c b/drivers/macintosh/via-pmu68k.c
    index e2f84da..67b609d 100644
    --- a/drivers/macintosh/via-pmu68k.c
    +++ b/drivers/macintosh/via-pmu68k.c
    @@ -106,7 +106,7 @@ BLOCKING_NOTIFIER_HEAD(sleep_notifier_list);
    static int pmu_probe(void);
    static int pmu_init(void);
    static void pmu_start(void);
    -static irqreturn_t pmu_interrupt(int irq, void *arg);
    +static irqreturn_t pmu_interrupt(void *arg);
    static int pmu_send_request(struct adb_request *req, int sync);
    static int pmu_autopoll(int devs);
    void pmu_poll(void);
    @@ -219,7 +219,7 @@ pmu_init(void)
    }
    if (pmu_state == idle) {
    adb_int_pending = 1;
    - pmu_interrupt(0, NULL);
    + pmu_interrupt(NULL);
    }
    pmu_poll();
    udelay(10);
    @@ -560,17 +560,17 @@ pmu_poll(void)
    local_irq_save(flags);
    if (via1[IFR] & SR_INT) {
    via1[IFR] = SR_INT;
    - pmu_interrupt(IRQ_MAC_ADB_SR, NULL);
    + pmu_interrupt(NULL);
    }
    if (via1[IFR] & CB1_INT) {
    via1[IFR] = CB1_INT;
    - pmu_interrupt(IRQ_MAC_ADB_CL, NULL);
    + pmu_interrupt(NULL);
    }
    local_irq_restore(flags);
    }

    static irqreturn_t
    -pmu_interrupt(int irq, void *dev_id)
    +pmu_interrupt(void *dev_id)
    {
    struct adb_request *req;
    int timeout, bite = 0; /* to prevent compiler warning */
    diff --git a/drivers/media/video/planb.c b/drivers/media/video/planb.c
    index 0ef73d9..83796bd 100644
    --- a/drivers/media/video/planb.c
    +++ b/drivers/media/video/planb.c
    @@ -91,7 +91,7 @@ static void planb_close(struct video_device *);
    static int planb_ioctl(struct video_device *, unsigned int, void *);
    static int planb_init_done(struct video_device *);
    static int planb_mmap(struct video_device *, const char *, unsigned long);
    -static void planb_irq(int, void *);
    +static irqreturn_t planb_irq(void *);
    static void release_planb(void);
    int init_planbs(struct video_init *);

    @@ -1315,7 +1315,7 @@ cmd_tab_data_end:
    return c1;
    }

    -static void planb_irq(int irq, void *dev_id)
    +static irqreturn_t planb_irq(void *dev_id)
    {
    unsigned int stat, astat;
    struct planb *pb = (struct planb *)dev_id;
    @@ -1358,13 +1358,14 @@ static void planb_irq(int irq, void *dev_id)
    pb->frame_stat[fr] = GBUFFER_DONE;
    pb->grabbing--;
    wake_up_interruptible(&pb->capq);
    - return;
    + return IRQ_HANDLED;
    }
    /* incorrect interrupts? */
    pb->intr_mask = PLANB_CLR_IRQ;
    out_le32(&pb->planb_base->intr_stat, PLANB_CLR_IRQ);
    printk(KERN_ERR "PlanB: IRQ lockup, cleared intrrupts"
    " unconditionally\n");
    + return IRQ_HANDLED;
    }

    /*******************************
    diff --git a/drivers/net/eexpress.c b/drivers/net/eexpress.c
    index 9c85e50..627adbf 100644
    --- a/drivers/net/eexpress.c
    +++ b/drivers/net/eexpress.c
    @@ -248,7 +248,7 @@ static int eexp_close(struct net_device *dev);
    static void eexp_timeout(struct net_device *dev);
    static int eexp_xmit(struct sk_buff *buf, struct net_device *dev);

    -static irqreturn_t eexp_irq(int irq, void *dev_addr);
    +static irqreturn_t eexp_irq(void *dev_addr);
    static void eexp_set_multicast(struct net_device *dev);

    /*
    @@ -768,12 +768,13 @@ static void eexp_cmd_clear(struct net_device *dev)
    }
    }

    -static irqreturn_t eexp_irq(int irq, void *dev_info)
    +static irqreturn_t eexp_irq(void *dev_info)
    {
    struct net_device *dev = dev_info;
    struct net_local *lp;
    unsigned short ioaddr,status,ack_cmd;
    unsigned short old_read_ptr, old_write_ptr;
    + unsigned int irq = get_irqfunc_irq();

    lp = netdev_priv(dev);
    ioaddr = dev->base_addr;
    diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
    index cfbb7aa..2764f8d 100644
    --- a/drivers/net/forcedeth.c
    +++ b/drivers/net/forcedeth.c
    @@ -2977,7 +2977,7 @@ static void nv_link_irq(struct net_device *dev)
    dprintk(KERN_DEBUG "%s: link change notification done.\n", dev->name);
    }

    -static irqreturn_t nv_nic_irq(int foo, void *data)
    +static irqreturn_t nv_nic_irq(void *data)
    {
    struct net_device *dev = (struct net_device *) data;
    struct fe_priv *np = netdev_priv(dev);
    @@ -3092,7 +3092,7 @@ static irqreturn_t nv_nic_irq(int foo, void *data)
    * (reduce CPU and increase throughput). They use descripter version 3,
    * compiler directives, and reduce memory accesses.
    */
    -static irqreturn_t nv_nic_irq_optimized(int foo, void *data)
    +static irqreturn_t nv_nic_irq_optimized(void *data)
    {
    struct net_device *dev = (struct net_device *) data;
    struct fe_priv *np = netdev_priv(dev);
    @@ -3203,7 +3203,7 @@ static irqreturn_t nv_nic_irq_optimized(int foo, void *data)
    return IRQ_RETVAL(i);
    }

    -static irqreturn_t nv_nic_irq_tx(int foo, void *data)
    +static irqreturn_t nv_nic_irq_tx(void *data)
    {
    struct net_device *dev = (struct net_device *) data;
    struct fe_priv *np = netdev_priv(dev);
    @@ -3293,7 +3293,7 @@ static int nv_napi_poll(struct napi_struct *napi, int budget)
    #endif

    #ifdef CONFIG_FORCEDETH_NAPI
    -static irqreturn_t nv_nic_irq_rx(int foo, void *data)
    +static irqreturn_t nv_nic_irq_rx(void *data)
    {
    struct net_device *dev = (struct net_device *) data;
    struct fe_priv *np = netdev_priv(dev);
    @@ -3312,7 +3312,7 @@ static irqreturn_t nv_nic_irq_rx(int foo, void *data)
    return IRQ_HANDLED;
    }
    #else
    -static irqreturn_t nv_nic_irq_rx(int foo, void *data)
    +static irqreturn_t nv_nic_irq_rx(void *data)
    {
    struct net_device *dev = (struct net_device *) data;
    struct fe_priv *np = netdev_priv(dev);
    @@ -3360,7 +3360,7 @@ static irqreturn_t nv_nic_irq_rx(int foo, void *data)
    }
    #endif

    -static irqreturn_t nv_nic_irq_other(int foo, void *data)
    +static irqreturn_t nv_nic_irq_other(void *data)
    {
    struct net_device *dev = (struct net_device *) data;
    struct fe_priv *np = netdev_priv(dev);
    @@ -3433,7 +3433,7 @@ static irqreturn_t nv_nic_irq_other(int foo, void *data)
    return IRQ_RETVAL(i);
    }

    -static irqreturn_t nv_nic_irq_test(int foo, void *data)
    +static irqreturn_t nv_nic_irq_test(void *data)
    {
    struct net_device *dev = (struct net_device *) data;
    struct fe_priv *np = netdev_priv(dev);
    @@ -3495,7 +3495,7 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
    u8 __iomem *base = get_hwbase(dev);
    int ret = 1;
    int i;
    - irqreturn_t (*handler)(int foo, void *data);
    + irq_handler_t handler;

    if (intr_test) {
    handler = nv_nic_irq_test;
    @@ -3685,24 +3685,24 @@ static void nv_do_nic_poll(unsigned long data)

    if (!using_multi_irqs(dev)) {
    if (np->desc_ver == DESC_VER_3)
    - nv_nic_irq_optimized(0, dev);
    + nv_nic_irq_optimized(dev);
    else
    - nv_nic_irq(0, dev);
    + nv_nic_irq(dev);
    if (np->msi_flags & NV_MSI_X_ENABLED)
    enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector);
    else
    enable_irq_lockdep(dev->irq);
    } else {
    if (np->nic_poll_irq & NVREG_IRQ_RX_ALL) {
    - nv_nic_irq_rx(0, dev);
    + nv_nic_irq_rx(dev);
    enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector);
    }
    if (np->nic_poll_irq & NVREG_IRQ_TX_ALL) {
    - nv_nic_irq_tx(0, dev);
    + nv_nic_irq_tx(dev);
    enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector);
    }
    if (np->nic_poll_irq & NVREG_IRQ_OTHER) {
    - nv_nic_irq_other(0, dev);
    + nv_nic_irq_other(dev);
    enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_OTHER].vector);
    }
    }
    diff --git a/drivers/net/hamradio/scc.c b/drivers/net/hamradio/scc.c
    index 353d13e..18b56de 100644
    --- a/drivers/net/hamradio/scc.c
    +++ b/drivers/net/hamradio/scc.c
    @@ -201,7 +201,7 @@ static void z8530_init(void);

    static void init_channel(struct scc_channel *scc);
    static void scc_key_trx (struct scc_channel *scc, char tx);
    -static irqreturn_t scc_isr(int irq, void *dev_id);
    +static irqreturn_t scc_isr(void *dev_id);
    static void scc_init_timer(struct scc_channel *scc);

    static int scc_net_alloc(const char *name, struct scc_channel *scc);
    @@ -627,7 +627,7 @@ static void scc_isr_dispatch(struct scc_channel *scc, int vector)

    #define SCC_IRQTIMEOUT 30000

    -static irqreturn_t scc_isr(int irq, void *dev_id)
    +static irqreturn_t scc_isr(void *dev_id)
    {
    unsigned char vector;
    struct scc_channel *scc;
    @@ -665,7 +665,7 @@ static irqreturn_t scc_isr(int irq, void *dev_id)
    ctrl = SCC_ctrl;
    while (ctrl->chan_A)
    {
    - if (ctrl->irq != irq)
    + if (ctrl->irq != get_irqfunc_irq())
    {
    ctrl++;
    continue;
    diff --git a/drivers/net/irda/au1k_ir.c b/drivers/net/irda/au1k_ir.c
    index 4dbdfaa..f0e50bd 100644
    --- a/drivers/net/irda/au1k_ir.c
    +++ b/drivers/net/irda/au1k_ir.c
    @@ -51,7 +51,7 @@ static int au1k_irda_start(struct net_device *);
    static int au1k_irda_stop(struct net_device *dev);
    static int au1k_irda_hard_xmit(struct sk_buff *, struct net_device *);
    static int au1k_irda_rx(struct net_device *);
    -static void au1k_irda_interrupt(int, void *);
    +static irqreturn_t au1k_irda_interrupt(int, void *);
    static void au1k_tx_timeout(struct net_device *);
    static struct net_device_stats *au1k_irda_stats(struct net_device *);
    static int au1k_irda_ioctl(struct net_device *, struct ifreq *, int);
    @@ -627,19 +627,21 @@ static int au1k_irda_rx(struct net_device *dev)
    }


    -void au1k_irda_interrupt(int irq, void *dev_id)
    +irqreturn_t au1k_irda_interrupt(void *dev_id)
    {
    struct net_device *dev = (struct net_device *) dev_id;

    if (dev == NULL) {
    printk(KERN_ERR "%s: isr: null dev ptr\n", dev->name);
    - return;
    + return IRQ_NONE;
    }

    writel(0, IR_INT_CLEAR); /* ack irda interrupts */

    au1k_irda_rx(dev);
    au1k_tx_ack(dev);
    +
    + return IRQ_HANDLED;
    }


    diff --git a/drivers/net/irda/smsc-ircc2.c b/drivers/net/irda/smsc-ircc2.c
    index 7e7b582..f2a918e 100644
    --- a/drivers/net/irda/smsc-ircc2.c
    +++ b/drivers/net/irda/smsc-ircc2.c
    @@ -202,7 +202,7 @@ static void smsc_ircc_dma_xmit(struct smsc_ircc_cb *self, int bofs);
    static void smsc_ircc_dma_xmit_complete(struct smsc_ircc_cb *self);
    static void smsc_ircc_change_speed(struct smsc_ircc_cb *self, u32 speed);
    static void smsc_ircc_set_sir_speed(struct smsc_ircc_cb *self, u32 speed);
    -static irqreturn_t smsc_ircc_interrupt(int irq, void *dev_id);
    +static irqreturn_t smsc_ircc_interrupt(void *dev_id);
    static irqreturn_t smsc_ircc_interrupt_sir(struct net_device *dev);
    static void smsc_ircc_sir_start(struct smsc_ircc_cb *self);
    #if SMSC_IRCC2_C_SIR_STOP
    @@ -1505,7 +1505,7 @@ static void smsc_ircc_sir_receive(struct smsc_ircc_cb *self)
    * An interrupt from the chip has arrived. Time to do some work
    *
    */
    -static irqreturn_t smsc_ircc_interrupt(int irq, void *dev_id)
    +static irqreturn_t smsc_ircc_interrupt(void *dev_id)
    {
    struct net_device *dev = (struct net_device *) dev_id;
    struct smsc_ircc_cb *self;
    @@ -1514,7 +1514,7 @@ static irqreturn_t smsc_ircc_interrupt(int irq, void *dev_id)

    if (dev == NULL) {
    printk(KERN_WARNING "%s: irq %d for unknown device.\n",
    - driver_name, irq);
    + driver_name, get_irqfunc_irq());
    goto irq_ret;
    }

    diff --git a/drivers/net/irda/via-ircc.c b/drivers/net/irda/via-ircc.c
    index 126ec7c..d850c7d 100644
    --- a/drivers/net/irda/via-ircc.c
    +++ b/drivers/net/irda/via-ircc.c
    @@ -93,7 +93,7 @@ static int via_ircc_hard_xmit_fir(struct sk_buff *skb,
    struct net_device *dev);
    static void via_hw_init(struct via_ircc_cb *self);
    static void via_ircc_change_speed(struct via_ircc_cb *self, __u32 baud);
    -static irqreturn_t via_ircc_interrupt(int irq, void *dev_id);
    +static irqreturn_t via_ircc_interrupt(void *dev_id);
    static int via_ircc_is_receiving(struct via_ircc_cb *self);
    static int via_ircc_read_dongle_id(int iobase);

    @@ -1346,7 +1346,7 @@ static int RxTimerHandler(struct via_ircc_cb *self, int iobase)
    * An interrupt from the chip has arrived. Time to do some work
    *
    */
    -static irqreturn_t via_ircc_interrupt(int irq, void *dev_id)
    +static irqreturn_t via_ircc_interrupt(void *dev_id)
    {
    struct net_device *dev = (struct net_device *) dev_id;
    struct via_ircc_cb *self;
    @@ -1355,7 +1355,7 @@ static irqreturn_t via_ircc_interrupt(int irq, void *dev_id)

    if (!dev) {
    IRDA_WARNING("%s: irq %d for unknown device.\n", driver_name,
    - irq);
    + get_irqfunc_irq());
    return IRQ_NONE;
    }
    self = (struct via_ircc_cb *) dev->priv;
    diff --git a/drivers/net/lib82596.c b/drivers/net/lib82596.c
    index 9a855e5..ea4c6e3 100644
    --- a/drivers/net/lib82596.c
    +++ b/drivers/net/lib82596.c
    @@ -349,7 +349,7 @@ static const char init_setup[] =

    static int i596_open(struct net_device *dev);
    static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev);
    -static irqreturn_t i596_interrupt(int irq, void *dev_id);
    +static irqreturn_t i596_interrupt(void *dev_id);
    static int i596_close(struct net_device *dev);
    static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd);
    static void i596_tx_timeout (struct net_device *dev);
    diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c
    index a80f0cd..c506398 100644
    --- a/drivers/net/netxen/netxen_nic_main.c
    +++ b/drivers/net/netxen/netxen_nic_main.c
    @@ -68,7 +68,7 @@ static int netxen_nic_poll(struct napi_struct *napi, int budget);
    #ifdef CONFIG_NET_POLL_CONTROLLER
    static void netxen_nic_poll_controller(struct net_device *netdev);
    #endif
    -static irqreturn_t netxen_intr(int irq, void *data);
    +static irqreturn_t netxen_intr(void *data);

    int physical_port[] = {0, 1, 2, 3};

    @@ -1342,7 +1342,7 @@ static void netxen_nic_poll_controller(struct net_device *netdev)
    {
    struct netxen_adapter *adapter = netdev_priv(netdev);
    disable_irq(adapter->irq);
    - netxen_intr(adapter->irq, adapter);
    + netxen_intr(adapter);
    enable_irq(adapter->irq);
    }
    #endif
    diff --git a/drivers/net/pcmcia/fmvj18x_cs.c b/drivers/net/pcmcia/fmvj18x_cs.c
    index 6284467..8076d5b 100644
    --- a/drivers/net/pcmcia/fmvj18x_cs.c
    +++ b/drivers/net/pcmcia/fmvj18x_cs.c
    @@ -97,7 +97,7 @@ static int fjn_config(struct net_device *dev, struct ifmap *map);
    static int fjn_open(struct net_device *dev);
    static int fjn_close(struct net_device *dev);
    static int fjn_start_xmit(struct sk_buff *skb, struct net_device *dev);
    -static irqreturn_t fjn_interrupt(int irq, void *dev_id);
    +static irqreturn_t fjn_interrupt(void *dev_id);
    static void fjn_rx(struct net_device *dev);
    static void fjn_reset(struct net_device *dev);
    static struct net_device_stats *fjn_get_stats(struct net_device *dev);
    @@ -731,7 +731,7 @@ module_exit(exit_fmvj18x_cs);

    /*====================================================================*/

    -static irqreturn_t fjn_interrupt(int irq, void *dev_id)
    +static irqreturn_t fjn_interrupt(void *dev_id)
    {
    struct net_device *dev = dev_id;
    local_info_t *lp = netdev_priv(dev);
    @@ -740,7 +740,7 @@ static irqreturn_t fjn_interrupt(int irq, void *dev_id)

    if (lp == NULL) {
    printk(KERN_NOTICE "fjn_interrupt(): irq %d for "
    - "unknown device.\n", irq);
    + "unknown device.\n", get_irqfunc_irq());
    return IRQ_NONE;
    }
    ioaddr = dev->base_addr;
    diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
    index 9bc1177..f985fcd 100644
    --- a/drivers/net/phy/phy.c
    +++ b/drivers/net/phy/phy.c
    @@ -551,7 +551,7 @@ void phy_error(struct phy_device *phydev)
    * Description: When a PHY interrupt occurs, the handler disables
    * interrupts, and schedules a work task to clear the interrupt.
    */
    -static irqreturn_t phy_interrupt(int irq, void *phy_dat)
    +static irqreturn_t phy_interrupt(void *phy_dat)
    {
    struct phy_device *phydev = phy_dat;

    @@ -562,7 +562,7 @@ static irqreturn_t phy_interrupt(int irq, void *phy_dat)
    * context, so we need to disable the irq here. A work
    * queue will write the PHY to disable and clear the
    * interrupt, and then reenable the irq line. */
    - disable_irq_nosync(irq);
    + disable_irq_nosync(phydev->irq);
    atomic_inc(&phydev->irq_disable);

    schedule_work(&phydev->phy_queue);
    diff --git a/drivers/net/wan/sdla.c b/drivers/net/wan/sdla.c
    index 05df0a3..f15ef66 100644
    --- a/drivers/net/wan/sdla.c
    +++ b/drivers/net/wan/sdla.c
    @@ -867,7 +867,7 @@ static void sdla_receive(struct net_device *dev)
    spin_unlock_irqrestore(&sdla_lock, flags);
    }

    -static irqreturn_t sdla_isr(int irq, void *dev_id)
    +static irqreturn_t sdla_isr(void *dev_id)
    {
    struct net_device *dev;
    struct frad_local *flp;
    @@ -879,7 +879,8 @@ static irqreturn_t sdla_isr(int irq, void *dev_id)

    if (!flp->initialized)
    {
    - printk(KERN_WARNING "%s: irq %d for uninitialized device.\n", dev->name, irq);
    + printk(KERN_WARNING "%s: irq %d for uninitialized device.\n",
    + dev->name, get_irqfunc_irq());
    return IRQ_NONE;
    }

    diff --git a/drivers/pcmcia/i82365.c b/drivers/pcmcia/i82365.c
    index 839bb1c..d4a529d 100644
    --- a/drivers/pcmcia/i82365.c
    +++ b/drivers/pcmcia/i82365.c
    @@ -79,7 +79,7 @@ module_param(pc_debug, int, 0644);
    #define debug(lvl, fmt, arg...) do { } while (0)
    #endif

    -static irqreturn_t i365_count_irq(int, void *);
    +static irqreturn_t i365_count_irq(void *);
    static inline int _check_irq(int irq, int flags)
    {
    if (request_irq(irq, i365_count_irq, flags, "x", i365_count_irq) != 0)
    @@ -497,11 +497,11 @@ static u_int __init set_bridge_opts(u_short s, u_short ns)
    static volatile u_int irq_hits;
    static u_short irq_sock;

    -static irqreturn_t i365_count_irq(int irq, void *dev)
    +static irqreturn_t i365_count_irq(void *dev)
    {
    i365_get(irq_sock, I365_CSC);
    irq_hits++;
    - debug(2, "-> hit on irq %d\n", irq);
    + debug(2, "-> hit on irq %d\n", get_irqfunc_irq());
    return IRQ_HANDLED;
    }

    @@ -847,14 +847,15 @@ static void __init isa_probe(void)

    /*====================================================================*/

    -static irqreturn_t pcic_interrupt(int irq, void *dev)
    +static irqreturn_t pcic_interrupt(void *dev)
    {
    int i, j, csc;
    u_int events, active;
    u_long flags = 0;
    int handled = 0;
    + unsigned int irq = get_irqfunc_irq();

    - debug(4, "pcic_interrupt(%d)\n", irq);
    + debug(4, "pcic_interrupt(%u)\n", irq);

    for (j = 0; j < 20; j++) {
    active = 0;
    @@ -896,7 +897,7 @@ static irqreturn_t pcic_interrupt(int irq, void *dev)

    static void pcic_interrupt_wrapper(u_long data)
    {
    - pcic_interrupt(0, NULL);
    + pcic_interrupt(NULL);
    poll_timer.expires = jiffies + poll_interval;
    add_timer(&poll_timer);
    }
    diff --git a/drivers/pcmcia/tcic.c b/drivers/pcmcia/tcic.c
    index 749ac37..8b0b73e 100644
    --- a/drivers/pcmcia/tcic.c
    +++ b/drivers/pcmcia/tcic.c
    @@ -116,7 +116,7 @@ module_param(cycle_time, int, 0444);

    /*====================================================================*/

    -static irqreturn_t tcic_interrupt(int irq, void *dev);
    +static irqreturn_t tcic_interrupt(void *dev);
    static void tcic_timer(u_long data);
    static struct pccard_operations tcic_operations;

    @@ -218,7 +218,7 @@ static int to_cycles(int ns)

    static volatile u_int irq_hits;

    -static irqreturn_t __init tcic_irq_count(int irq, void *dev)
    +static irqreturn_t __init tcic_irq_count(void *dev)
    {
    irq_hits++;
    return IRQ_HANDLED;
    @@ -505,7 +505,7 @@ static int __init init_tcic(void)
    }

    /* jump start interrupt handler, if needed */
    - tcic_interrupt(0, NULL);
    + tcic_interrupt(NULL);

    platform_device_register(&tcic_device);

    @@ -547,7 +547,7 @@ static void __exit exit_tcic(void)

    /*====================================================================*/

    -static irqreturn_t tcic_interrupt(int irq, void *dev)
    +static irqreturn_t tcic_interrupt(void *dev)
    {
    int i, quick = 0;
    u_char latch, sstat;
    @@ -606,7 +606,7 @@ static void tcic_timer(u_long data)
    {
    debug(2, "tcic_timer()\n");
    tcic_timer_pending = 0;
    - tcic_interrupt(0, NULL);
    + tcic_interrupt(NULL);
    } /* tcic_timer */

    /*====================================================================*/
    diff --git a/drivers/rtc/rtc-ds1374.c b/drivers/rtc/rtc-ds1374.c
    index 45bda18..c24c733 100644
    --- a/drivers/rtc/rtc-ds1374.c
    +++ b/drivers/rtc/rtc-ds1374.c
    @@ -257,10 +257,11 @@ out:
    return ret;
    }

    -static irqreturn_t ds1374_irq(int irq, void *dev_id)
    +static irqreturn_t ds1374_irq(void *dev_id)
    {
    struct i2c_client *client = dev_id;
    struct ds1374 *ds1374 = i2c_get_clientdata(client);
    + int irq = get_irqfunc_irq();

    disable_irq_nosync(irq);
    schedule_work(&ds1374->work);
    diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c
    index 988f0bc..c310438 100644
    --- a/drivers/scsi/NCR5380.c
    +++ b/drivers/scsi/NCR5380.c
    @@ -558,9 +558,9 @@ static int probe_irq __initdata = 0;
    * used by the IRQ probe code.
    */

    -static irqreturn_t __init probe_intr(int irq, void *dev_id)
    +static irqreturn_t __init probe_intr(void *dev_id)
    {
    - probe_irq = irq;
    + probe_irq = get_irqfunc_irq();
    return IRQ_HANDLED;
    }

    @@ -1158,7 +1158,7 @@ static void NCR5380_main(struct work_struct *work)
    * Locks: takes the needed instance locks
    */

    -static irqreturn_t NCR5380_intr(int irq, void *dev_id)
    +static irqreturn_t NCR5380_intr(void *dev_id)
    {
    NCR5380_local_declare();
    struct Scsi_Host *instance = (struct Scsi_Host *)dev_id;
    diff --git a/drivers/scsi/NCR53C9x.c b/drivers/scsi/NCR53C9x.c
    index 96e8e29..c46e4d7 100644
    --- a/drivers/scsi/NCR53C9x.c
    +++ b/drivers/scsi/NCR53C9x.c
    @@ -98,7 +98,7 @@ int nesps = 0, esps_in_use = 0, esps_running = 0;
    EXPORT_SYMBOL(nesps);
    EXPORT_SYMBOL(esps_running);

    -irqreturn_t esp_intr(int irq, void *dev_id);
    +irqreturn_t esp_intr(void *dev_id);

    /* Debugging routines */
    static struct esp_cmdstrings {
    @@ -3543,12 +3543,13 @@ state_machine:
    EXPORT_SYMBOL(esp_handle);

    #ifndef CONFIG_SMP
    -irqreturn_t esp_intr(int irq, void *dev_id)
    +irqreturn_t esp_intr(void *dev_id)
    {
    struct NCR_ESP *esp;
    unsigned long flags;
    int again;
    struct Scsi_Host *dev = dev_id;
    + unsigned int irq = get_irqfunc_irq();

    /* Handle all ESP interrupts showing at this IRQ level. */
    spin_lock_irqsave(dev->host_lock, flags);
    @@ -3580,7 +3581,7 @@ repeat:
    }
    #else
    /* For SMP we only service one ESP on the list list at our IRQ level! */
    -irqreturn_t esp_intr(int irq, void *dev_id)
    +irqreturn_t esp_intr(void *dev_id)
    {
    struct NCR_ESP *esp;
    unsigned long flags;
    diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c
    index 973778a..6609bfe 100644
    --- a/drivers/scsi/aha152x.c
    +++ b/drivers/scsi/aha152x.c
    @@ -675,7 +675,7 @@ static struct {
    };

    /* setup & interrupt */
    -static irqreturn_t intr(int irq, void *dev_id);
    +static irqreturn_t intr(void *dev_id);
    static void reset_ports(struct Scsi_Host *shpnt);
    static void aha152x_error(struct Scsi_Host *shpnt, char *msg);
    static void done(struct Scsi_Host *shpnt, int error);
    @@ -759,7 +759,7 @@ static inline Scsi_Cmnd *remove_SC(Scsi_Cmnd **SC, Scsi_Cmnd *SCp)
    return ptr;
    }

    -static irqreturn_t swintr(int irqno, void *dev_id)
    +static irqreturn_t swintr(void *dev_id)
    {
    struct Scsi_Host *shpnt = dev_id;

    diff --git a/drivers/scsi/aha1542.c b/drivers/scsi/aha1542.c
    index 961a188..770d88a 100644
    --- a/drivers/scsi/aha1542.c
    +++ b/drivers/scsi/aha1542.c
    @@ -174,7 +174,7 @@ static DEFINE_SPINLOCK(aha1542_lock);
    static void setup_mailboxes(int base_io, struct Scsi_Host *shpnt);
    static int aha1542_restart(struct Scsi_Host *shost);
    static void aha1542_intr_handle(struct Scsi_Host *shost, void *dev_id);
    -static irqreturn_t do_aha1542_intr_handle(int irq, void *dev_id);
    +static irqreturn_t do_aha1542_intr_handle(void *dev_id);

    #define aha1542_intr_reset(base) outb(IRST, CONTROL(base))

    @@ -414,10 +414,11 @@ fail:
    }

    /* A quick wrapper for do_aha1542_intr_handle to grab the spin lock */
    -static irqreturn_t do_aha1542_intr_handle(int irq, void *dev_id)
    +static irqreturn_t do_aha1542_intr_handle(void *dev_id)
    {
    unsigned long flags;
    struct Scsi_Host *shost;
    + unsigned int irq = get_irqfunc_irq();

    shost = aha_host[irq - 9];
    if (!shost)
    diff --git a/drivers/scsi/eata.c b/drivers/scsi/eata.c
    index 7ead521..650ef10 100644
    --- a/drivers/scsi/eata.c
    +++ b/drivers/scsi/eata.c
    @@ -876,7 +876,7 @@ static unsigned long io_port[] = {
    /* But transfer orientation from the 16 bit data register is Little Endian */
    #define REG2H(x) le16_to_cpu(x)

    -static irqreturn_t do_interrupt_handler(int, void *);
    +static irqreturn_t do_interrupt_handler(void *);
    static void flush_dev(struct scsi_device *, unsigned long, struct hostdata *,
    unsigned int);
    static int do_trace = 0;
    @@ -2287,17 +2287,18 @@ static void flush_dev(struct scsi_device *dev, unsigned long cursec,
    }
    }

    -static irqreturn_t ihdlr(int irq, struct Scsi_Host *shost)
    +static irqreturn_t ihdlr(struct Scsi_Host *shost)
    {
    struct scsi_cmnd *SCpnt;
    unsigned int i, k, c, status, tstatus, reg;
    struct mssp *spp;
    struct mscp *cpp;
    struct hostdata *ha = (struct hostdata *)shost->hostdata;
    + int irq = get_irqfunc_irq();

    - if (shost->irq != irq)
    - panic("%s: ihdlr, irq %d, shost->irq %d.\n", ha->board_name, irq,
    - shost->irq);
    + if (shost->irq != get_irqfunc_irq())
    + panic("%s: ihdlr, irq %d, shost->irq %d.\n", ha->board_name,
    + irq, shost->irq);

    /* Check if this board need to be serviced */
    if (!(inb(shost->io_port + REG_AUX_STATUS) & IRQ_ASSERTED))
    @@ -2306,8 +2307,8 @@ static irqreturn_t ihdlr(int irq, struct Scsi_Host *shost)
    ha->iocount++;

    if (do_trace)
    - printk("%s: ihdlr, enter, irq %d, count %d.\n", ha->board_name, irq,
    - ha->iocount);
    + printk("%s: ihdlr, enter, irq %d, count %d.\n", ha->board_name,
    + irq, ha->iocount);

    /* Check if this board is still busy */
    if (wait_on_busy(shost->io_port, 20 * MAXLOOP)) {
    @@ -2536,7 +2537,7 @@ static irqreturn_t ihdlr(int irq, struct Scsi_Host *shost)
    return IRQ_NONE;
    }

    -static irqreturn_t do_interrupt_handler(int irq, void *shap)
    +static irqreturn_t do_interrupt_handler(void *shap)
    {
    struct Scsi_Host *shost;
    unsigned int j;
    @@ -2549,7 +2550,7 @@ static irqreturn_t do_interrupt_handler(int irq, void *shap)
    shost = sh[j];

    spin_lock_irqsave(shost->host_lock, spin_flags);
    - ret = ihdlr(irq, shost);
    + ret = ihdlr(shost);
    spin_unlock_irqrestore(shost->host_lock, spin_flags);
    return ret;
    }
    diff --git a/drivers/scsi/psi240i.c b/drivers/scsi/psi240i.c
    index 899e89d..a22796f 100644
    --- a/drivers/scsi/psi240i.c
    +++ b/drivers/scsi/psi240i.c
    @@ -245,13 +245,12 @@ static ULONG DecodeError (struct Scsi_Host *pshost, UCHAR status)
    *
    * Description: Interrupt handler.
    *
    - * Parameters: irq - Hardware IRQ number.
    - * dev_id -
    + * Parameters: dev_id - instance structure
    *
    * Returns: TRUE if drive is not ready in time.
    *
    ****************************************************************/
    -static void Irq_Handler (int irq, void *dev_id)
    +static void Irq_Handler (void *dev_id)
    {
    struct Scsi_Host *shost; // Pointer to host data block
    PADAPTER240I padapter; // Pointer to adapter control structure
    @@ -259,6 +258,7 @@ static void Irq_Handler (int irq, void *dev_id)
    struct scsi_cmnd *SCpnt;
    UCHAR status;
    int z;
    + unsigned int irq = get_irqfunc_irq();

    DEB(printk ("\npsi240i received interrupt\n"));

    @@ -367,13 +367,13 @@ irqerror:;
    SCpnt->scsi_done (SCpnt);
    }

    -static irqreturn_t do_Irq_Handler (int irq, void *dev_id)
    +static irqreturn_t do_Irq_Handler (void *dev_id)
    {
    unsigned long flags;
    struct Scsi_Host *dev = dev_id;

    spin_lock_irqsave(dev->host_lock, flags);
    - Irq_Handler(irq, dev_id);
    + Irq_Handler(dev_id);
    spin_unlock_irqrestore(dev->host_lock, flags);
    return IRQ_HANDLED;
    }
    diff --git a/drivers/scsi/sym53c416.c b/drivers/scsi/sym53c416.c
    index 8befab7..079c525 100644
    --- a/drivers/scsi/sym53c416.c
    +++ b/drivers/scsi/sym53c416.c
    @@ -325,7 +325,7 @@ static __inline__ unsigned int sym53c416_write(int base, unsigned char *buffer,
    return orig_len - len;
    }

    -static irqreturn_t sym53c416_intr_handle(int irq, void *dev_id)
    +static irqreturn_t sym53c416_intr_handle(void *dev_id)
    {
    struct Scsi_Host *dev = dev_id;
    int base = 0;
    @@ -334,6 +334,7 @@ static irqreturn_t sym53c416_intr_handle(int irq, void *dev_id)
    unsigned char status_reg, pio_int_reg, int_reg;
    struct scatterlist *sg;
    unsigned int tot_trans = 0;
    + unsigned int irq = get_irqfunc_irq();

    /* We search the base address of the host adapter which caused the interrupt */
    /* FIXME: should pass dev_id sensibly as hosts[i] */
    diff --git a/drivers/scsi/u14-34f.c b/drivers/scsi/u14-34f.c
    index 7edd6ce..ad20bba 100644
    --- a/drivers/scsi/u14-34f.c
    +++ b/drivers/scsi/u14-34f.c
    @@ -635,7 +635,7 @@ static unsigned long io_port[] = {
    #define H2DEV(x) cpu_to_le32(x)
    #define DEV2H(x) le32_to_cpu(x)

    -static irqreturn_t do_interrupt_handler(int, void *);
    +static irqreturn_t do_interrupt_handler(void *);
    static void flush_dev(struct scsi_device *, unsigned long, unsigned int, unsigned int);
    static int do_trace = FALSE;
    static int setup_done = FALSE;
    @@ -1716,10 +1716,11 @@ static void flush_dev(struct scsi_device *dev, unsigned long cursec, unsigned in

    }

    -static irqreturn_t ihdlr(int irq, unsigned int j) {
    +static irqreturn_t ihdlr(unsigned int j) {
    struct scsi_cmnd *SCpnt;
    unsigned int i, k, c, status, tstatus, reg, ret;
    struct mscp *spp, *cpp;
    + unsigned int irq = get_irqfunc_irq();

    if (sh[j]->irq != irq)
    panic("%s: ihdlr, irq %d, sh[j]->irq %d.\n", BN(j), irq, sh[j]->irq);
    @@ -1927,16 +1928,17 @@ none:
    return IRQ_NONE;
    }

    -static irqreturn_t do_interrupt_handler(int irq, void *shap) {
    +static irqreturn_t do_interrupt_handler(void *shap) {
    unsigned int j;
    unsigned long spin_flags;
    irqreturn_t ret;

    /* Check if the interrupt must be processed by this handler */
    - if ((j = (unsigned int)((char *)shap - sha)) >= num_boards) return IRQ_NONE;
    + if ((j = (unsigned int)((char *)shap - sha)) >= num_boards)
    + return IRQ_NONE;

    spin_lock_irqsave(sh[j]->host_lock, spin_flags);
    - ret = ihdlr(irq, j);
    + ret = ihdlr(j);
    spin_unlock_irqrestore(sh[j]->host_lock, spin_flags);
    return ret;
    }
    diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
    index f94109c..88ed53d 100644
    --- a/drivers/serial/8250.c
    +++ b/drivers/serial/8250.c
    @@ -1451,7 +1451,7 @@ serial8250_handle_port(struct uart_8250_port *up)
    * This means we need to loop through all ports. checking that they
    * don't have an interrupt pending.
    */
    -static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
    +static irqreturn_t serial8250_interrupt(void *dev_id)
    {
    struct irq_info *i = dev_id;
    struct list_head *l, *end = NULL;
    @@ -1496,7 +1496,7 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
    if (l == i->head && pass_counter++ > PASS_LIMIT) {
    /* If we hit this, we're dead. */
    printk(KERN_ERR "serial8250: too much work for "
    - "irq%d\n", irq);
    + "irq%d\n", get_irqfunc_irq());
    break;
    }
    } while (l != end);
    diff --git a/include/linux/uio_driver.h b/include/linux/uio_driver.h
    index 44c28e9..6813285 100644
    --- a/include/linux/uio_driver.h
    +++ b/include/linux/uio_driver.h
    @@ -60,7 +60,8 @@ struct uio_info {
    long irq;
    unsigned long irq_flags;
    void *priv;
    - irqreturn_t (*handler)(int irq, struct uio_info *dev_info);
    +
    + irq_handler_t handler;
    int (*mmap)(struct uio_info *info, struct vm_area_struct *vma);
    int (*open)(struct uio_info *info, struct inode *inode);
    int (*release)(struct uio_info *info, struct inode *inode);
    diff --git a/sound/drivers/mts64.c b/sound/drivers/mts64.c
    index dcc90f9..4990b35 100644
    --- a/sound/drivers/mts64.c
    +++ b/sound/drivers/mts64.c
    @@ -853,6 +853,8 @@ static void snd_mts64_interrupt(void *private)
    }
    __out:
    spin_unlock(&mts->lock);
    +
    + return IRQ_HANDLED;
    }

    static int __devinit snd_mts64_probe_port(struct parport *p)
    diff --git a/sound/drivers/portman2x4.c b/sound/drivers/portman2x4.c
    index e065b2a..7e4ac0b 100644
    --- a/sound/drivers/portman2x4.c
    +++ b/sound/drivers/portman2x4.c
    @@ -645,6 +645,8 @@ static void snd_portman_interrupt(void *userdata)
    }

    spin_unlock(&pm->reg_lock);
    +
    + return IRQ_HANDLED;
    }

    static int __devinit snd_portman_probe_port(struct parport *p)
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-10-19 10:03    [W:0.129 / U:95.164 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site