Commit dc23715c authored by Maciej Fijalkowski's avatar Maciej Fijalkowski Committed by Tony Nguyen

ice: move ice_container_type onto ice_ring_container

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: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
Tested-by: default avatarGurucharan G <gurucharanx.g@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent e93d1c37
...@@ -115,6 +115,8 @@ static int ice_vsi_alloc_q_vector(struct ice_vsi *vsi, u16 v_idx) ...@@ -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->rx.itr_setting = ICE_DFLT_RX_ITR;
q_vector->tx.itr_mode = ITR_DYNAMIC; q_vector->tx.itr_mode = ITR_DYNAMIC;
q_vector->rx.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) if (vsi->type == ICE_VSI_VF)
goto out; goto out;
......
...@@ -3501,15 +3501,9 @@ static int ice_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol) ...@@ -3501,15 +3501,9 @@ static int ice_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
return 0; return 0;
} }
enum ice_container_type {
ICE_RX_CONTAINER,
ICE_TX_CONTAINER,
};
/** /**
* ice_get_rc_coalesce - get ITR values for specific ring container * ice_get_rc_coalesce - get ITR values for specific ring container
* @ec: ethtool structure to fill with driver's coalesce settings * @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 * @rc: ring container that the ITR values will come from
* *
* Query the device for ice_ring_container specific ITR values. This is * Query the device for ice_ring_container specific ITR values. This is
...@@ -3519,13 +3513,12 @@ enum ice_container_type { ...@@ -3519,13 +3513,12 @@ enum ice_container_type {
* Returns 0 on success, negative otherwise. * Returns 0 on success, negative otherwise.
*/ */
static int static int
ice_get_rc_coalesce(struct ethtool_coalesce *ec, enum ice_container_type c_type, ice_get_rc_coalesce(struct ethtool_coalesce *ec, struct ice_ring_container *rc)
struct ice_ring_container *rc)
{ {
if (!rc->ring) if (!rc->ring)
return -EINVAL; return -EINVAL;
switch (c_type) { switch (rc->type) {
case ICE_RX_CONTAINER: case ICE_RX_CONTAINER:
ec->use_adaptive_rx_coalesce = ITR_IS_DYNAMIC(rc); ec->use_adaptive_rx_coalesce = ITR_IS_DYNAMIC(rc);
ec->rx_coalesce_usecs = rc->itr_setting; 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, ...@@ -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; ec->tx_coalesce_usecs = rc->itr_setting;
break; break;
default: 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; return -EINVAL;
} }
...@@ -3557,18 +3550,18 @@ static int ...@@ -3557,18 +3550,18 @@ static int
ice_get_q_coalesce(struct ice_vsi *vsi, struct ethtool_coalesce *ec, int q_num) 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 (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)) &vsi->rx_rings[q_num]->q_vector->rx))
return -EINVAL; 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)) &vsi->tx_rings[q_num]->q_vector->tx))
return -EINVAL; return -EINVAL;
} else if (q_num < vsi->num_rxq) { } 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)) &vsi->rx_rings[q_num]->q_vector->rx))
return -EINVAL; return -EINVAL;
} else if (q_num < vsi->num_txq) { } 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)) &vsi->tx_rings[q_num]->q_vector->tx))
return -EINVAL; return -EINVAL;
} else { } else {
...@@ -3620,7 +3613,6 @@ ice_get_per_q_coalesce(struct net_device *netdev, u32 q_num, ...@@ -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 * 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 * @ec: ethtool structure from user to update ITR settings
* @rc: ring container that the ITR values will come from * @rc: ring container that the ITR values will come from
* @vsi: VSI associated to the ring container * @vsi: VSI associated to the ring container
...@@ -3632,10 +3624,10 @@ ice_get_per_q_coalesce(struct net_device *netdev, u32 q_num, ...@@ -3632,10 +3624,10 @@ ice_get_per_q_coalesce(struct net_device *netdev, u32 q_num,
* Returns 0 on success, negative otherwise. * Returns 0 on success, negative otherwise.
*/ */
static int 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) 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; u32 use_adaptive_coalesce, coalesce_usecs;
struct ice_pf *pf = vsi->back; struct ice_pf *pf = vsi->back;
u16 itr_setting; u16 itr_setting;
...@@ -3643,7 +3635,7 @@ ice_set_rc_coalesce(enum ice_container_type c_type, struct ethtool_coalesce *ec, ...@@ -3643,7 +3635,7 @@ ice_set_rc_coalesce(enum ice_container_type c_type, struct ethtool_coalesce *ec,
if (!rc->ring) if (!rc->ring)
return -EINVAL; return -EINVAL;
switch (c_type) { switch (rc->type) {
case ICE_RX_CONTAINER: case ICE_RX_CONTAINER:
if (ec->rx_coalesce_usecs_high > ICE_MAX_INTRL || if (ec->rx_coalesce_usecs_high > ICE_MAX_INTRL ||
(ec->rx_coalesce_usecs_high && (ec->rx_coalesce_usecs_high &&
...@@ -3676,7 +3668,7 @@ ice_set_rc_coalesce(enum ice_container_type c_type, struct ethtool_coalesce *ec, ...@@ -3676,7 +3668,7 @@ ice_set_rc_coalesce(enum ice_container_type c_type, struct ethtool_coalesce *ec,
break; break;
default: default:
dev_dbg(ice_pf_to_dev(pf), "Invalid container type %d\n", dev_dbg(ice_pf_to_dev(pf), "Invalid container type %d\n",
c_type); rc->type);
return -EINVAL; return -EINVAL;
} }
...@@ -3725,22 +3717,22 @@ static int ...@@ -3725,22 +3717,22 @@ static int
ice_set_q_coalesce(struct ice_vsi *vsi, struct ethtool_coalesce *ec, int q_num) 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 (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->rx_rings[q_num]->q_vector->rx,
vsi)) vsi))
return -EINVAL; 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->tx_rings[q_num]->q_vector->tx,
vsi)) vsi))
return -EINVAL; return -EINVAL;
} else if (q_num < vsi->num_rxq) { } 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->rx_rings[q_num]->q_vector->rx,
vsi)) vsi))
return -EINVAL; return -EINVAL;
} else if (q_num < vsi->num_txq) { } 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->tx_rings[q_num]->q_vector->tx,
vsi)) vsi))
return -EINVAL; return -EINVAL;
......
...@@ -330,6 +330,11 @@ static inline bool ice_ring_is_xdp(struct ice_ring *ring) ...@@ -330,6 +330,11 @@ static inline bool ice_ring_is_xdp(struct ice_ring *ring)
return !!(ring->flags & ICE_TX_FLAGS_RING_XDP); return !!(ring->flags & ICE_TX_FLAGS_RING_XDP);
} }
enum ice_container_type {
ICE_RX_CONTAINER,
ICE_TX_CONTAINER,
};
struct ice_ring_container { struct ice_ring_container {
/* head of linked-list of rings */ /* head of linked-list of rings */
struct ice_ring *ring; struct ice_ring *ring;
...@@ -341,6 +346,7 @@ struct ice_ring_container { ...@@ -341,6 +346,7 @@ struct ice_ring_container {
u16 itr_setting:13; u16 itr_setting:13;
u16 itr_reserved:2; u16 itr_reserved:2;
u16 itr_mode:1; u16 itr_mode:1;
enum ice_container_type type;
}; };
struct ice_coalesce_stored { struct ice_coalesce_stored {
......
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