From: Brett Creeley <brett.cree...@intel.com>

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: Brett Creeley <brett.cree...@intel.com>
Tested-by: Andrew Bowers <andrewx.bow...@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirs...@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_txrx.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.c 
b/drivers/net/ethernet/intel/ice/ice_txrx.c
index 9234fd203929..837d6ae2f33b 100644
--- a/drivers/net/ethernet/intel/ice/ice_txrx.c
+++ b/drivers/net/ethernet/intel/ice/ice_txrx.c
@@ -1414,8 +1414,8 @@ int ice_napi_poll(struct napi_struct *napi, int budget)
                                container_of(napi, struct ice_q_vector, napi);
        struct ice_vsi *vsi = q_vector->vsi;
        bool clean_complete = true;
-       int budget_per_ring = 0;
        struct ice_ring *ring;
+       int budget_per_ring;
        int work_done = 0;
 
        /* 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)
        if (budget <= 0)
                return budget;
 
-       /* We attempt to distribute budget to each Rx queue fairly, but don't
-        * allow the budget to go below 1 because that would exit polling early.
-        */
-       if (q_vector->num_ring_rx)
+       /* normally we have 1 Rx ring per q_vector */
+       if (unlikely(q_vector->num_ring_rx > 1))
+               /* We attempt to distribute budget to each Rx queue fairly, but
+                * 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);
+       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) {
                int cleaned;
-- 
2.21.0

Reply via email to