Commit 9118fcd5 authored by Brett Creeley's avatar Brett Creeley Committed by Jeff Kirsher

ice: Assume that more than one Rx queue is rare in ice_napi_poll

Currently we divide budget by the number of Rx queues per Rx ring
container in ice_napi_poll even if there is only 1. This is an
unnecessary divide for the normal case of 1 Rx ring per Rx ring
container. Fix this by using an unlikely() call in the case where we
actually need to divide.

Also, we will always set budget_per_ring even if there are no Rx rings
in the Rx ring container so we don't need to initialize it to 0.
Signed-off-by: default avatarBrett Creeley <brett.creeley@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent c1ddf1f5
...@@ -1414,8 +1414,8 @@ int ice_napi_poll(struct napi_struct *napi, int budget) ...@@ -1414,8 +1414,8 @@ int ice_napi_poll(struct napi_struct *napi, int budget)
container_of(napi, struct ice_q_vector, napi); container_of(napi, struct ice_q_vector, napi);
struct ice_vsi *vsi = q_vector->vsi; struct ice_vsi *vsi = q_vector->vsi;
bool clean_complete = true; bool clean_complete = true;
int budget_per_ring = 0;
struct ice_ring *ring; struct ice_ring *ring;
int budget_per_ring;
int work_done = 0; int work_done = 0;
/* Since the actual Tx work is minimal, we can give the Tx a larger /* Since the actual Tx work is minimal, we can give the Tx a larger
...@@ -1429,11 +1429,16 @@ int ice_napi_poll(struct napi_struct *napi, int budget) ...@@ -1429,11 +1429,16 @@ int ice_napi_poll(struct napi_struct *napi, int budget)
if (budget <= 0) if (budget <= 0)
return budget; return budget;
/* We attempt to distribute budget to each Rx queue fairly, but don't /* normally we have 1 Rx ring per q_vector */
* allow the budget to go below 1 because that would exit polling early. if (unlikely(q_vector->num_ring_rx > 1))
*/ /* We attempt to distribute budget to each Rx queue fairly, but
if (q_vector->num_ring_rx) * don't allow the budget to go below 1 because that would exit
* polling early.
*/
budget_per_ring = max(budget / q_vector->num_ring_rx, 1); budget_per_ring = max(budget / q_vector->num_ring_rx, 1);
else
/* Max of 1 Rx ring in this q_vector so give it the budget */
budget_per_ring = budget;
ice_for_each_ring(ring, q_vector->rx) { ice_for_each_ring(ring, q_vector->rx) {
int cleaned; int cleaned;
......
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