Commit 144d8305 authored by Alexander Duyck's avatar Alexander Duyck Committed by Jeff Kirsher

fm10k: Add support for bulk Tx cleanup & cleanup boolean logic

This patch enables bulk free in Tx cleanup for fm10k and cleans up the
boolean logic in the polling routines for fm10k in the hopes of avoiding
any mix-ups similar to what occurred with i40e and i40evf.
Signed-off-by: default avatarAlexander Duyck <aduyck@mirantis.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 3ef2f563
...@@ -1198,9 +1198,10 @@ void fm10k_tx_timeout_reset(struct fm10k_intfc *interface) ...@@ -1198,9 +1198,10 @@ void fm10k_tx_timeout_reset(struct fm10k_intfc *interface)
* fm10k_clean_tx_irq - Reclaim resources after transmit completes * fm10k_clean_tx_irq - Reclaim resources after transmit completes
* @q_vector: structure containing interrupt and ring information * @q_vector: structure containing interrupt and ring information
* @tx_ring: tx ring to clean * @tx_ring: tx ring to clean
* @napi_budget: Used to determine if we are in netpoll
**/ **/
static bool fm10k_clean_tx_irq(struct fm10k_q_vector *q_vector, static bool fm10k_clean_tx_irq(struct fm10k_q_vector *q_vector,
struct fm10k_ring *tx_ring) struct fm10k_ring *tx_ring, int napi_budget)
{ {
struct fm10k_intfc *interface = q_vector->interface; struct fm10k_intfc *interface = q_vector->interface;
struct fm10k_tx_buffer *tx_buffer; struct fm10k_tx_buffer *tx_buffer;
...@@ -1238,7 +1239,7 @@ static bool fm10k_clean_tx_irq(struct fm10k_q_vector *q_vector, ...@@ -1238,7 +1239,7 @@ static bool fm10k_clean_tx_irq(struct fm10k_q_vector *q_vector,
total_packets += tx_buffer->gso_segs; total_packets += tx_buffer->gso_segs;
/* free the skb */ /* free the skb */
dev_consume_skb_any(tx_buffer->skb); napi_consume_skb(tx_buffer->skb, napi_budget);
/* unmap skb header data */ /* unmap skb header data */
dma_unmap_single(tx_ring->dev, dma_unmap_single(tx_ring->dev,
...@@ -1449,8 +1450,10 @@ static int fm10k_poll(struct napi_struct *napi, int budget) ...@@ -1449,8 +1450,10 @@ static int fm10k_poll(struct napi_struct *napi, int budget)
int per_ring_budget, work_done = 0; int per_ring_budget, work_done = 0;
bool clean_complete = true; bool clean_complete = true;
fm10k_for_each_ring(ring, q_vector->tx) fm10k_for_each_ring(ring, q_vector->tx) {
clean_complete &= fm10k_clean_tx_irq(q_vector, ring); if (!fm10k_clean_tx_irq(q_vector, ring, budget))
clean_complete = false;
}
/* Handle case where we are called by netpoll with a budget of 0 */ /* Handle case where we are called by netpoll with a budget of 0 */
if (budget <= 0) if (budget <= 0)
...@@ -1468,7 +1471,8 @@ static int fm10k_poll(struct napi_struct *napi, int budget) ...@@ -1468,7 +1471,8 @@ static int fm10k_poll(struct napi_struct *napi, int budget)
int work = fm10k_clean_rx_irq(q_vector, ring, per_ring_budget); int work = fm10k_clean_rx_irq(q_vector, ring, per_ring_budget);
work_done += work; work_done += work;
clean_complete &= !!(work < per_ring_budget); if (work >= per_ring_budget)
clean_complete = false;
} }
/* If all work not completed, return budget and keep polling */ /* If all work not completed, return budget and keep polling */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment