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.
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;
if (bp->istat & (ISTAT_TX | ISTAT_TO)) { &bp->tx_ lock); */
b44_tx( bp); &bp->tx_ lock); */
spin_unlock_ irq(&bp- >lock);
/* spin_lock(
/* spin_unlock(
}
work_done = 0;
work_ done += b44_rx(bp, budget);
if (bp->istat & ISTAT_RX)
if (bp->istat & ISTAT_ERRORS) {
unsigned long flags;
if (bp->istat & ISTAT_DSCE)
printk( KERN_INFO PFX "DUP: ISTAT_DSCE\n");
printk( KERN_INFO PFX "DUP: ISTAT_DATAE\n");
printk( KERN_INFO PFX "DUP: ISTAT_DPE\n");
printk( KERN_INFO PFX "DUP: ISTAT_RDU\n");
printk( KERN_INFO PFX "DUP: ISTAT_RFO\n");
printk( KERN_INFO PFX "DUP: ISTAT_TFU\n");
{
}
if (bp->istat & ISTAT_DATAE)
{
}
if (bp->istat & ISTAT_DPE)
{
}
if (bp->istat & ISTAT_RDU)
{
}
if (bp->istat & ISTAT_RFO)
{
}
if (bp->istat & ISTAT_TFU)
{
}
}
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.