ethtool: Name the 'no change' value for setting RSS hash key but not indir table
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>
This commit is contained in:
parent
fb95cd8d14
commit
7455fa2422
|
@ -850,7 +850,8 @@ struct ethtool_rxfh_indir {
|
||||||
* struct ethtool_rxfh - command to get/set RX flow hash indir or/and hash key.
|
* struct ethtool_rxfh - command to get/set RX flow hash indir or/and hash key.
|
||||||
* @cmd: Specific command number - %ETHTOOL_GRSSH or %ETHTOOL_SRSSH
|
* @cmd: Specific command number - %ETHTOOL_GRSSH or %ETHTOOL_SRSSH
|
||||||
* @rss_context: RSS context identifier.
|
* @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
|
* On return from %ETHTOOL_GRSSH, the array size of the hardware
|
||||||
* indirection table.
|
* indirection table.
|
||||||
* @key_size: On entry, the array size of the user buffer in bytes,
|
* @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.
|
* 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
|
* 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
|
* size should be returned. For %ETHTOOL_SRSSH, an @indir_size of
|
||||||
* means that indir table setting is not requested and a @indir_size of zero
|
* %ETH_RXFH_INDIR_NO_CHANGE means that indir table setting is not requested
|
||||||
* means the indir table should be reset to default values. This last feature
|
* and a @indir_size of zero means the indir table should be reset to default
|
||||||
* is not supported by the original implementations.
|
* values.
|
||||||
*/
|
*/
|
||||||
struct ethtool_rxfh {
|
struct ethtool_rxfh {
|
||||||
__u32 cmd;
|
__u32 cmd;
|
||||||
|
@ -874,6 +875,7 @@ struct ethtool_rxfh {
|
||||||
__u32 rsvd[2];
|
__u32 rsvd[2];
|
||||||
__u32 rss_config[0];
|
__u32 rss_config[0];
|
||||||
};
|
};
|
||||||
|
#define ETH_RXFH_INDIR_NO_CHANGE 0xffffffff
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct ethtool_rx_ntuple_flow_spec - specification for RX flow filter
|
* struct ethtool_rx_ntuple_flow_spec - specification for RX flow filter
|
||||||
|
|
|
@ -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 either indir or hash key is valid, proceed further.
|
||||||
*/
|
*/
|
||||||
if ((user_indir_size && ((user_indir_size != 0xDEADBEEF) &&
|
if ((user_indir_size &&
|
||||||
user_indir_size != dev_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)))
|
(user_key_size && (user_key_size != dev_key_size)))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (user_indir_size != 0xDEADBEEF)
|
if (user_indir_size != ETH_RXFH_INDIR_NO_CHANGE)
|
||||||
indir_bytes = dev_indir_size * sizeof(indir[0]);
|
indir_bytes = dev_indir_size * sizeof(indir[0]);
|
||||||
|
|
||||||
rss_config = kzalloc(indir_bytes + user_key_size, GFP_USER);
|
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;
|
goto out;
|
||||||
|
|
||||||
/* user_indir_size == 0 means reset the indir table to default.
|
/* 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;
|
indir = (u32 *)rss_config;
|
||||||
ret = ethtool_copy_validate_indir(indir,
|
ret = ethtool_copy_validate_indir(indir,
|
||||||
useraddr + rss_cfg_offset,
|
useraddr + rss_cfg_offset,
|
||||||
|
|
Loading…
Reference in New Issue