mirror of https://gitee.com/openkylin/linux.git
ice: fix changing of ring descriptor size (ethtool -G)
rx_mini_pending was set to an incorrect value. This was causing EINVAL to always be returned to 'ethtool -G'. The driver does not support mini or jumbo rings so the respective settings should be zero. Also, change the valid range of the number of descriptors in the rings to make the code simpler and easier for users to understand (this removes the valid settings of 8 and 16). Add a system log message indicating when the number is rounded-up from what the user specifies with the 'ethtool -G' command (i.e. when it is not a multiple of 32), and update the log message when a user-provided value is out of range to also indicate the stride. Signed-off-by: Bruce Allan <bruce.w.allan@intel.com> Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
7d86cf3840
commit
3b6bf296c4
|
@ -39,9 +39,9 @@
|
|||
extern const char ice_drv_ver[];
|
||||
#define ICE_BAR0 0
|
||||
#define ICE_DFLT_NUM_DESC 128
|
||||
#define ICE_MIN_NUM_DESC 8
|
||||
#define ICE_MAX_NUM_DESC 8160
|
||||
#define ICE_REQ_DESC_MULTIPLE 32
|
||||
#define ICE_MIN_NUM_DESC ICE_REQ_DESC_MULTIPLE
|
||||
#define ICE_MAX_NUM_DESC 8160
|
||||
#define ICE_DFLT_TRAFFIC_CLASS BIT(0)
|
||||
#define ICE_INT_NAME_STR_LEN (IFNAMSIZ + 16)
|
||||
#define ICE_ETHTOOL_FWVER_LEN 32
|
||||
|
|
|
@ -1198,9 +1198,11 @@ ice_get_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring)
|
|||
ring->tx_max_pending = ICE_MAX_NUM_DESC;
|
||||
ring->rx_pending = vsi->rx_rings[0]->count;
|
||||
ring->tx_pending = vsi->tx_rings[0]->count;
|
||||
ring->rx_mini_pending = ICE_MIN_NUM_DESC;
|
||||
|
||||
/* Rx mini and jumbo rings are not supported */
|
||||
ring->rx_mini_max_pending = 0;
|
||||
ring->rx_jumbo_max_pending = 0;
|
||||
ring->rx_mini_pending = 0;
|
||||
ring->rx_jumbo_pending = 0;
|
||||
}
|
||||
|
||||
|
@ -1218,14 +1220,23 @@ ice_set_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring)
|
|||
ring->tx_pending < ICE_MIN_NUM_DESC ||
|
||||
ring->rx_pending > ICE_MAX_NUM_DESC ||
|
||||
ring->rx_pending < ICE_MIN_NUM_DESC) {
|
||||
netdev_err(netdev, "Descriptors requested (Tx: %d / Rx: %d) out of range [%d-%d]\n",
|
||||
netdev_err(netdev, "Descriptors requested (Tx: %d / Rx: %d) out of range [%d-%d] (increment %d)\n",
|
||||
ring->tx_pending, ring->rx_pending,
|
||||
ICE_MIN_NUM_DESC, ICE_MAX_NUM_DESC);
|
||||
ICE_MIN_NUM_DESC, ICE_MAX_NUM_DESC,
|
||||
ICE_REQ_DESC_MULTIPLE);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
new_tx_cnt = ALIGN(ring->tx_pending, ICE_REQ_DESC_MULTIPLE);
|
||||
if (new_tx_cnt != ring->tx_pending)
|
||||
netdev_info(netdev,
|
||||
"Requested Tx descriptor count rounded up to %d\n",
|
||||
new_tx_cnt);
|
||||
new_rx_cnt = ALIGN(ring->rx_pending, ICE_REQ_DESC_MULTIPLE);
|
||||
if (new_rx_cnt != ring->rx_pending)
|
||||
netdev_info(netdev,
|
||||
"Requested Rx descriptor count rounded up to %d\n",
|
||||
new_rx_cnt);
|
||||
|
||||
/* if nothing to do return success */
|
||||
if (new_tx_cnt == vsi->tx_rings[0]->count &&
|
||||
|
|
Loading…
Reference in New Issue