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>hifive-unleashed-5.1
parent
94ca305fd8
commit
7c3e7de3f3
|
@ -1809,19 +1809,8 @@ restart_loop:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (txbuff->last_frag) {
|
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);
|
dev_kfree_skb_any(txbuff->skb);
|
||||||
|
txbuff->skb = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
adapter->tx_pool[pool].free_map[adapter->tx_pool[pool].
|
adapter->tx_pool[pool].free_map[adapter->tx_pool[pool].
|
||||||
|
@ -1832,6 +1821,15 @@ restart_loop:
|
||||||
}
|
}
|
||||||
/* remove tx_comp scrq*/
|
/* remove tx_comp scrq*/
|
||||||
next->tx_comp.first = 0;
|
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);
|
enable_scrq_irq(adapter, scrq);
|
||||||
|
|
Loading…
Reference in New Issue