From: Li Zhang Date: Mon, 11 Oct 2021 02:40:48 +0000 (+0300) Subject: net/mlx5: fix domains selection for meter policy X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=771253ea8f27cdb84fe17bc2d6649488637337d6;p=dpdk.git 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 --- 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;