Due to recent refactors and code unification, there are now the following
properties of RSS queue list that can be checked by common infrastructure:

- Monotony (i.e. queue indices always increase, never decrease)
- No duplication (i.e. can't have the same index specified twice)
- Contiguousness (i.e. can't have holes in the queue list)

The latter is an optional feature that can be enabled with a flag. However,
previous hash code only enforced contiguousness for queue *regions* but not
queue *lists*, whereas after the refactor, all queue lists were required to
be contiguous. This is an unnecessary restriction, and it breaks backwards
compatibility.

Fix it by only specifying contiguousness requirement for the VLAN branch
where we are actually looking for a queue *region* not queue *list*.

Fixes: 0185303c2e24 ("net/i40e: refactor RSS flow parameter checks")

Signed-off-by: Anatoly Burakov <[email protected]>
---
 drivers/net/intel/i40e/i40e_hash.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/intel/i40e/i40e_hash.c 
b/drivers/net/intel/i40e/i40e_hash.c
index 3c1302469c..8b80d0a91c 100644
--- a/drivers/net/intel/i40e/i40e_hash.c
+++ b/drivers/net/intel/i40e/i40e_hash.c
@@ -1238,7 +1238,6 @@ i40e_hash_parse(struct rte_eth_dev *dev,
                },
                .max_actions = 1,
                .driver_ctx = dev->data->dev_private,
-               .rss_queues_contig = true,
                /* each pattern type will add specific check function */
        };
        const struct rte_flow_action_rss *rss_act;
@@ -1265,6 +1264,8 @@ i40e_hash_parse(struct rte_eth_dev *dev,
        /* VLAN path */
        if (is_vlan) {
                ac_param.check = i40e_hash_validate_queue_region;
+               /* queue regions must be contiguous */
+               ac_param.rss_queues_contig = true;
                ret = ci_flow_check_actions(actions, &ac_param, 
&parsed_actions, error);
                if (ret)
                        return ret;
-- 
2.47.3

Reply via email to