| 1 |
--- a/drivers/net/eepro100.c.ORIG 2008-04-30 18:47:27.000000000 -0400
|
| 2 |
+++ b/drivers/net/eepro100.c 2008-04-30 18:51:31.000000000 -0400
|
| 3 |
@@ -487,7 +487,7 @@ static void speedo_tx_timeout(struct net
|
| 4 |
static int speedo_start_xmit(struct sk_buff *skb, struct net_device *dev);
|
| 5 |
static void speedo_refill_rx_buffers(struct net_device *dev, int force);
|
| 6 |
static int speedo_rx(struct net_device *dev);
|
| 7 |
-static void speedo_tx_buffer_gc(struct net_device *dev);
|
| 8 |
+static void speedo_tx_buffer_gc(struct net_device *dev, int flg);
|
| 9 |
static irqreturn_t speedo_interrupt(int irq, void *dev_instance);
|
| 10 |
static int speedo_close(struct net_device *dev);
|
| 11 |
static struct net_device_stats *speedo_get_stats(struct net_device *dev);
|
| 12 |
@@ -1383,7 +1383,7 @@ static void speedo_tx_timeout(struct net
|
| 13 |
/* Disable interrupts. */
|
| 14 |
iowrite16(SCBMaskAll, ioaddr + SCBCmd);
|
| 15 |
synchronize_irq(dev->irq);
|
| 16 |
- speedo_tx_buffer_gc(dev);
|
| 17 |
+ speedo_tx_buffer_gc(dev, 1);
|
| 18 |
/* Free as much as possible.
|
| 19 |
It helps to recover from a hang because of out-of-memory.
|
| 20 |
It also simplifies speedo_resume() in case TX ring is full or
|
| 21 |
@@ -1476,7 +1476,7 @@ speedo_start_xmit(struct sk_buff *skb, s
|
| 22 |
return 0;
|
| 23 |
}
|
| 24 |
|
| 25 |
-static void speedo_tx_buffer_gc(struct net_device *dev)
|
| 26 |
+static void speedo_tx_buffer_gc(struct net_device *dev, int flg)
|
| 27 |
{
|
| 28 |
unsigned int dirty_tx;
|
| 29 |
struct speedo_private *sp = netdev_priv(dev);
|
| 30 |
@@ -1521,8 +1521,8 @@ static void speedo_tx_buffer_gc(struct n
|
| 31 |
while (sp->mc_setup_head != NULL
|
| 32 |
&& (int)(dirty_tx - sp->mc_setup_head->tx - 1) > 0) {
|
| 33 |
struct speedo_mc_block *t;
|
| 34 |
- if (netif_msg_tx_err(sp))
|
| 35 |
- printk(KERN_DEBUG "%s: freeing mc frame.\n", dev->name);
|
| 36 |
+ if (flg && netif_msg_tx_err(sp))
|
| 37 |
+ printk(KERN_DEBUG "%s: Freeing mc frame.\n", dev->name);
|
| 38 |
pci_unmap_single(sp->pdev, sp->mc_setup_head->frame_dma,
|
| 39 |
sp->mc_setup_head->len, PCI_DMA_TODEVICE);
|
| 40 |
t = sp->mc_setup_head->next;
|
| 41 |
@@ -1607,7 +1607,7 @@ static irqreturn_t speedo_interrupt(int
|
| 42 |
|
| 43 |
/* User interrupt, Command/Tx unit interrupt or CU not active. */
|
| 44 |
if (status & 0xA400) {
|
| 45 |
- speedo_tx_buffer_gc(dev);
|
| 46 |
+ speedo_tx_buffer_gc(dev, 0);
|
| 47 |
if (sp->tx_full
|
| 48 |
&& (int)(sp->cur_tx - sp->dirty_tx) < TX_QUEUE_UNFULL) {
|
| 49 |
/* The ring is no longer full. */
|