Skip to content

Commit

Permalink
WAN: Fix a TX IRQ causing BUG() in PC300 and PCI200SYN drivers.
Browse files Browse the repository at this point in the history
We must not wake the TX queue without free TX descriptors.
sca_xmit() expects at least one free descriptor and BUGs otherwise.

Problem reported and fix tested by Bernie Innocenti and Ward Vandewege.

Signed-off-by: Krzysztof Hałasa <khc@pm.waw.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Krzysztof Halasa authored and David S. Miller committed Dec 12, 2010
1 parent 9f54496 commit eaff945
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion drivers/net/wan/hd64572.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,7 @@ static inline void sca_tx_done(port_t *port)
struct net_device *dev = port->netdev;
card_t* card = port->card;
u8 stat;
unsigned count = 0;

spin_lock(&port->lock);

Expand All @@ -316,10 +317,12 @@ static inline void sca_tx_done(port_t *port)
dev->stats.tx_bytes += readw(&desc->len);
}
writeb(0, &desc->stat); /* Free descriptor */
count++;
port->txlast = (port->txlast + 1) % card->tx_ring_buffers;
}

netif_wake_queue(dev);
if (count)
netif_wake_queue(dev);
spin_unlock(&port->lock);
}

Expand Down

0 comments on commit eaff945

Please sign in to comment.