net/mlx5: fix redundant flow after RSS expansion

When RSS expand, if there is no expansion happened but completion
happened because user only input next protocol field instead of item
i.e, ether type == 0x8100 instead of VLAN, an extra flow is created with
missing item in order to filter traffic strictly.

However, after [1] and [2] the rte_flow_item_eth itself is enough to
filter out VLAN traffic, the VLAN item is not needed.

[1]: commit 09315fc838 ("ethdev: add VLAN attributes to ethernet and VLAN items")
[2]: commit 86b59a1af6 ("net/mlx5: support VLAN matching fields")

This redundant flow will cause failure in some scenarios on group 0 due
to they are the same FTE.

Fixes: fc2dd8dd49 ("ethdev: fix expand RSS flows")
Cc: stable@dpdk.org

Signed-off-by: Xiaoyu Min <jackmin@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
This commit is contained in:
Xiaoyu Min 2021-03-30 21:40:32 +08:00 committed by Raslan Darawsheh
parent 61cfa035d3
commit c1d397a67e

View File

@ -384,22 +384,6 @@ mlx5_flow_expand_rss(struct mlx5_flow_expand_rss *buf, size_t size,
}
node = *next_node ? &graph[*next_node] : NULL;
};
/* no expanded flows but we have missed item, create one rule for it */
if (buf->entries == 1 && missed != 0) {
elt = 2;
lsize += elt * sizeof(*item) + user_pattern_size;
if (lsize <= size) {
buf->entry[buf->entries].priority = 1;
buf->entry[buf->entries].pattern = addr;
buf->entries++;
flow_items[0].type = missed_item.type;
flow_items[1].type = RTE_FLOW_ITEM_TYPE_END;
rte_memcpy(addr, buf->entry[0].pattern,
user_pattern_size);
addr = (void *)(((uintptr_t)addr) + user_pattern_size);
rte_memcpy(addr, flow_items, elt * sizeof(*item));
}
}
return lsize;
}