[Bug 279102] Re: Unreliable network connection with B44 driver
Jean-Louis Dupond
info at dupondje.be
Tue Jun 16 15:56:58 UTC 2009
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 Kernel
Bugs, which is subscribed to Linux.
More information about the kernel-bugs
mailing list