ethtool: Name the 'no change' value for setting RSS hash key but not indir table
authorBen Hutchings <ben@decadent.org.uk>
Thu, 15 May 2014 00:41:23 +0000 (01:41 +0100)
committerBen Hutchings <ben@decadent.org.uk>
Mon, 19 May 2014 00:18:19 +0000 (01:18 +0100)
We usually allocate special values of u32 fields starting from the top
down, so also change the value to 0xffffffff.  As these operations
haven't been included in a stable release yet, it's not too late to
change.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
include/uapi/linux/ethtool.h
net/core/ethtool.c

index d47d31d..cba18e3 100644 (file)
@@ -850,7 +850,8 @@ struct ethtool_rxfh_indir {
  * struct ethtool_rxfh - command to get/set RX flow hash indir or/and hash key.
  * @cmd: Specific command number - %ETHTOOL_GRSSH or %ETHTOOL_SRSSH
  * @rss_context: RSS context identifier.
- * @indir_size: On entry, the array size of the user buffer, which may be zero.
+ * @indir_size: On entry, the array size of the user buffer, which may be zero,
+ *             or (for %ETHTOOL_SRSSH), %ETH_RXFH_INDIR_NO_CHANGE.
  *             On return from %ETHTOOL_GRSSH, the array size of the hardware
  *             indirection table.
  * @key_size:  On entry, the array size of the user buffer in bytes,
@@ -861,10 +862,10 @@ struct ethtool_rxfh_indir {
  *             of size @indir_size followed by hash key of size @key_size.
  *
  * For %ETHTOOL_GRSSH, a @indir_size and key_size of zero means that only the
- * size should be returned.  For %ETHTOOL_SRSSH, a @indir_size of 0xDEADBEEF
- * means that indir table setting is not requested and a @indir_size of zero
- * means the indir table should be reset to default values.  This last feature
- * is not supported by the original implementations.
+ * size should be returned.  For %ETHTOOL_SRSSH, an @indir_size of
+ * %ETH_RXFH_INDIR_NO_CHANGE means that indir table setting is not requested
+ * and a @indir_size of zero means the indir table should be reset to default
+ * values.
  */
 struct ethtool_rxfh {
        __u32   cmd;
@@ -874,6 +875,7 @@ struct ethtool_rxfh {
        __u32   rsvd[2];
        __u32   rss_config[0];
 };
+#define ETH_RXFH_INDIR_NO_CHANGE       0xffffffff
 
 /**
  * struct ethtool_rx_ntuple_flow_spec - specification for RX flow filter
index c834cb2..7156fe5 100644 (file)
@@ -803,12 +803,13 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev,
 
        /* If either indir or hash key is valid, proceed further.
         */
-       if ((user_indir_size && ((user_indir_size != 0xDEADBEEF) &&
-                                user_indir_size != dev_indir_size)) ||
+       if ((user_indir_size &&
+            user_indir_size != ETH_RXFH_INDIR_NO_CHANGE &&
+            user_indir_size != dev_indir_size) ||
            (user_key_size && (user_key_size != dev_key_size)))
                return -EINVAL;
 
-       if (user_indir_size != 0xDEADBEEF)
+       if (user_indir_size != ETH_RXFH_INDIR_NO_CHANGE)
                indir_bytes = dev_indir_size * sizeof(indir[0]);
 
        rss_config = kzalloc(indir_bytes + user_key_size, GFP_USER);
@@ -821,9 +822,10 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev,
                goto out;
 
        /* user_indir_size == 0 means reset the indir table to default.
-        * user_indir_size == 0xDEADBEEF means indir setting is not requested.
+        * user_indir_size == ETH_RXFH_INDIR_NO_CHANGE means leave it unchanged.
         */
-       if (user_indir_size && user_indir_size != 0xDEADBEEF) {
+       if (user_indir_size &&
+           user_indir_size != ETH_RXFH_INDIR_NO_CHANGE) {
                indir = (u32 *)rss_config;
                ret = ethtool_copy_validate_indir(indir,
                                                  useraddr + rss_cfg_offset,