From zwane We shutdown the MAC part of the card and have interrupts disabled, interrupt gets queued, we reenable interrupts after shutting down device, service the interrupt, check status and get 0xff from powered down device. No idea what he's talking about here, but apparently the irq return handling isn't working out. Just return IRQ_HANDLED all the time. drivers/net/pcmcia/xirc2ps_cs.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-) diff -puN drivers/net/pcmcia/xirc2ps_cs.c~xirc2ps_cs-irqreturn-fix drivers/net/pcmcia/xirc2ps_cs.c --- 25/drivers/net/pcmcia/xirc2ps_cs.c~xirc2ps_cs-irqreturn-fix 2003-05-13 01:02:18.000000000 -0700 +++ 25-akpm/drivers/net/pcmcia/xirc2ps_cs.c 2003-05-13 01:02:46.000000000 -0700 @@ -1305,14 +1305,14 @@ xirc2ps_interrupt(int irq, void *dev_id, u_char saved_page; unsigned bytes_rcvd; unsigned int_status, eth_status, rx_status, tx_status; - unsigned rsr, pktlen, handled = 1; + unsigned rsr, pktlen; ulong start_ticks = jiffies; /* fixme: jiffies rollover every 497 days * is this something to worry about? * -- on a laptop? */ if (!netif_device_present(dev)) - return IRQ_NONE; + return IRQ_HANDLED; ioaddr = dev->base_addr; if (lp->mohawk) { /* must disable the interrupt */ @@ -1330,7 +1330,6 @@ xirc2ps_interrupt(int irq, void *dev_id, loop_entry: if (int_status == 0xff) { /* card may be ejected */ DEBUG(3, "%s: interrupt %d for dead card\n", dev->name, irq); - handled = 0; goto leave; } eth_status = GetByte(XIRCREG_ESR); @@ -1515,7 +1514,7 @@ xirc2ps_interrupt(int irq, void *dev_id, * force an interrupt with this command: * PutByte(XIRCREG_CR, EnableIntr|ForceIntr); */ - return IRQ_RETVAL(handled); + return IRQ_HANDLED; } /* xirc2ps_interrupt */ /*====================================================================*/ _