From: Victor Julien <vic...@inliniac.net> X(L)710 supports symmetric RSS hashing. See "7.1.9.3 Symmetric hash" in the "IntelĀ® Ethernet Controller XL710 Datasheet".
Support the ethtool rx-flow-hash 'x' option. Set: # ethtool -N $DEV rx-flow-hash tcp4 sdfnx Check: # ethtool -n $DEV rx-flow-hash tcp4 TCP over IPV4 flows use these fields for computing Hash flow key: IP SA IP DA L4 bytes 0 & 1 [TCP/UDP src port] L4 bytes 2 & 3 [TCP/UDP dst port] Symmetric RSS hash TODO it seems we need to enable HSYM per port and per pctype. When disabling for a pctype we can't simply disable for a port as well as that affects other pctypes. Simply leaving it enabled is not good hygene, so perhaps we need some state keeping / deeper checking? Suggestions welcome. --- src/i40e_ethtool.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/i40e_ethtool.c b/src/i40e_ethtool.c index 1456ac5..10b5a62 100644 --- a/src/i40e_ethtool.c +++ b/src/i40e_ethtool.c @@ -285,6 +285,11 @@ static const char i40e_priv_flags_strings[][ETH_GSTRING_LEN] = { #endif /* HAVE_ETHTOOL_GET_SSET_COUNT */ +/* XXX this should not be necessary if we have an updated ethtool.h */ +#ifndef RXH_RSS_SYM +#define RXH_RSS_SYM (1 << 8) +#endif + /** * i40e_partition_setting_complaint - generic complaint for MFP restriction * @pf: the PF struct @@ -2340,6 +2345,7 @@ static int i40e_get_rss_hash_opts(struct i40e_pf *pf, struct ethtool_rxnfc *cmd) struct i40e_hw *hw = &pf->hw; u8 flow_pctype = 0; u64 i_set = 0; + u32 rss_hash_set = 0; cmd->data = 0; @@ -2379,6 +2385,7 @@ static int i40e_get_rss_hash_opts(struct i40e_pf *pf, struct ethtool_rxnfc *cmd) flow_pctype)) | ((u64)i40e_read_rx_ctl(hw, I40E_GLQF_HASH_INSET(1, flow_pctype)) << 32); + rss_hash_set = (u32)i40e_read_rx_ctl(hw, I40E_GLQF_HSYM(flow_pctype)); } /* Process bits of hash input set */ @@ -2401,6 +2408,8 @@ static int i40e_get_rss_hash_opts(struct i40e_pf *pf, struct ethtool_rxnfc *cmd) if (i_set & BIT_ULL(I40E_L3_V6_DST_SHIFT)) cmd->data |= RXH_IP_DST; } + if (rss_hash_set) + cmd->data |= RXH_RSS_SYM; } return 0; @@ -2716,6 +2725,7 @@ static int i40e_set_rss_hash_opt(struct i40e_pf *pf, struct ethtool_rxnfc *nfc) ((u64)i40e_read_rx_ctl(hw, I40E_PFQF_HENA(1)) << 32); u8 flow_pctype = 0; u64 i_set, i_setc; + uint32_t reg_val; if (pf->flags & I40E_FLAG_MFP_ENABLED) { dev_err(&pf->pdev->dev, @@ -2727,7 +2737,7 @@ static int i40e_set_rss_hash_opt(struct i40e_pf *pf, struct ethtool_rxnfc *nfc) * to queues on src and dst IPs and ports */ if (nfc->data & ~(RXH_IP_SRC | RXH_IP_DST | - RXH_L4_B_0_1 | RXH_L4_B_2_3)) + RXH_L4_B_0_1 | RXH_L4_B_2_3 | RXH_RSS_SYM)) return -EINVAL; switch (nfc->flow_type) { @@ -2805,6 +2815,27 @@ static int i40e_set_rss_hash_opt(struct i40e_pf *pf, struct ethtool_rxnfc *nfc) i40e_write_rx_ctl(hw, I40E_GLQF_HASH_INSET(1, flow_pctype), (u32)(i_set >> 32)); hena |= BIT_ULL(flow_pctype); + + if (nfc->data & RXH_RSS_SYM) { + /* enable HSYM on the port */ + reg_val = i40e_read_rx_ctl(hw, I40E_PRTQF_CTL_0); + if ((reg_val & I40E_PRTQF_CTL_0_HSYM_ENA_MASK) == 0) { + reg_val |= I40E_PRTQF_CTL_0_HSYM_ENA_MASK; + i40e_write_rx_ctl(hw, I40E_PRTQF_CTL_0, reg_val); + } + /* enable HSYM on the pctype */ + i40e_write_rx_ctl(hw, I40E_GLQF_HSYM(flow_pctype), 1UL); + } else { + /* disable HSYM on the port + XXX Disabling one (e.g. udp4) HSYM will disable for the entire port */ + reg_val = i40e_read_rx_ctl(hw, I40E_PRTQF_CTL_0); + if (reg_val & I40E_PRTQF_CTL_0_HSYM_ENA_MASK) { + reg_val &= ~I40E_PRTQF_CTL_0_HSYM_ENA_MASK; + i40e_write_rx_ctl(hw, I40E_PRTQF_CTL_0, reg_val); + } + /* disable HSYM on the pctype */ + i40e_write_rx_ctl(hw, I40E_GLQF_HSYM(flow_pctype), 0UL); + } } i40e_write_rx_ctl(hw, I40E_PFQF_HENA(0), (u32)hena); -- 2.7.4 ------------------------------------------------------------------------------ Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San Francisco, CA to explore cutting-edge tech and listen to tech luminaries present their vision of the future. This family event has something for everyone, including kids. Get more information and register today. http://sdm.link/attshape _______________________________________________ E1000-devel mailing list E1000-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/e1000-devel To learn more about Intel® Ethernet, visit http://communities.intel.com/community/wired