[v3,2/4] net/mlx5: fix parameters verification in HWS table create
Checks
Commit Message
Modified the conditionals in `flow_hw_table_create()` to use bitwise
AND instead of equality checks when assessing
`table_cfg->attr->specialize` bitmask.
This will allow for greater flexibility as the bitmask may encapsulate
multiple flags.
The patch maintains the previous behavior with single flag values,
while providing support for multiple flags.
Fixes: 240b77cfcba5 ("net/mlx5: enable hint in async flow table")
Cc: stable@dpdk.org
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/mlx5_flow_hw.c | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
@@ -4390,12 +4390,23 @@ flow_hw_table_create(struct rte_eth_dev *dev,
matcher_attr.rule.num_log = rte_log2_u32(nb_flows);
/* Parse hints information. */
if (attr->specialize) {
- if (attr->specialize == RTE_FLOW_TABLE_SPECIALIZE_TRANSFER_WIRE_ORIG)
- matcher_attr.optimize_flow_src = MLX5DR_MATCHER_FLOW_SRC_WIRE;
- else if (attr->specialize == RTE_FLOW_TABLE_SPECIALIZE_TRANSFER_VPORT_ORIG)
- matcher_attr.optimize_flow_src = MLX5DR_MATCHER_FLOW_SRC_VPORT;
- else
- DRV_LOG(INFO, "Unsupported hint value %x", attr->specialize);
+ uint32_t val = RTE_FLOW_TABLE_SPECIALIZE_TRANSFER_WIRE_ORIG |
+ RTE_FLOW_TABLE_SPECIALIZE_TRANSFER_VPORT_ORIG;
+
+ if ((attr->specialize & val) == val) {
+ DRV_LOG(INFO, "Invalid hint value %x",
+ attr->specialize);
+ rte_errno = EINVAL;
+ goto it_error;
+ }
+ if (attr->specialize &
+ RTE_FLOW_TABLE_SPECIALIZE_TRANSFER_WIRE_ORIG)
+ matcher_attr.optimize_flow_src =
+ MLX5DR_MATCHER_FLOW_SRC_WIRE;
+ else if (attr->specialize &
+ RTE_FLOW_TABLE_SPECIALIZE_TRANSFER_VPORT_ORIG)
+ matcher_attr.optimize_flow_src =
+ MLX5DR_MATCHER_FLOW_SRC_VPORT;
}
/* Build the item template. */
for (i = 0; i < nb_item_templates; i++) {