diff options
Diffstat (limited to 'drivers/net/e1000e/netdev.c')
-rw-r--r-- | drivers/net/e1000e/netdev.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index 4a6fc7453776..2ab3bfbb8a63 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
@@ -1384,7 +1384,7 @@ static int e1000_clean(struct napi_struct *napi, int budget) | |||
1384 | { | 1384 | { |
1385 | struct e1000_adapter *adapter = container_of(napi, struct e1000_adapter, napi); | 1385 | struct e1000_adapter *adapter = container_of(napi, struct e1000_adapter, napi); |
1386 | struct net_device *poll_dev = adapter->netdev; | 1386 | struct net_device *poll_dev = adapter->netdev; |
1387 | int work_done = 0; | 1387 | int tx_cleaned = 0, work_done = 0; |
1388 | 1388 | ||
1389 | /* Must NOT use netdev_priv macro here. */ | 1389 | /* Must NOT use netdev_priv macro here. */ |
1390 | adapter = poll_dev->priv; | 1390 | adapter = poll_dev->priv; |
@@ -1394,12 +1394,15 @@ static int e1000_clean(struct napi_struct *napi, int budget) | |||
1394 | * simultaneously. A failure obtaining the lock means | 1394 | * simultaneously. A failure obtaining the lock means |
1395 | * tx_ring is currently being cleaned anyway. */ | 1395 | * tx_ring is currently being cleaned anyway. */ |
1396 | if (spin_trylock(&adapter->tx_queue_lock)) { | 1396 | if (spin_trylock(&adapter->tx_queue_lock)) { |
1397 | e1000_clean_tx_irq(adapter); | 1397 | tx_cleaned = e1000_clean_tx_irq(adapter); |
1398 | spin_unlock(&adapter->tx_queue_lock); | 1398 | spin_unlock(&adapter->tx_queue_lock); |
1399 | } | 1399 | } |
1400 | 1400 | ||
1401 | adapter->clean_rx(adapter, &work_done, budget); | 1401 | adapter->clean_rx(adapter, &work_done, budget); |
1402 | 1402 | ||
1403 | if (tx_cleaned) | ||
1404 | work_done = budget; | ||
1405 | |||
1403 | /* If budget not fully consumed, exit the polling mode */ | 1406 | /* If budget not fully consumed, exit the polling mode */ |
1404 | if (work_done < budget) { | 1407 | if (work_done < budget) { |
1405 | if (adapter->itr_setting & 3) | 1408 | if (adapter->itr_setting & 3) |