]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
ice: fix changing of ring descriptor size (ethtool -G)
authorBruce Allan <bruce.w.allan@intel.com>
Thu, 20 Sep 2018 00:23:11 +0000 (17:23 -0700)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Fri, 28 Sep 2018 18:16:36 +0000 (11:16 -0700)
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>
drivers/net/ethernet/intel/ice/ice.h
drivers/net/ethernet/intel/ice/ice_ethtool.c

index 9cf233d085d80943f487d6ad84982d0ced31d72e..e84a612ffa71049c1548e83aaabd4a1a33dd1bad 100644 (file)
@@ -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
index db2c502ae9327edfe8365fec085e749b3ccfd037..96923580f2a6c2fdb88c88c2f1e88f0b4154f67c 100644 (file)
@@ -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 &&