When creating vport actions for hotplugged SF/VF representors in
flow_hw_create_vport_action(), the function incorrectly used
is_unified_fdb(priv) where priv is the representor's private data.

However, the vport action is stored in proxy_priv->hw_vport[] and
will be used by flows on the proxy port. Since representors have
unified_fdb_en=false while the proxy port (PF) may have it enabled,
this caused a flag mismatch:

- Proxy port (port 0): unified FDB enabled
- SF representors (ports 2, 3): unified FDB disabled
- Vport actions for SFs created with MLX5DR_ACTION_FLAG_HWS_FDB
- But flows on proxy port use unified FDB mode

This resulted in REPRESENTED_PORT actions counting packets correctly
(flow matches work) but not actually forwarding them to the
destination vport.

Fix by using is_unified_fdb(proxy_priv) to ensure the vport action
flags match the proxy port's FDB mode, which is where the action
will actually be used.

Fixes: flow_hw_create_vport_action() vport flag selection
Signed-off-by: Max Tottenham <[email protected]>
---
 drivers/net/mlx5/mlx5_flow_hw.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index c41b99746f..a9d342579b 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -9528,7 +9528,7 @@ flow_hw_create_vport_action(struct rte_eth_dev *dev)
        }
        proxy_priv->hw_vport[port_id] = mlx5dr_action_create_dest_vport
                        (proxy_priv->dr_ctx, priv->dev_port,
-                        is_unified_fdb(priv) ?
+                        is_unified_fdb(proxy_priv) ?
                                (MLX5DR_ACTION_FLAG_HWS_FDB_RX |
                                 MLX5DR_ACTION_FLAG_HWS_FDB_TX |
                                 MLX5DR_ACTION_FLAG_HWS_FDB_UNIFIED) :
-- 
2.52.0

Reply via email to