From 771253ea8f27cdb84fe17bc2d6649488637337d6 Mon Sep 17 00:00:00 2001 From: Li Zhang Date: Mon, 11 Oct 2021 05:40:48 +0300 Subject: [PATCH] net/mlx5: fix domains selection for meter policy 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: afb4aa4f122b ("net/mlx5: support meter policy operations") Cc: stable@dpdk.org Signed-off-by: Li Zhang Acked-by: Matan Azrad --- 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 23ee6a2a8b..e31d4d8468 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -17756,18 +17756,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.20.1