I modified the driver to: static int b44_poll(struct napi_struct *napi, int budget) { struct b44 *bp = container_of(napi, struct b44, napi); int work_done;
spin_lock_irq(&bp->lock); if (bp->istat & (ISTAT_TX | ISTAT_TO)) { /* spin_lock(&bp->tx_lock); */ b44_tx(bp); /* spin_unlock(&bp->tx_lock); */ } spin_unlock_irq(&bp->lock); work_done = 0; if (bp->istat & ISTAT_RX) work_done += b44_rx(bp, budget); if (bp->istat & ISTAT_ERRORS) { unsigned long flags; spin_lock_irqsave(&bp->lock, flags); printk(KERN_INFO PFX "DUP: b44_poll\n"); if (bp->istat & ISTAT_DSCE) { printk(KERN_INFO PFX "DUP: ISTAT_DSCE\n"); } if (bp->istat & ISTAT_DATAE) { printk(KERN_INFO PFX "DUP: ISTAT_DATAE\n"); } if (bp->istat & ISTAT_DPE) { printk(KERN_INFO PFX "DUP: ISTAT_DPE\n"); } if (bp->istat & ISTAT_RDU) { printk(KERN_INFO PFX "DUP: ISTAT_RDU\n"); } if (bp->istat & ISTAT_RFO) { printk(KERN_INFO PFX "DUP: ISTAT_RFO\n"); } if (bp->istat & ISTAT_TFU) { printk(KERN_INFO PFX "DUP: ISTAT_TFU\n"); } b44_halt(bp); b44_init_rings(bp); b44_init_hw(bp, B44_FULL_RESET_SKIP_PHY); netif_wake_queue(bp->dev); spin_unlock_irqrestore(&bp->lock, flags); work_done = 0; } if (work_done < budget) { napi_complete(napi); b44_enable_ints(bp); } return work_done; } And when it goes down I see: [25656.573416] b44: DUP: b44_poll [25656.573424] b44: DUP: ISTAT_RFO [25656.573627] b44: eth0: powering down PHY [25656.816096] b44: eth0: Link is down. [25659.816225] b44: eth0: Link is up at 100 Mbps, full duplex. [25659.816231] b44: eth0: Flow control is off for TX and off for RX. -- Unreliable network connection with B44 driver https://bugs.launchpad.net/bugs/279102 You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs