When a RSS rule with symmetric hash function, the RSS type shouldn't carry with SRC/DST_ONLY. This patch adds invalid RSS type check for the case.
Fixes: 91f27b2e39ab ("net/iavf: refactor RSS") Signed-off-by: Simei Su <simei...@intel.com> --- drivers/net/iavf/iavf_hash.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c index be821b6..c58566c 100644 --- a/drivers/net/iavf/iavf_hash.c +++ b/drivers/net/iavf/iavf_hash.c @@ -834,10 +834,22 @@ static struct rss_attr_type rss_attr_to_valid_type[] = { }; static bool -iavf_any_invalid_rss_type(uint64_t rss_type, uint64_t allow_rss_type) +iavf_any_invalid_rss_type(enum rte_eth_hash_function func, + uint64_t rss_type, uint64_t allow_rss_type) { uint32_t i; + /** + * Check if SRC/DST_ONLY is set for SYMMETRIC_TOEPLITZ + * hash function. + */ + if (func == RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) { + if (rss_type & ((VALID_RSS_ATTR & + ~RTE_ETH_RSS_L3_PRE64) | + ~(VALID_RSS_IPV4 | VALID_RSS_IPV6))) + return true; + } + /* check invalid combination */ for (i = 0; i < RTE_DIM(invalid_rss_comb); i++) { if (__builtin_popcountll(rss_type & invalid_rss_comb[i]) > 1) @@ -917,7 +929,7 @@ iavf_hash_parse_action(struct iavf_pattern_match_item *match_item, */ rss_type = rte_eth_rss_hf_refine(rss_type); - if (iavf_any_invalid_rss_type(rss_type, + if (iavf_any_invalid_rss_type(rss->func, rss_type, match_item->input_set_mask)) return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION, -- 2.9.5