forked from Minki/linux
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>
This commit is contained in:
parent
94ca305fd8
commit
7c3e7de3f3
@ -1809,19 +1809,8 @@ restart_loop:
|
||||
}
|
||||
|
||||
if (txbuff->last_frag) {
|
||||
if (atomic_sub_return(next->tx_comp.num_comps,
|
||||
&scrq->used) <=
|
||||
(adapter->req_tx_entries_per_subcrq / 2) &&
|
||||
netif_subqueue_stopped(adapter->netdev,
|
||||
txbuff->skb)) {
|
||||
netif_wake_subqueue(adapter->netdev,
|
||||
scrq->pool_index);
|
||||
netdev_dbg(adapter->netdev,
|
||||
"Started queue %d\n",
|
||||
scrq->pool_index);
|
||||
}
|
||||
|
||||
dev_kfree_skb_any(txbuff->skb);
|
||||
txbuff->skb = NULL;
|
||||
}
|
||||
|
||||
adapter->tx_pool[pool].free_map[adapter->tx_pool[pool].
|
||||
@ -1832,6 +1821,15 @@ restart_loop:
|
||||
}
|
||||
/* remove tx_comp scrq*/
|
||||
next->tx_comp.first = 0;
|
||||
|
||||
if (atomic_sub_return(next->tx_comp.num_comps, &scrq->used) <=
|
||||
(adapter->req_tx_entries_per_subcrq / 2) &&
|
||||
__netif_subqueue_stopped(adapter->netdev,
|
||||
scrq->pool_index)) {
|
||||
netif_wake_subqueue(adapter->netdev, scrq->pool_index);
|
||||
netdev_info(adapter->netdev, "Started queue %d\n",
|
||||
scrq->pool_index);
|
||||
}
|
||||
}
|
||||
|
||||
enable_scrq_irq(adapter, scrq);
|
||||
|
Loading…
Reference in New Issue
Block a user