 drivers/net/apne.c                  |    9 +++++----
 drivers/net/arcnet/arcnet.c         |    5 +++--
 drivers/net/bmac.c                  |   15 +++++++++------
 drivers/net/fc/iph5526.c            |   18 ++++++++++--------
 drivers/net/fec.c                   |   18 +++++++++++++-----
 drivers/net/fmv18x.c                |    6 +++---
 drivers/net/hamradio/scc.c          |    7 ++++---
 drivers/net/irda/sa1100_ir.c        |    3 ++-
 drivers/net/mace.c                  |    5 +++--
 drivers/net/macmace.c               |    5 +++--
 drivers/net/myri_sbus.c             |    2 ++
 drivers/net/seeq8005.c              |    9 +++++++--
 drivers/net/sun3lance.c             |    8 ++++----
 drivers/net/sunqe.c                 |    1 +
 drivers/net/tokenring/lanstreamer.c |    5 +++--
 drivers/net/tulip/de2104x.c         |    1 +
 drivers/net/tulip/de4x5.c           |    2 +-
 drivers/net/wan/lmc/lmc_main.c      |    8 ++++++--
 drivers/net/wireless/wavelan.c      |    1 +
 include/linux/arcdevice.h           |    2 +-
 20 files changed, 82 insertions(+), 48 deletions(-)

diff -puN drivers/net/apne.c~irqreturn-drivers-net drivers/net/apne.c
--- 25/drivers/net/apne.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/apne.c	2003-04-28 23:35:12.000000000 -0700
@@ -85,7 +85,7 @@ static void apne_block_input(struct net_
 								struct sk_buff *skb, int ring_offset);
 static void apne_block_output(struct net_device *dev, const int count,
 							const unsigned char *buf, const int start_page);
-static void apne_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t apne_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 
 static int init_pcmcia(void);
 
@@ -511,18 +511,18 @@ apne_block_output(struct net_device *dev
     return;
 }
 
-static void apne_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t apne_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
     unsigned char pcmcia_intreq;
 
     if (!(gayle.inten & GAYLE_IRQ_IRQ))
-        return;
+        return IRQ_NONE;
 
     pcmcia_intreq = pcmcia_get_intreq();
 
     if (!(pcmcia_intreq & GAYLE_IRQ_IRQ)) {
         pcmcia_ack_int(pcmcia_intreq);
-        return;
+        return IQ_NONE;
     }
     if (ei_debug > 3)
         printk("pcmcia intreq = %x\n", pcmcia_intreq);
@@ -530,6 +530,7 @@ static void apne_interrupt(int irq, void
     ei_interrupt(irq, dev_id, regs);
     pcmcia_ack_int(pcmcia_get_intreq());
     pcmcia_enable_irq();
+    return IRQ_HANDLED;
 }
 
 #ifdef MODULE
