diff options
author | Nathan Fontenot <nfont@linux.vnet.ibm.com> | 2017-05-03 14:05:25 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-05-03 11:33:06 -0400 |
commit | 7c3e7de3f3a94fa34731f302e2f6606c9adc0f38 (patch) | |
tree | c7bd90ce3fc9b3f31b3d6fa208f9efd3d715360e | |
parent | 94ca305fd85cd052050b19b1762eb14eaa8cdd6a (diff) |
ibmvnic: Move queue restarting in ibmvnic_tx_complete
Restart of the subqueue should occur outside of the loop processing
any tx buffers instead of doing this in the middle of the loop.
Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/ibm/ibmvnic.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index 1b6268ce7b0d..4f2d329dba99 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c | |||
@@ -1809,19 +1809,8 @@ restart_loop: | |||
1809 | } | 1809 | } |
1810 | 1810 | ||
1811 | if (txbuff->last_frag) { | 1811 | if (txbuff->last_frag) { |
1812 | if (atomic_sub_return(next->tx_comp.num_comps, | ||
1813 | &scrq->used) <= | ||
1814 | (adapter->req_tx_entries_per_subcrq / 2) && | ||
1815 | netif_subqueue_stopped(adapter->netdev, | ||
1816 | txbuff->skb)) { | ||
1817 | netif_wake_subqueue(adapter->netdev, | ||
1818 | scrq->pool_index); | ||
1819 | netdev_dbg(adapter->netdev, | ||
1820 | "Started queue %d\n", | ||
1821 | scrq->pool_index); | ||
1822 | } | ||
1823 | |||
1824 | dev_kfree_skb_any(txbuff->skb); | 1812 | dev_kfree_skb_any(txbuff->skb); |
1813 | txbuff->skb = NULL; | ||
1825 | } | 1814 | } |
1826 | 1815 | ||
1827 | adapter->tx_pool[pool].free_map[adapter->tx_pool[pool]. | 1816 | adapter->tx_pool[pool].free_map[adapter->tx_pool[pool]. |
@@ -1832,6 +1821,15 @@ restart_loop: | |||
1832 | } | 1821 | } |
1833 | /* remove tx_comp scrq*/ | 1822 | /* remove tx_comp scrq*/ |
1834 | next->tx_comp.first = 0; | 1823 | next->tx_comp.first = 0; |
1824 | |||
1825 | if (atomic_sub_return(next->tx_comp.num_comps, &scrq->used) <= | ||
1826 | (adapter->req_tx_entries_per_subcrq / 2) && | ||
1827 | __netif_subqueue_stopped(adapter->netdev, | ||
1828 | scrq->pool_index)) { | ||
1829 | netif_wake_subqueue(adapter->netdev, scrq->pool_index); | ||
1830 | netdev_info(adapter->netdev, "Started queue %d\n", | ||
1831 | scrq->pool_index); | ||
1832 | } | ||
1835 | } | 1833 | } |
1836 | 1834 | ||
1837 | enable_scrq_irq(adapter, scrq); | 1835 | enable_scrq_irq(adapter, scrq); |