[dpdk-stable] [PATCH] net/mlx5: fix domains selection for meter policy

Li Zhang lizh at nvidia.com
Mon Oct 11 04:40:48 CEST 2021


Fate actions are different per domain.
When all the domains, ingress, egress and FDB (transfer),
can support all the policy actions, i.e. [SET_TAG],
the policy prepares resources for all the domains and
failure happens if one of the domains misses its fate action
in the policy action list.

Remove the domains missing their fate action
from the meter policy preparation.

Now, the policy will prepare a domain only when the domain supports
all the actions and when one of the domain fate actions is on the list.

Fixes: afb4aa4f ("net/mlx5: support meter policy operations")
Cc: stable at dpdk.org

Signed-off-by: Li Zhang <lizh at nvidia.com>
Acked-by: Matan Azrad <matan at nvidia.com>
---
 drivers/net/mlx5/mlx5_flow_dv.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index c6370cd1d6..ea737e3e35 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -17856,18 +17856,23 @@ flow_dv_validate_mtr_policy_acts(struct rte_eth_dev *dev,
 					"Doesn't support optional action");
 			}
 		}
-		if (action_flags[i] & MLX5_FLOW_ACTION_PORT_ID)
+		if (action_flags[i] & MLX5_FLOW_ACTION_PORT_ID) {
 			domain_color[i] = MLX5_MTR_DOMAIN_TRANSFER_BIT;
-		else if ((action_flags[i] &
+		} else if ((action_flags[i] &
 			  (MLX5_FLOW_ACTION_RSS | MLX5_FLOW_ACTION_QUEUE)) ||
-			 (action_flags[i] & MLX5_FLOW_ACTION_MARK))
+			  (action_flags[i] & MLX5_FLOW_ACTION_MARK)) {
 			/*
 			 * Only support MLX5_XMETA_MODE_LEGACY
 			 * so MARK action is only in ingress domain.
 			 */
 			domain_color[i] = MLX5_MTR_DOMAIN_INGRESS_BIT;
-		else
+		} else {
 			domain_color[i] = def_domain;
+			if (action_flags[i] &&
+			    !(action_flags[i] & MLX5_FLOW_FATE_ESWITCH_ACTIONS))
+				domain_color[i] &=
+				~MLX5_MTR_DOMAIN_TRANSFER_BIT;
+		}
 		if (action_flags[i] &
 		    MLX5_FLOW_ACTION_METER_WITH_TERMINATED_POLICY)
 			domain_color[i] &= hierarchy_domain;
-- 
2.27.0



More information about the stable mailing list