ice: move ice_container_type onto ice_ring_container
authorMaciej Fijalkowski <maciej.fijalkowski@intel.com>
Thu, 19 Aug 2021 11:59:57 +0000 (13:59 +0200)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Fri, 15 Oct 2021 14:39:02 +0000 (07:39 -0700)
Currently ice_container_type is scoped only for ice_ethtool.c. Next
commit that will split the ice_ring struct onto Rx/Tx specific ring
structs is going to also modify the type of linked list of rings that is
within ice_ring_container. Therefore, the functions that are taking the
ice_ring_container as an input argument will need to be aware of a ring
type that will be looked up.

Embed ice_container_type within ice_ring_container and initialize it
properly when allocating the q_vectors.

Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Tested-by: Gurucharan G <gurucharanx.g@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ice/ice_base.c
drivers/net/ethernet/intel/ice/ice_ethtool.c
drivers/net/ethernet/intel/ice/ice_txrx.h

index d7a5ac9..b932759 100644 (file)
@@ -115,6 +115,8 @@ static int ice_vsi_alloc_q_vector(struct ice_vsi *vsi, u16 v_idx)
        q_vector->rx.itr_setting = ICE_DFLT_RX_ITR;
        q_vector->tx.itr_mode = ITR_DYNAMIC;
        q_vector->rx.itr_mode = ITR_DYNAMIC;
+       q_vector->tx.type = ICE_TX_CONTAINER;
+       q_vector->rx.type = ICE_RX_CONTAINER;
 
        if (vsi->type == ICE_VSI_VF)
                goto out;
index 201979c..ecaf5c0 100644 (file)
@@ -3501,15 +3501,9 @@ static int ice_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
        return 0;
 }
 
-enum ice_container_type {
-       ICE_RX_CONTAINER,
-       ICE_TX_CONTAINER,
-};
-
 /**
  * ice_get_rc_coalesce - get ITR values for specific ring container
  * @ec: ethtool structure to fill with driver's coalesce settings
- * @c_type: container type, Rx or Tx
  * @rc: ring container that the ITR values will come from
  *
  * Query the device for ice_ring_container specific ITR values. This is
@@ -3519,13 +3513,12 @@ enum ice_container_type {
  * Returns 0 on success, negative otherwise.
  */
 static int
