提交 717b5bc4 编写于 作者: J Joe Damato 提交者: Tony Nguyen

i40e: Record number of RXes cleaned during NAPI

Adjust i40e_clean_rx_irq to accept an out parameter which records the number of
RX packets cleaned.

No XDP related code is modified and care has been taken to avoid changing
control flow.
Signed-off-by: NJoe Damato <jdamato@fastly.com>
Acked-by: NJesse Brandeburg <jesse.brandeburg@intel.com>
Acked-by: NSridhar Samudrala <sridhar.samudrala@intel.com>
Tested-by: Gurucharan <gurucharanx.g@intel.com> (A Contingent worker at Intel)
Signed-off-by: NTony Nguyen <anthony.l.nguyen@intel.com>
上级 8c1a595c
...@@ -2425,6 +2425,7 @@ static void i40e_inc_ntc(struct i40e_ring *rx_ring) ...@@ -2425,6 +2425,7 @@ static void i40e_inc_ntc(struct i40e_ring *rx_ring)
* i40e_clean_rx_irq - Clean completed descriptors from Rx ring - bounce buf * i40e_clean_rx_irq - Clean completed descriptors from Rx ring - bounce buf
* @rx_ring: rx descriptor ring to transact packets on * @rx_ring: rx descriptor ring to transact packets on
* @budget: Total limit on number of packets to process * @budget: Total limit on number of packets to process
* @rx_cleaned: Out parameter of the number of packets processed
* *
* This function provides a "bounce buffer" approach to Rx interrupt * This function provides a "bounce buffer" approach to Rx interrupt
* processing. The advantage to this is that on systems that have * processing. The advantage to this is that on systems that have
...@@ -2433,7 +2434,8 @@ static void i40e_inc_ntc(struct i40e_ring *rx_ring) ...@@ -2433,7 +2434,8 @@ static void i40e_inc_ntc(struct i40e_ring *rx_ring)
* *
* Returns amount of work completed * Returns amount of work completed
**/ **/
static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget) static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget,
unsigned int *rx_cleaned)
{ {
unsigned int total_rx_bytes = 0, total_rx_packets = 0, frame_sz = 0; unsigned int total_rx_bytes = 0, total_rx_packets = 0, frame_sz = 0;
u16 cleaned_count = I40E_DESC_UNUSED(rx_ring); u16 cleaned_count = I40E_DESC_UNUSED(rx_ring);
...@@ -2570,6 +2572,8 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget) ...@@ -2570,6 +2572,8 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)
i40e_update_rx_stats(rx_ring, total_rx_bytes, total_rx_packets); i40e_update_rx_stats(rx_ring, total_rx_bytes, total_rx_packets);
*rx_cleaned = total_rx_packets;
/* guarantee a trip back through this routine if there was a failure */ /* guarantee a trip back through this routine if there was a failure */
return failure ? budget : (int)total_rx_packets; return failure ? budget : (int)total_rx_packets;
} }
...@@ -2693,7 +2697,9 @@ int i40e_napi_poll(struct napi_struct *napi, int budget) ...@@ -2693,7 +2697,9 @@ int i40e_napi_poll(struct napi_struct *napi, int budget)
struct i40e_vsi *vsi = q_vector->vsi; struct i40e_vsi *vsi = q_vector->vsi;
struct i40e_ring *ring; struct i40e_ring *ring;
bool tx_clean_complete = true; bool tx_clean_complete = true;
bool rx_clean_complete = true;
unsigned int tx_cleaned = 0; unsigned int tx_cleaned = 0;
unsigned int rx_cleaned = 0;
bool clean_complete = true; bool clean_complete = true;
bool arm_wb = false; bool arm_wb = false;
int budget_per_ring; int budget_per_ring;
...@@ -2738,12 +2744,12 @@ int i40e_napi_poll(struct napi_struct *napi, int budget) ...@@ -2738,12 +2744,12 @@ int i40e_napi_poll(struct napi_struct *napi, int budget)
i40e_for_each_ring(ring, q_vector->rx) { i40e_for_each_ring(ring, q_vector->rx) {
int cleaned = ring->xsk_pool ? int cleaned = ring->xsk_pool ?
i40e_clean_rx_irq_zc(ring, budget_per_ring) : i40e_clean_rx_irq_zc(ring, budget_per_ring) :
i40e_clean_rx_irq(ring, budget_per_ring); i40e_clean_rx_irq(ring, budget_per_ring, &rx_cleaned);
work_done += cleaned; work_done += cleaned;
/* if we clean as many as budgeted, we must not be done */ /* if we clean as many as budgeted, we must not be done */
if (cleaned >= budget_per_ring) if (cleaned >= budget_per_ring)
clean_complete = false; clean_complete = rx_clean_complete = false;
} }
/* If work not completed, return budget and polling will return */ /* If work not completed, return budget and polling will return */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册