[dpdk-dev] [PATCH v1] net/ice: fix wrong IP RSS configuration template
From: Ting Xu <hidden>
Date: 2021-05-07 09:49:25
Subsystem:
networking drivers, the rest · Maintainers:
Andrew Lunn, "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Linus Torvalds
To enable IP fragment RSS hash, ICE_FLOW_SEG_HDR_IPV_FRAG is added to the
IP RSS configuration template, together with ICE_FLOW_SEG_HDR_IPV_OTHER.
It will cause error when associating flow profile. To fix this issue,
this patch only selects one of the above two segment header types based
on rss types.
Fixes: 672f321d09ed ("net/ice: support RSS hash for IP fragment")
Cc: stable@dpdk.org
Signed-off-by: Ting Xu <redacted>
---
drivers/net/ice/ice_hash.c | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/drivers/net/ice/ice_hash.c b/drivers/net/ice/ice_hash.c
index 2bf8983f5a..9e52f1c4a7 100644
--- a/drivers/net/ice/ice_hash.c
+++ b/drivers/net/ice/ice_hash.c@@ -111,7 +111,6 @@ ice_hash_parse_pattern_action(struct ice_adapter *ad, /* Rss configuration template */ struct ice_rss_hash_cfg ipv4_tmplt = { ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV4 | - ICE_FLOW_SEG_HDR_IPV_FRAG | ICE_FLOW_SEG_HDR_IPV_OTHER, ICE_FLOW_HASH_ETH | ICE_FLOW_HASH_IPV4, ICE_RSS_OUTER_HEADERS,
@@ -152,8 +151,7 @@ struct ice_rss_hash_cfg ipv6_tmplt = { struct ice_rss_hash_cfg ipv6_frag_tmplt = { ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV6 | - ICE_FLOW_SEG_HDR_IPV_FRAG | - ICE_FLOW_SEG_HDR_IPV_OTHER, + ICE_FLOW_SEG_HDR_IPV_FRAG, ICE_FLOW_HASH_ETH | ICE_FLOW_HASH_IPV6, ICE_RSS_ANY_HEADERS, 0
@@ -657,17 +655,20 @@ ice_refine_hash_cfg_l234(struct ice_rss_hash_cfg *hash_cfg, ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_NONFRAG_IPV4_SCTP)) { - if (rss_type & ETH_RSS_FRAG_IPV4) - *hash_flds &= - ~(BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_ID)); - else if (rss_type & ETH_RSS_L3_SRC_ONLY) + if (rss_type & ETH_RSS_FRAG_IPV4) { + *addl_hdrs |= ICE_FLOW_SEG_HDR_IPV_FRAG; + *addl_hdrs &= ~(ICE_FLOW_SEG_HDR_IPV_FRAG); + *hash_flds |= + BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_ID); + } else if (rss_type & ETH_RSS_L3_SRC_ONLY) { *hash_flds &= ~(BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA)); - else if (rss_type & ETH_RSS_L3_DST_ONLY) + } else if (rss_type & ETH_RSS_L3_DST_ONLY) { *hash_flds &= ~(BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA)); - else if (rss_type & + } else if (rss_type & (ETH_RSS_L4_SRC_ONLY | - ETH_RSS_L4_DST_ONLY)) + ETH_RSS_L4_DST_ONLY)) { *hash_flds &= ~ICE_FLOW_HASH_IPV4; + } } else { *hash_flds &= ~ICE_FLOW_HASH_IPV4; }
--
2.17.1