-ice_get_rc_coalesce(struct ethtool_coalesce *ec, enum ice_container_type c_type,
-                   struct ice_ring_container *rc)
+ice_get_rc_coalesce(struct ethtool_coalesce *ec, struct ice_ring_container *rc)
 {
        if (!rc->ring)
                return -EINVAL;
 
-       switch (c_type) {
+       switch (rc->type) {
        case ICE_RX_CONTAINER:
                ec->use_adaptive_rx_coalesce = ITR_IS_DYNAMIC(rc);
                ec->rx_coalesce_usecs = rc->itr_setting;
@@ -3536,7 +3529,7 @@ ice_get_rc_coalesce(struct ethtool_coalesce *ec, enum ice_container_type c_type,
                ec->tx_coalesce_usecs = rc->itr_setting;
                break;
        default:
-               dev_dbg(ice_pf_to_dev(rc->ring->vsi->back), "Invalid c_type %d\n", c_type);
+               dev_dbg(ice_pf_to_dev(rc->ring->vsi->back), "Invalid c_type %d\n", rc->type);
                return -EINVAL;
        }
 
@@ -3557,18 +3550,18 @@ static int
 ice_get_q_coalesce(struct ice_vsi *vsi, struct ethtool_coalesce *ec, int q_num)
 {
        if (q_num < vsi->num_rxq && q_num < vsi->num_txq) {
-               if (ice_get_rc_coalesce(ec, ICE_RX_CONTAINER,
+               if (ice_get_rc_coalesce(ec,
                                        &vsi->rx_rings[q_num]->q_vector->rx))
                        return -EINVAL;
-               if (ice_get_rc_coalesce(ec, ICE_TX_CONTAINER,
+               if (ice_get_rc_coalesce(ec,
                                        &vsi->tx_rings[q_num]->q_vector->tx))
                        return -EINVAL;
        } else if (q_num < vsi->num_rxq) {
-               if (ice_get_rc_coalesce(ec, ICE_RX_CONTAINER,
+               if (ice_get_rc_coalesce(ec,
                                        &vsi->rx_rings[q_num]->q_vector->rx))
                        return -EINVAL;
        } else if (q_num < vsi->num_txq) {
-               if (ice_get_rc_coalesce(ec, ICE_TX_CONTAINER,
+               if (ice_get_rc_coalesce(ec,
                                        &vsi->tx_rings[q_num]->q_vector->tx))
                        return -EINVAL;
        } else {
@@ -3620,7 +3613,6 @@ ice_get_per_q_coalesce(struct net_device *netdev, u32 q_num,
 
 /**
  * ice_set_rc_coalesce - set ITR values for specific ring container
- * @c_type: container type, Rx or Tx
  * @ec: ethtool structure from user to update ITR settings
  * @rc: ring container that the ITR values will come from
  * @vsi: VSI associated to the ring container
@@ -3632,10 +3624,10 @@ ice_get_per_q_coalesce(struct net_device *netdev, u32 q_num,
  * Returns 0 on success, negative otherwise.
  */
 static int
-ice_set_rc_coalesce(enum ice_container_type c_type, struct ethtool_coalesce *ec,
+ice_set_rc_coalesce(struct ethtool_coalesce *ec,
                    struct ice_ring_container *rc, struct ice_vsi *vsi)
 {
-       const char *c_type_str = (c_type == ICE_RX_CONTAINER) ? "rx" : "tx";
+       const char *c_type_str = (rc->type == ICE_RX_CONTAINER) ? "rx" : "tx";
        u32 use_adaptive_coalesce, coalesce_usecs;
        struct ice_pf *pf = vsi->back;
        u16 itr_setting;
@@ -3643,7 +3635,7 @@ ice_set_rc_coalesce(enum ice_container_type c_type, struct ethtool_coalesce *ec,
        if (!rc->ring)
                return -EINVAL;
 
-       switch (c_type) {
+       switch (rc->type) {
        case ICE_RX_CONTAINER:
                if (ec->rx_coalesce_usecs_high > ICE_MAX_INTRL ||
                    (ec->rx_coalesce_usecs_high &&
@@ -3676,7 +3668,7 @@ ice_set_rc_coalesce(enum ice_container_type c_type, struct ethtool_coalesce *ec,
                break;
        default:
                dev_dbg(ice_pf_to_dev(pf), "Invalid container type %d\n",
-                       c_type);
+                       rc->type);
                return -EINVAL;
        }
 
@@ -3725,22 +3717,22 @@ static int
 ice_set_q_coalesce(struct ice_vsi *vsi, struct ethtool_coalesce *ec, int q_num)
 {
        if (q_num < vsi->num_rxq && q_num < vsi->num_txq) {
-               if (ice_set_rc_coalesce(ICE_RX_CONTAINER, ec,
+               if (ice_set_rc_coalesce(ec,
                                        &vsi->rx_rings[q_num]->q_vector->rx,
                                        vsi))
                        return -EINVAL;
 
-               if (ice_set_rc_coalesce(ICE_TX_CONTAINER, ec,
+               if (ice_set_rc_coalesce(ec,
                                        &vsi->tx_rings[q_num]->q_vector->tx,
                                        vsi))
                        return -EINVAL;
        } else if (q_num < vsi->num_rxq) {
-               if (ice_set_rc_coalesce(ICE_RX_CONTAINER, ec,
+               if (ice_set_rc_coalesce(ec,
                                        &vsi->rx_rings[q_num]->q_vector->rx,
                                        vsi))
                        return -EINVAL;
        } else if (q_num < vsi->num_txq) {
-               if (ice_set_rc_coalesce(ICE_TX_CONTAINER, ec,
+               if (ice_set_rc_coalesce(ec,
                                        &vsi->tx_rings[q_num]->q_vector->tx,
                                        vsi))
                        return -EINVAL;
index 24e123c..bf40608 100644 (file)
@@ -330,6 +330,11 @@ static inline bool ice_ring_is_xdp(struct ice_ring *ring)
        return !!(ring->flags & ICE_TX_FLAGS_RING_XDP);
 }
 
+enum ice_container_type {
+       ICE_RX_CONTAINER,
+       ICE_TX_CONTAINER,
+};
+
 struct ice_ring_container {
        /* head of linked-list of rings */
        struct ice_ring *ring;
@@ -341,6 +346,7 @@ struct ice_ring_container {
        u16 itr_setting:13;
        u16 itr_reserved:2;
        u16 itr_mode:1;
+       enum ice_container_type type;
 };
 
 struct ice_coalesce_stored {