From 87282629978bb98aeb5b4a1ceb3146d8c1bd5dc8 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Thu, 24 Apr 2003 08:59:05 -0700 Subject: [PATCH] [PATCH] various irqreturn_t fixes Basically a mop-up of missed bits. Also fix various warnings and compilation errors. --- drivers/input/mouse/pc110pad.c | 3 ++- drivers/isdn/hisax/isurf.c | 3 ++- drivers/media/video/saa7134/saa7134-core.c | 6 ++++-- drivers/media/video/zr36067.c | 7 +++++-- drivers/net/tokenring/tms380tr.c | 9 +++++---- drivers/net/tokenring/tms380tr.h | 4 +++- drivers/net/wan/c101.c | 3 ++- drivers/net/wan/farsync.c | 5 +++-- drivers/net/wan/hd6457x.c | 5 ++++- drivers/net/wan/n2.c | 3 ++- drivers/net/wan/z85230.c | 5 +++-- drivers/net/wan/z85230.h | 3 ++- 12 files changed, 37 insertions(+), 19 deletions(-) diff --git a/drivers/input/mouse/pc110pad.c b/drivers/input/mouse/pc110pad.c index f9a3d9eebff2e..910e03593aee5 100644 --- a/drivers/input/mouse/pc110pad.c +++ b/drivers/input/mouse/pc110pad.c @@ -71,7 +71,8 @@ static irqreturn_t pc110pad_interrupt(int irq, void *ptr, struct pt_regs *regs) pc110pad_data[pc110pad_count++] = value; - if (pc110pad_count < 3) return; + if (pc110pad_count < 3) + return IRQ_HANDLED; input_regs(&pc110pad_dev, regs); input_report_key(&pc110pad_dev, BTN_TOUCH, diff --git a/drivers/isdn/hisax/isurf.c b/drivers/isdn/hisax/isurf.c index a9baa4443d81d..4408791b6c027 100644 --- a/drivers/isdn/hisax/isurf.c +++ b/drivers/isdn/hisax/isurf.c @@ -94,7 +94,7 @@ static struct bc_hw_ops isar_ops = { .write_reg = WriteISAR, }; -static void +static irqreturn_t isurf_interrupt(int intno, void *dev_id, struct pt_regs *regs) { struct IsdnCardState *cs = dev_id; @@ -130,6 +130,7 @@ isurf_interrupt(int intno, void *dev_id, struct pt_regs *regs) writeb(0, cs->hw.isurf.isac + ISAC_MASK);mb(); writeb(ISAR_IRQMSK, cs->hw.isurf.isar + ISAR_IRQBIT); mb(); spin_unlock(&cs->lock); + return IRQ_HANDLED; } static void diff --git a/drivers/media/video/saa7134/saa7134-core.c b/drivers/media/video/saa7134/saa7134-core.c index e88367522cdb4..4fbd9acc03cbc 100644 --- a/drivers/media/video/saa7134/saa7134-core.c +++ b/drivers/media/video/saa7134/saa7134-core.c @@ -532,7 +532,7 @@ static void print_irqstatus(struct saa7134_dev *dev, int loop, printk("\n"); } -static void saa7134_irq(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t saa7134_irq(int irq, void *dev_id, struct pt_regs *regs) { struct saa7134_dev *dev = (struct saa7134_dev*) dev_id; unsigned long report,status; @@ -546,7 +546,7 @@ static void saa7134_irq(int irq, void *dev_id, struct pt_regs *regs) if (irq_debug > 1) printk(KERN_DEBUG "%s/irq: no (more) work\n", dev->name); - return; + goto out; } if (irq_debug) print_irqstatus(dev,loop,report,status); @@ -582,6 +582,8 @@ static void saa7134_irq(int irq, void *dev_id, struct pt_regs *regs) saa_writel(SAA7134_IRQ1,0); saa_writel(SAA7134_IRQ2,0); } +out: + return IRQ_HANDLED; } /* ------------------------------------------------------------------ */ diff --git a/drivers/media/video/zr36067.c b/drivers/media/video/zr36067.c index 9786992551d05..44b1c2ffca9a3 100644 --- a/drivers/media/video/zr36067.c +++ b/drivers/media/video/zr36067.c @@ -2780,12 +2780,13 @@ static void error_handler(struct zoran *zr, u32 astat, u32 stat) } } -static void zoran_irq(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t zoran_irq(int irq, void *dev_id, struct pt_regs *regs) { u32 stat, astat; int count; struct zoran *zr; unsigned long flags; + int handled = 0; zr = (struct zoran *) dev_id; count = 0; @@ -2804,7 +2805,7 @@ static void zoran_irq(int irq, void *dev_id, struct pt_regs *regs) } zr->last_isr = stat; spin_unlock_irqrestore(&zr->lock, flags); - return; + return IRQ_HANDLED; } spin_lock_irqsave(&zr->lock, flags); @@ -2815,6 +2816,7 @@ static void zoran_irq(int irq, void *dev_id, struct pt_regs *regs) if (!astat) { break; } + handled = 1; if (astat & cardvsync[zr->card]) { // SW if (zr->codec_mode == BUZ_MODE_MOTION_DECOMPRESS @@ -3008,6 +3010,7 @@ static void zoran_irq(int irq, void *dev_id, struct pt_regs *regs) zr->last_isr = stat; } spin_unlock_irqrestore(&zr->lock, flags); + return IRQ_RETVAL(handled); } /* Check a zoran_params struct for correctness, insert default params */ diff --git a/drivers/net/tokenring/tms380tr.c b/drivers/net/tokenring/tms380tr.c index 5e7d163a2359b..e1062b3d654b0 100644 --- a/drivers/net/tokenring/tms380tr.c +++ b/drivers/net/tokenring/tms380tr.c @@ -152,7 +152,6 @@ static int tms380tr_init_card(struct net_device *dev); static void tms380tr_init_ipb(struct net_local *tp); static void tms380tr_init_net_local(struct net_device *dev); static void tms380tr_init_opb(struct net_device *dev); -void tms380tr_interrupt(int irq, void *dev_id, struct pt_regs *regs); /* "M" */ /* "O" */ int tms380tr_open(struct net_device *dev); @@ -780,15 +779,16 @@ static void tms380tr_timer_chk(unsigned long data) /* * The typical workload of the driver: Handle the network interface interrupts. */ -void tms380tr_interrupt(int irq, void *dev_id, struct pt_regs *regs) +irqreturn_t tms380tr_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct net_device *dev = dev_id; struct net_local *tp; unsigned short irq_type; + int handled = 0; if(dev == NULL) { printk(KERN_INFO "%s: irq %d for unknown device.\n", dev->name, irq); - return; + return IRQ_NONE; } tp = (struct net_local *)dev->priv; @@ -796,6 +796,7 @@ void tms380tr_interrupt(int irq, void *dev_id, struct pt_regs *regs) irq_type = SIFREADW(SIFSTS); while(irq_type & STS_SYSTEM_IRQ) { + handled = 1; irq_type &= STS_IRQ_MASK; if(!tms380tr_chk_ssb(tp, irq_type)) { @@ -870,7 +871,7 @@ void tms380tr_interrupt(int irq, void *dev_id, struct pt_regs *regs) irq_type = SIFREADW(SIFSTS); } - return; + return IRQ_RETVAL(handled); } /* diff --git a/drivers/net/tokenring/tms380tr.h b/drivers/net/tokenring/tms380tr.h index 5953dbb3beba0..1b55d2a7a71d7 100644 --- a/drivers/net/tokenring/tms380tr.h +++ b/drivers/net/tokenring/tms380tr.h @@ -11,10 +11,12 @@ #ifdef __KERNEL__ +#include + /* module prototypes */ int tms380tr_open(struct net_device *dev); int tms380tr_close(struct net_device *dev); -void tms380tr_interrupt(int irq, void *dev_id, struct pt_regs *regs); +irqreturn_t tms380tr_interrupt(int irq, void *dev_id, struct pt_regs *regs); int tmsdev_init(struct net_device *dev, unsigned long dmalimit, struct pci_dev *pdev); void tmsdev_term(struct net_device *dev); diff --git a/drivers/net/wan/c101.c b/drivers/net/wan/c101.c index 5995756d10161..1061d32b70dc5 100644 --- a/drivers/net/wan/c101.c +++ b/drivers/net/wan/c101.c @@ -155,11 +155,12 @@ static int c101_open(struct net_device *dev) { hdlc_device *hdlc = dev_to_hdlc(dev); port_t *port = hdlc_to_port(hdlc); + int result; if (!try_module_get(THIS_MODULE)) return -EFAULT; /* rmmod in progress */ - int result = hdlc_open(hdlc); + result = hdlc_open(hdlc); if (result) { return result; module_put(THIS_MODULE); diff --git a/drivers/net/wan/farsync.c b/drivers/net/wan/farsync.c index e583a6a4082e2..bd546eedec506 100644 --- a/drivers/net/wan/farsync.c +++ b/drivers/net/wan/farsync.c @@ -772,7 +772,7 @@ fst_intr_rx ( struct fst_card_info *card, struct fst_port_info *port ) * The interrupt service routine * Dev_id is our fst_card_info pointer */ -static void +static irqreturn_t fst_intr ( int irq, void *dev_id, struct pt_regs *regs ) { struct fst_card_info *card; @@ -785,7 +785,7 @@ fst_intr ( int irq, void *dev_id, struct pt_regs *regs ) if (( card = dev_id ) == NULL ) { dbg ( DBG_INTR,"intr: spurious %d\n", irq ); - return; + return IRQ_NONE; } dbg ( DBG_INTR,"intr: %d %p\n", irq, card ); @@ -882,6 +882,7 @@ fst_intr ( int irq, void *dev_id, struct pt_regs *regs ) } spin_unlock ( &card->card_lock ); + return IRQ_HANDLED; } diff --git a/drivers/net/wan/hd6457x.c b/drivers/net/wan/hd6457x.c index 110ae6c03a3be..f85ae029f419e 100644 --- a/drivers/net/wan/hd6457x.c +++ b/drivers/net/wan/hd6457x.c @@ -408,17 +408,19 @@ static inline void sca_tx_intr(port_t *port) -static void sca_intr(int irq, void* dev_id, struct pt_regs *regs) +static irqreturn_t sca_intr(int irq, void* dev_id, struct pt_regs *regs) { card_t *card = dev_id; int i; u8 stat; + int handled = 0; #ifndef ALL_PAGES_ALWAYS_MAPPED u8 page = sca_get_page(card); #endif while((stat = sca_intr_status(card)) != 0) { + handled = 1; for (i = 0; i < 2; i++) { port_t *port = get_port(card, i); if (port) { @@ -437,6 +439,7 @@ static void sca_intr(int irq, void* dev_id, struct pt_regs *regs) #ifndef ALL_PAGES_ALWAYS_MAPPED openwin(card, page); /* Restore original page */ #endif + return IRQ_RETVAL(handled); } diff --git a/drivers/net/wan/n2.c b/drivers/net/wan/n2.c index 939ee3544523b..12b5434c2d241 100644 --- a/drivers/net/wan/n2.c +++ b/drivers/net/wan/n2.c @@ -216,12 +216,13 @@ static int n2_open(struct net_device *dev) port_t *port = hdlc_to_port(hdlc); int io = port->card->io; u8 mcr = inb(io + N2_MCR) | (port->phy_node ? TX422_PORT1:TX422_PORT0); + int result; if (!try_module_get(THIS_MODULE)) return -EFAULT; /* rmmod in progress */ - int result = hdlc_open(hdlc); + result = hdlc_open(hdlc); if (result) { return result; module_put(THIS_MODULE); diff --git a/drivers/net/wan/z85230.c b/drivers/net/wan/z85230.c index d2473ea84eeca..1a01cbef19b05 100644 --- a/drivers/net/wan/z85230.c +++ b/drivers/net/wan/z85230.c @@ -718,7 +718,7 @@ EXPORT_SYMBOL(z8530_nop); * channel). c->lock for both channels points to dev->lock */ -void z8530_interrupt(int irq, void *dev_id, struct pt_regs *regs) +irqreturn_t z8530_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct z8530_dev *dev=dev_id; u8 intr; @@ -729,7 +729,7 @@ void z8530_interrupt(int irq, void *dev_id, struct pt_regs *regs) if(locker) { printk(KERN_ERR "IRQ re-enter\n"); - return; + return IRQ_NONE; } locker=1; @@ -775,6 +775,7 @@ void z8530_interrupt(int irq, void *dev_id, struct pt_regs *regs) printk(KERN_ERR "%s: interrupt jammed - abort(0x%X)!\n", dev->name, intr); /* Ok all done */ locker=0; + return IRQ_HANDLED; } EXPORT_SYMBOL(z8530_interrupt); diff --git a/drivers/net/wan/z85230.h b/drivers/net/wan/z85230.h index 070eff77c134b..6eae40b884a81 100644 --- a/drivers/net/wan/z85230.h +++ b/drivers/net/wan/z85230.h @@ -9,6 +9,7 @@ #define _Z8530_H #include +#include /* Conversion routines to/from brg time constants from/to bits * per second. @@ -399,7 +400,7 @@ struct z8530_dev extern u8 z8530_dead_port[]; extern u8 z8530_hdlc_kilostream_85230[]; extern u8 z8530_hdlc_kilostream[]; -extern void z8530_interrupt(int, void *, struct pt_regs *); +extern irqreturn_t z8530_interrupt(int, void *, struct pt_regs *); extern void z8530_describe(struct z8530_dev *, char *mapping, unsigned long io); extern int z8530_init(struct z8530_dev *); extern int z8530_shutdown(struct z8530_dev *); -- 2.53.0