ethtool: Support for configurable RSS hash function
This patch extends the set/get_rxfh ethtool-options for getting or setting the RSS hash function. It modifies drivers implementation of set/get_rxfh accordingly. This change also delegates the responsibility of checking whether a modification to a certain RX flow hash parameter is supported to the driver implementation of set_rxfh. User-kernel API is done through the new hfunc bitmask field in the ethtool_rxfh struct. A bit set in the hfunc field is corresponding to an index in the new string-set ETH_SS_RSS_HASH_FUNCS. Got approval from most of the relevant driver maintainers that their driver is using Toeplitz, and for the few that didn't answered, also assumed it is Toeplitz. Cc: Tom Lendacky <thomas.lendacky@amd.com> Cc: Ariel Elior <ariel.elior@qlogic.com> Cc: Prashant Sreedharan <prashant@broadcom.com> Cc: Michael Chan <mchan@broadcom.com> Cc: Hariprasad S <hariprasad@chelsio.com> Cc: Sathya Perla <sathya.perla@emulex.com> Cc: Subbu Seetharaman <subbu.seetharaman@emulex.com> Cc: Ajit Khaparde <ajit.khaparde@emulex.com> Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Cc: Jesse Brandeburg <jesse.brandeburg@intel.com> Cc: Bruce Allan <bruce.w.allan@intel.com> Cc: Carolyn Wyborny <carolyn.wyborny@intel.com> Cc: Don Skidmore <donald.c.skidmore@intel.com> Cc: Greg Rose <gregory.v.rose@intel.com> Cc: Matthew Vick <matthew.vick@intel.com> Cc: John Ronciak <john.ronciak@intel.com> Cc: Mitch Williams <mitch.a.williams@intel.com> Cc: Amir Vadai <amirv@mellanox.com> Cc: Solarflare linux maintainers <linux-net-drivers@solarflare.com> Cc: Shradha Shah <sshah@solarflare.com> Cc: Shreyas Bhatewara <sbhatewara@vmware.com> Cc: "VMware, Inc." <pv-drivers@vmware.com> Cc: Ben Hutchings <ben@decadent.org.uk> Signed-off-by: Eyal Perry <eyalpe@mellanox.com> Signed-off-by: Amir Vadai <amirv@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
18b5427ae1
commit
892311f66f
@@ -534,6 +534,7 @@ struct ethtool_pauseparam {
|
||||
* @ETH_SS_NTUPLE_FILTERS: Previously used with %ETHTOOL_GRXNTUPLE;
|
||||
* now deprecated
|
||||
* @ETH_SS_FEATURES: Device feature names
|
||||
* @ETH_SS_RSS_HASH_FUNCS: RSS hush function names
|
||||
*/
|
||||
enum ethtool_stringset {
|
||||
ETH_SS_TEST = 0,
|
||||
@@ -541,6 +542,7 @@ enum ethtool_stringset {
|
||||
ETH_SS_PRIV_FLAGS,
|
||||
ETH_SS_NTUPLE_FILTERS,
|
||||
ETH_SS_FEATURES,
|
||||
ETH_SS_RSS_HASH_FUNCS,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -884,6 +886,8 @@ struct ethtool_rxfh_indir {
|
||||
* @key_size: On entry, the array size of the user buffer for the hash key,
|
||||
* which may be zero. On return from %ETHTOOL_GRSSH, the size of the
|
||||
* hardware hash key.
|
||||
* @hfunc: Defines the current RSS hash function used by HW (or to be set to).
|
||||
* Valid values are one of the %ETH_RSS_HASH_*.
|
||||
* @rsvd: Reserved for future extensions.
|
||||
* @rss_config: RX ring/queue index for each hash value i.e., indirection table
|
||||
* of @indir_size __u32 elements, followed by hash key of @key_size
|
||||
@@ -893,14 +897,16 @@ struct ethtool_rxfh_indir {
|
||||
* 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.
|
||||
* values. An hfunc of zero means that hash function setting is not requested.
|
||||
*/
|
||||
struct ethtool_rxfh {
|
||||
__u32 cmd;
|
||||
__u32 rss_context;
|
||||
__u32 indir_size;
|
||||
__u32 key_size;
|
||||
__u32 rsvd[2];
|
||||
__u8 hfunc;
|
||||
__u8 rsvd8[3];
|
||||
__u32 rsvd32;
|
||||
__u32 rss_config[0];
|
||||
};
|
||||
#define ETH_RXFH_INDIR_NO_CHANGE 0xffffffff
|
||||
|
Reference in New Issue
Block a user