diff -puN drivers/net/arcnet/arcnet.c~irqreturn-drivers-net drivers/net/arcnet/arcnet.c
--- 25/drivers/net/arcnet/arcnet.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/arcnet/arcnet.c	2003-04-28 23:35:12.000000000 -0700
@@ -701,7 +701,7 @@ static void arcnet_timeout(struct net_de
  * interrupts. Establish which device needs attention, and call the correct
  * chipset interrupt handler.
  */
-void arcnet_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+irqreturn_t arcnet_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
 	struct net_device *dev = dev_id;
 	struct arcnet_local *lp;
@@ -726,7 +726,7 @@ void arcnet_interrupt(int irq, void *dev
 			ACOMMAND(CFLAGScmd | RESETclear);
 		AINTMASK(0);
 		spin_unlock(&arcnet_lock);
-		return;
+		return IRQ_HANDLED;
 	}
 
 	BUGMSG(D_DURING, "in arcnet_inthandler (status=%Xh, intmask=%Xh)\n",
@@ -894,6 +894,7 @@ void arcnet_interrupt(int irq, void *dev
 	AINTMASK(lp->intmask);
 	
 	spin_unlock(&arcnet_lock);
+	return IRQ_RETVAL(didsomething);
 }
 
 
diff -puN drivers/net/bmac.c~irqreturn-drivers-net drivers/net/bmac.c
--- 25/drivers/net/bmac.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/bmac.c	2003-04-28 23:35:12.000000000 -0700
@@ -159,9 +159,9 @@ static void bmac_init_chip(struct net_de
 static void bmac_init_registers(struct net_device *dev);
 static void bmac_enable_and_reset_chip(struct net_device *dev);
 static int bmac_set_address(struct net_device *dev, void *addr);
-static void bmac_misc_intr(int irq, void *dev_id, struct pt_regs *regs);
-static void bmac_txdma_intr(int irq, void *dev_id, struct pt_regs *regs);
-static void bmac_rxdma_intr(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t bmac_misc_intr(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t bmac_txdma_intr(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t bmac_rxdma_intr(int irq, void *dev_id, struct pt_regs *regs);
 static void bmac_set_timeout(struct net_device *dev);
 static void bmac_tx_timeout(unsigned long data);
 static int bmac_proc_info ( char *buffer, char **start, off_t offset, int length);
@@ -703,7 +703,7 @@ static int bmac_transmit_packet(struct s
 
 static int rxintcount;
 
-static void bmac_rxdma_intr(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t bmac_rxdma_intr(int irq, void *dev_id, struct pt_regs *regs)
 {
 	struct net_device *dev = (struct net_device *) dev_id;
 	struct bmac_data *bp = (struct bmac_data *) dev->priv;
@@ -776,11 +776,12 @@ static void bmac_rxdma_intr(int irq, voi
 	if (rxintcount < 10) {
 		XXDEBUG(("bmac_rxdma_intr done\n"));
 	}
+	return IRQ_HANDLED;
 }
 
 static int txintcount;
 
-static void bmac_txdma_intr(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t bmac_txdma_intr(int irq, void *dev_id, struct pt_regs *regs)
 {
 	struct net_device *dev = (struct net_device *) dev_id;
 	struct bmac_data *bp = (struct bmac_data *) dev->priv;
@@ -831,6 +832,7 @@ static void bmac_txdma_intr(int irq, voi
 	}
 
 	bmac_start(dev);
+	return IRQ_HANDLED;
 }
 
 static struct net_device_stats *bmac_stats(struct net_device *dev)
@@ -1096,7 +1098,7 @@ static void bmac_set_multicast(struct ne
 
 static int miscintcount;
 
-static void bmac_misc_intr(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t bmac_misc_intr(int irq, void *dev_id, struct pt_regs *regs)
 {
 	struct net_device *dev = (struct net_device *) dev_id;
 	struct bmac_data *bp = (struct bmac_data *)dev->priv;
@@ -1117,6 +1119,7 @@ static void bmac_misc_intr(int irq, void
 	if (status & TxErrorMask) bp->stats.tx_errors++;
 	if (status & TxUnderrun) bp->stats.tx_fifo_errors++;
 	if (status & TxNormalCollExp) bp->stats.collisions++;
+	return IRQ_HANDLED;
 }
 
 /*
diff -puN drivers/net/fc/iph5526.c~irqreturn-drivers-net drivers/net/fc/iph5526.c
--- 25/drivers/net/fc/iph5526.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/fc/iph5526.c	2003-04-28 23:35:12.000000000 -0700
@@ -134,7 +134,7 @@ clone_list[] __initdata  = {
 	{0,}
 };
 
-static void tachyon_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t tachyon_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 static void tachyon_interrupt_handler(int irq, void* dev_id, struct pt_regs* regs);
 
 static int initialize_register_pointers(struct fc_info *fi);
@@ -623,7 +623,7 @@ u_int bus_addr, bus_indx_addr, i;
 }
 
 
-static void tachyon_interrupt(int irq, void* dev_id, struct pt_regs* regs)
+static irqreturn_t tachyon_interrupt(int irq, void* dev_id, struct pt_regs* regs)
 {
 struct Scsi_Host *host = dev_id;
 struct iph5526_hostdata *hostdata = (struct iph5526_hostdata *)host->hostdata;
@@ -632,6 +632,7 @@ u_long flags;
 	spin_lock_irqsave(&fi->fc_lock, flags);
 	tachyon_interrupt_handler(irq, dev_id, regs);
 	spin_unlock_irqrestore(&fi->fc_lock, flags);
+	return IRQ_HANDLED;
 }
 
 static void tachyon_interrupt_handler(int irq, void* dev_id, struct pt_regs* regs)
@@ -3721,12 +3722,13 @@ struct fc_info *fi = (struct fc_info*)de
 
 int iph5526_detect(Scsi_Host_Template *tmpt)
 {
-struct Scsi_Host *host = NULL;
-struct iph5526_hostdata *hostdata;
-struct fc_info *fi = NULL;
-int no_of_hosts = 0, timeout, i, j, count = 0;
-u_int pci_maddr = 0;
-struct pci_dev *pdev = NULL;
+	struct Scsi_Host *host = NULL;
+	struct iph5526_hostdata *hostdata;
+	struct fc_info *fi = NULL;
+	int no_of_hosts = 0, i, j, count = 0;
+	u_int pci_maddr = 0;
+	struct pci_dev *pdev = NULL;
+	unsigned long timeout;
 
 	tmpt->proc_name = "iph5526";
 	if (pci_present() == 0) {
diff -puN drivers/net/fec.c~irqreturn-drivers-net drivers/net/fec.c
--- 25/drivers/net/fec.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/fec.c	2003-04-28 23:35:12.000000000 -0700
@@ -188,7 +188,7 @@ struct fec_enet_private {
 static int fec_enet_open(struct net_device *dev);
 static int fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev);
 static void fec_enet_mii(struct net_device *dev);
-static void fec_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs);
+static irqreturn_t fec_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs);
 static void fec_enet_tx(struct net_device *dev);
 static void fec_enet_rx(struct net_device *dev);
 static int fec_enet_close(struct net_device *dev);
@@ -393,12 +393,13 @@ fec_timeout(struct net_device *dev)
 /* The interrupt handler.
  * This is called from the MPC core interrupt.
  */
-static	void
+static irqreturn_t
 fec_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs)
 {
 	struct	net_device *dev = dev_id;
 	volatile fec_t	*fecp;
 	uint	int_events;
+	int handled = 0;
 
 	fecp = (volatile fec_t*)dev->base_addr;
 
@@ -413,20 +414,27 @@ fec_enet_interrupt(int irq, void * dev_i
 
 		/* Handle receive event in its own function.
 		 */
-		if (int_events & FEC_ENET_RXF)
+		if (int_events & FEC_ENET_RXF) {
+			handled = 1;
 			fec_enet_rx(dev);
+		}
 
 		/* Transmit OK, or non-fatal error. Update the buffer
 		   descriptors. FEC handles all errors, we just discover
 		   them as part of the transmit process.
 		*/
-		if (int_events & FEC_ENET_TXF)
+		if (int_events & FEC_ENET_TXF) {
+			handled = 1;
 			fec_enet_tx(dev);
+		}
 
-		if (int_events & FEC_ENET_MII)
+		if (int_events & FEC_ENET_MII) {
+			handled = 1;
 			fec_enet_mii(dev);
+		}
 	
 	}
+	return IRQ_RETVAL(handled);
 }
 
 
diff -puN drivers/net/fmv18x.c~irqreturn-drivers-net drivers/net/fmv18x.c
--- 25/drivers/net/fmv18x.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/fmv18x.c	2003-04-28 23:35:12.000000000 -0700
@@ -114,7 +114,7 @@ extern int fmv18x_probe(struct net_devic
 static int fmv18x_probe1(struct net_device *dev, short ioaddr);
 static int net_open(struct net_device *dev);
 static int net_send_packet(struct sk_buff *skb, struct net_device *dev);
-static void net_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t net_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 static void net_rx(struct net_device *dev);
 static void net_timeout(struct net_device *dev);
 static int net_close(struct net_device *dev);
@@ -423,7 +423,7 @@ static int net_send_packet(struct sk_buf
 
 /* The typical workload of the driver:
    Handle the network interface interrupts. */
-static void
+static irqreturn_t
 net_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
 	struct net_device *dev = dev_id;
@@ -476,7 +476,7 @@ net_interrupt(int irq, void *dev_id, str
 			spin_unlock(&lp->lock);
 		}
 	}
-	return;
+	return IRQ_RETVAL(status);
 }
 
 /* We have a good packet(s), get it/them out of the buffers. */
diff -puN drivers/net/hamradio/scc.c~irqreturn-drivers-net drivers/net/hamradio/scc.c
--- 25/drivers/net/hamradio/scc.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/hamradio/scc.c	2003-04-28 23:35:12.000000000 -0700
@@ -199,7 +199,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 void scc_isr(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t scc_isr(int irq, void *dev_id, struct pt_regs *regs);
 static void scc_init_timer(struct scc_channel *scc);
 
 static int scc_net_setup(struct scc_channel *scc, unsigned char *name, int addev);
@@ -625,7 +625,7 @@ static void scc_isr_dispatch(struct scc_
 
 #define SCC_IRQTIMEOUT 30000
 
-static void scc_isr(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t scc_isr(int irq, void *dev_id, struct pt_regs *regs)
 {
 	unsigned char vector;	
 	struct scc_channel *scc;
@@ -653,7 +653,7 @@ static void scc_isr(int irq, void *dev_i
 		if (k == SCC_IRQTIMEOUT)
 			printk(KERN_WARNING "z8530drv: endless loop in scc_isr()?\n");
 
-		return;
+		return IRQ_HANDLED;
 	}
 
 	/* Find the SCC generating the interrupt by polling all attached SCCs
@@ -701,6 +701,7 @@ static void scc_isr(int irq, void *dev_i
 		} else
 			ctrl++;
 	}
+	return IRQ_HANDLED;
 }
 
 
diff -puN drivers/net/irda/sa1100_ir.c~irqreturn-drivers-net drivers/net/irda/sa1100_ir.c
--- 25/drivers/net/irda/sa1100_ir.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/irda/sa1100_ir.c	2003-04-28 23:35:12.000000000 -0700
@@ -636,13 +636,14 @@ static void sa1100_irda_fir_irq(struct n
 	sa1100_irda_rx_dma_start(si);
 }
 
-static void sa1100_irda_irq(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t sa1100_irda_irq(int irq, void *dev_id, struct pt_regs *regs)
 {
 	struct net_device *dev = dev_id;
 	if (IS_FIR(((struct sa1100_irda *)dev->priv)))
 		sa1100_irda_fir_irq(dev);
 	else
 		sa1100_irda_hpsir_irq(dev);
+	return IRQ_HANDLED;
 }
 
 /*
diff -puN drivers/net/mace.c~irqreturn-drivers-net drivers/net/mace.c
--- 25/drivers/net/mace.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/mace.c	2003-04-28 23:35:12.000000000 -0700
@@ -86,7 +86,7 @@ static struct net_device_stats *mace_sta
 static void mace_set_multicast(struct net_device *dev);
 static void mace_reset(struct net_device *dev);
 static int mace_set_address(struct net_device *dev, void *addr);
-static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t mace_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 static void mace_txdma_intr(int irq, void *dev_id, struct pt_regs *regs);
 static void mace_rxdma_intr(int irq, void *dev_id, struct pt_regs *regs);
 static void mace_set_timeout(struct net_device *dev);
@@ -622,7 +622,7 @@ static void mace_handle_misc_intrs(struc
 	    printk(KERN_DEBUG "mace: jabbering transceiver\n");
 }
 
-static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t mace_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
     struct net_device *dev = (struct net_device *) dev_id;
     struct mace_data *mp = (struct mace_data *) dev->priv;
@@ -765,6 +765,7 @@ static void mace_interrupt(int irq, void
 	mace_set_timeout(dev);
     }
     spin_unlock_irqrestore(&mp->lock, flags);
+    return IRQ_HANDLED;
 }
 
 static void mace_tx_timeout(unsigned long data)
diff -puN drivers/net/macmace.c~irqreturn-drivers-net drivers/net/macmace.c
--- 25/drivers/net/macmace.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/macmace.c	2003-04-28 23:35:12.000000000 -0700
@@ -77,7 +77,7 @@ static int mace_xmit_start(struct sk_buf
 static struct net_device_stats *mace_stats(struct net_device *dev);
 static void mace_set_multicast(struct net_device *dev);
 static int mace_set_address(struct net_device *dev, void *addr);
-static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t mace_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 static void mace_dma_intr(int irq, void *dev_id, struct pt_regs *regs);
 static void mace_tx_timeout(struct net_device *dev);
 
@@ -561,7 +561,7 @@ static void mace_recv_interrupt(struct n
  * Process the chip interrupt
  */
  
-static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t mace_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
 	struct net_device *dev = (struct net_device *) dev_id;
 	struct mace_data *mp = (struct mace_data *) dev->priv;
@@ -577,6 +577,7 @@ static void mace_interrupt(int irq, void
 	if (ir & RCVINT) {
 		mace_recv_interrupt(dev);
 	}
+	return IRQ_HANDLED;
 }
 
 static void mace_tx_timeout(struct net_device *dev)
diff -puN drivers/net/myri_sbus.c~irqreturn-drivers-net drivers/net/myri_sbus.c
--- 25/drivers/net/myri_sbus.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/myri_sbus.c	2003-04-28 23:35:12.000000000 -0700
@@ -541,6 +541,7 @@ static irqreturn_t myri_interrupt(int ir
 	struct myri_channel *chan	= &mp->shmem->channel;
 	unsigned long flags;
 	u32 status;
+	int handled = 0;
 
 	spin_lock_irqsave(&mp->irq_lock, flags);
 
@@ -549,6 +550,7 @@ static irqreturn_t myri_interrupt(int ir
 	if (status & ISTAT_HOST) {
 		u32 softstate;
 
+		handled = 1;
 		DIRQ(("IRQ_DISAB "));
 		myri_disable_irq(lregs, mp->cregs);
 		softstate = sbus_readl(&chan->state);
diff -puN drivers/net/seeq8005.c~irqreturn-drivers-net drivers/net/seeq8005.c
--- 25/drivers/net/seeq8005.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/seeq8005.c	2003-04-28 23:35:12.000000000 -0700
@@ -84,7 +84,7 @@ static int seeq8005_probe1(struct net_de
 static int seeq8005_open(struct net_device *dev);
 static void seeq8005_timeout(struct net_device *dev);
 static int seeq8005_send_packet(struct sk_buff *skb, struct net_device *dev);
-static void seeq8005_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t seeq8005_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 static void seeq8005_rx(struct net_device *dev);
 static int seeq8005_close(struct net_device *dev);
 static struct net_device_stats *seeq8005_get_stats(struct net_device *dev);
@@ -400,11 +400,12 @@ static int seeq8005_send_packet(struct s
 
 /* The typical workload of the driver:
    Handle the network interface interrupts. */
-static void seeq8005_interrupt(int irq, void *dev_id, struct pt_regs * regs)
+static irqreturn_t seeq8005_interrupt(int irq, void *dev_id, struct pt_regs * regs)
 {
 	struct net_device *dev = dev_id;
 	struct net_local *lp;
 	int ioaddr, status, boguscount = 0;
+	int handled = 0;
 
 	ioaddr = dev->base_addr;
 	lp = (struct net_local *)dev->priv;
@@ -416,17 +417,20 @@ static void seeq8005_interrupt(int irq, 
 		}
 		
 		if (status & SEEQSTAT_WINDOW_INT) {
+			handled = 1;
 			outw( SEEQCMD_WINDOW_INT_ACK | (status & SEEQCMD_INT_MASK), SEEQ_CMD);
 			if (net_debug) {
 				printk("%s: window int!\n",dev->name);
 			}
 		}
 		if (status & SEEQSTAT_TX_INT) {
+			handled = 1;
 			outw( SEEQCMD_TX_INT_ACK | (status & SEEQCMD_INT_MASK), SEEQ_CMD);
 			lp->stats.tx_packets++;
 			netif_wake_queue(dev);	/* Inform upper layers. */
 		}
 		if (status & SEEQSTAT_RX_INT) {
+			handled = 1;
 			/* Got a packet(s). */
 			seeq8005_rx(dev);
 		}
@@ -436,6 +440,7 @@ static void seeq8005_interrupt(int irq, 
 	if(net_debug>2) {
 		printk("%s: eoi\n",dev->name);
 	}
+	return IRQ_RETVAL(handled);
 }
 
 /* We have a good packet(s), get it/them out of the buffers. */
diff -puN drivers/net/sun3lance.c~irqreturn-drivers-net drivers/net/sun3lance.c
--- 25/drivers/net/sun3lance.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/sun3lance.c	2003-04-28 23:35:12.000000000 -0700
@@ -238,7 +238,7 @@ static int lance_probe( struct net_devic
 static int lance_open( struct net_device *dev );
 static void lance_init_ring( struct net_device *dev );
 static int lance_start_xmit( struct sk_buff *skb, struct net_device *dev );
-static void lance_interrupt( int irq, void *dev_id, struct pt_regs *fp );
+static irqreturn_t lance_interrupt( int irq, void *dev_id, struct pt_regs *fp );
 static int lance_rx( struct net_device *dev );
 static int lance_close( struct net_device *dev );
 static struct net_device_stats *lance_get_stats( struct net_device *dev );
@@ -620,7 +620,7 @@ static int lance_start_xmit( struct sk_b
 
 /* The LANCE interrupt handler. */
 
-static void lance_interrupt( int irq, void *dev_id, struct pt_regs *fp)
+static irqreturn_t lance_interrupt( int irq, void *dev_id, struct pt_regs *fp)
 {
 	struct net_device *dev = dev_id;
 	struct lance_private *lp = dev->priv;
@@ -629,7 +629,7 @@ static void lance_interrupt( int irq, vo
 
 	if (dev == NULL) {
 		DPRINTK( 1, ( "lance_interrupt(): invalid dev_id\n" ));
-		return;
+		return IRQ_NONE;
 	}
 
 	if (in_interrupt)
@@ -743,7 +743,7 @@ static void lance_interrupt( int irq, vo
 	DPRINTK( 2, ( "%s: exiting interrupt, csr0=%#04x.\n",
 				  dev->name, DREG ));
 	in_interrupt = 0;
-	return;
+	return IRQ_HANDLED;
 }
 
 /* get packet, toss into skbuff */
diff -puN drivers/net/sunqe.c~irqreturn-drivers-net drivers/net/sunqe.c
--- 25/drivers/net/sunqe.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/sunqe.c	2003-04-28 23:35:12.000000000 -0700
@@ -124,6 +124,7 @@ static void qe_init_rings(struct sunqe *
 		qb->qe_rxd[i].rx_flags =
 			(RXD_OWN | ((RXD_PKT_SZ) & RXD_LENGTH));
 	}
+	return IRQ_HANDLED;
 }
 
 static int qe_init(struct sunqe *qep, int from_irq)
diff -puN drivers/net/tokenring/lanstreamer.c~irqreturn-drivers-net drivers/net/tokenring/lanstreamer.c
--- 25/drivers/net/tokenring/lanstreamer.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/tokenring/lanstreamer.c	2003-04-28 23:35:13.000000000 -0700
@@ -201,7 +201,7 @@ static int streamer_open(struct net_devi
 static int streamer_xmit(struct sk_buff *skb, struct net_device *dev);
 static int streamer_close(struct net_device *dev);
 static void streamer_set_rx_mode(struct net_device *dev);
-static void streamer_interrupt(int irq, void *dev_id,
+static irqreturn_t streamer_interrupt(int irq, void *dev_id,
 			       struct pt_regs *regs);
 static struct net_device_stats *streamer_get_stats(struct net_device *dev);
 static int streamer_set_mac_address(struct net_device *dev, void *addr);
@@ -1021,7 +1021,7 @@ static void streamer_rx(struct net_devic
 	}			/* end for all completed rx descriptors */
 }
 
-static void streamer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t streamer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
 	struct net_device *dev = (struct net_device *) dev_id;
 	struct streamer_private *streamer_priv =
@@ -1142,6 +1142,7 @@ static void streamer_interrupt(int irq, 
 	} /* while() */		
 
 	spin_unlock(&streamer_priv->streamer_lock) ; 
+	return IRQ_HANDLED;
 }
 
 static int streamer_xmit(struct sk_buff *skb, struct net_device *dev)
diff -puN drivers/net/tulip/de2104x.c~irqreturn-drivers-net drivers/net/tulip/de2104x.c
--- 25/drivers/net/tulip/de2104x.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/tulip/de2104x.c	2003-04-28 23:35:13.000000000 -0700
@@ -394,6 +394,7 @@ static void de_rx_err_acct (struct de_pr
 		if (status & RxErrCRC) de->net_stats.rx_crc_errors++;
 		if (status & RxErrFIFO) de->net_stats.rx_fifo_errors++;
 	}
+	return;
 }
 
 static void de_rx (struct de_private *de)
diff -puN drivers/net/tulip/de4x5.c~irqreturn-drivers-net drivers/net/tulip/de4x5.c
--- 25/drivers/net/tulip/de4x5.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/tulip/de4x5.c	2003-04-28 23:35:13.000000000 -0700
@@ -2026,7 +2026,7 @@ set_multicast_list(struct net_device *de
 	}
     }
     
-    return;
+    return IRQ_HANDLED;
 }
 
 /*
diff -puN drivers/net/wan/lmc/lmc_main.c~irqreturn-drivers-net drivers/net/wan/lmc/lmc_main.c
--- 25/drivers/net/wan/lmc/lmc_main.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/wan/lmc/lmc_main.c	2003-04-28 23:35:13.000000000 -0700
@@ -117,7 +117,7 @@ static int lmc_rx (struct net_device *de
 static int lmc_open(struct net_device *dev);
 static int lmc_close(struct net_device *dev);
 static struct net_device_stats *lmc_get_stats(struct net_device *dev);
-static void lmc_interrupt(int irq, void *dev_instance, struct pt_regs *regs);
+static irqreturn_t lmc_interrupt(int irq, void *dev_instance, struct pt_regs *regs);
 static int lmc_set_config(struct net_device *dev, struct ifmap *map);
 static void lmc_initcsrs(lmc_softc_t * const sc, lmc_csrptr_t csr_base, size_t csr_size);
 static void lmc_softreset(lmc_softc_t * const);
@@ -1388,7 +1388,7 @@ static int lmc_ifdown (struct net_device
 /* Interrupt handling routine.  This will take an incoming packet, or clean
  * up after a trasmit.
  */
-static void lmc_interrupt (int irq, void *dev_instance, struct pt_regs *regs) /*fold00*/
+static irqreturn_t lmc_interrupt (int irq, void *dev_instance, struct pt_regs *regs) /*fold00*/
 {
     struct net_device *dev = (struct net_device *) dev_instance;
     lmc_softc_t *sc;
@@ -1398,6 +1398,7 @@ static void lmc_interrupt (int irq, void
     unsigned int badtx;
     u32 firstcsr;
     int max_work = LMC_RXDESCS;
+    int handled = 0;
 
     lmc_trace(dev, "lmc_interrupt in");
 
@@ -1421,6 +1422,8 @@ static void lmc_interrupt (int irq, void
 
     /* always go through this loop at least once */
     while (csr & sc->lmc_intrmask) {
+	handled = 1;
+
         /*
          * Clear interrupt bits, we handle all case below
          */
@@ -1580,6 +1583,7 @@ lmc_int_fail_out:
     spin_unlock(&sc->lmc_lock);
 
     lmc_trace(dev, "lmc_interrupt out");
+    return IRQ_RETVAL(handled);
 }
 
 static int lmc_start_xmit (struct sk_buff *skb, struct net_device *dev) /*fold00*/
diff -puN drivers/net/wireless/wavelan.c~irqreturn-drivers-net drivers/net/wireless/wavelan.c
--- 25/drivers/net/wireless/wavelan.c~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/drivers/net/wireless/wavelan.c	2003-04-28 23:35:13.000000000 -0700
@@ -4079,6 +4079,7 @@ static void wavelan_watchdog(device *	de
 #ifdef DEBUG_INTERRUPT_TRACE
 	printk(KERN_DEBUG "%s: <-wavelan_watchdog()\n", dev->name);
 #endif
+	return;
 }
 
 /********************* CONFIGURATION CALLBACKS *********************/
diff -puN include/linux/arcdevice.h~irqreturn-drivers-net include/linux/arcdevice.h
--- 25/include/linux/arcdevice.h~irqreturn-drivers-net	2003-04-28 23:35:12.000000000 -0700
+++ 25-akpm/include/linux/arcdevice.h	2003-04-28 23:35:13.000000000 -0700
@@ -329,7 +329,7 @@ void arcnet_dump_packet(struct net_devic
 #endif
 
 void arcnet_unregister_proto(struct ArcProto *proto);
-void arcnet_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+irqreturn_t arcnet_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 void arcdev_setup(struct net_device *dev);
 void arcnet_rx(struct net_device *dev, int bufnum);
 

_
