patches for DPDK stable branches
 help / color / mirror / Atom feed
* [PATCH] net/mlx5: fix missing RSS validation with meter policy
@ 2021-11-15 11:35 Bing Zhao
  2021-11-15 14:51 ` [PATCH v2] " Bing Zhao
  0 siblings, 1 reply; 3+ messages in thread
From: Bing Zhao @ 2021-11-15 11:35 UTC (permalink / raw)
  To: viacheslavo, matan; +Cc: dev, rasland, lizh, stable

The RSS can be one of the fate actions when creating a meter with
policy. In the previous implementation, the RSS validation was missed
when creating a flow rule with such meter due to the fact that a
policy meter was created firstly and then used in the rule. In the
stage of meter creation, no rte_flow_item* information was provided.

A unnecessary RSS expansion might be called since the validation was
missed and would cause an unexpected error of the rule creation. Even
though the rule should be rejected from the very beginning, it would
cause confusion. There might be some other errors when the validation
was missed.

Adding the RSS validation inside the meter action validation will
prevent the code from continuing when there is a conflict between the
items, other actions and the policy meter RSS action.

Fixes: 444320186393 ("net/mlx5: support meter creation with policy")
Cc: lizh@nvidia.com
Cc: stable@dpdk.org

Signed-off-by: Bing Zhao <bingz@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
---
 drivers/net/mlx5/mlx5_flow_dv.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index 287a17d956..da975e0351 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -5133,6 +5133,8 @@ flow_dv_modify_hdr_action_max(struct rte_eth_dev *dev __rte_unused,
  *   Pointer to rte_eth_dev structure.
  * @param[in] action_flags
  *   Bit-fields that holds the actions detected until now.
+ * @param[in] item_flags
+ *   Holds the items detected.
  * @param[in] action
  *   Pointer to the meter action.
  * @param[in] attr
@@ -5147,7 +5149,7 @@ flow_dv_modify_hdr_action_max(struct rte_eth_dev *dev __rte_unused,
  */
 static int
 mlx5_flow_validate_action_meter(struct rte_eth_dev *dev,
-				uint64_t action_flags,
+				uint64_t action_flags, uint64_t item_flags,
 				const struct rte_flow_action *action,
 				const struct rte_flow_attr *attr,
 				const struct rte_flow_item *port_id_item,
@@ -5251,6 +5253,27 @@ mlx5_flow_validate_action_meter(struct rte_eth_dev *dev,
 						NULL,
 						"Flow and meter policy "
 						"have different src port.");
+		} else if (mtr_policy->is_rss) {
+			struct mlx5_meter_policy_action_container *acg =
+				&mtr_policy->act_cnt[RTE_COLOR_GREEN];
+			struct mlx5_meter_policy_action_container *acy =
+				&mtr_policy->act_cnt[RTE_COLOR_YELLOW];
+			const struct rte_flow_action *rss_act;
+			int ret;
+
+			MLX5_ASSERT(acg->fate_action ==
+				    MLX5_FLOW_FATE_SHARED_RSS ||
+				    acy->fate_action ==
+				    MLX5_FLOW_FATE_SHARED_RSS);
+			if (acg->fate_action == MLX5_FLOW_FATE_SHARED_RSS)
+				rss_act = acg->rss;
+			else rss_act = acy->rss;
+
+			ret = mlx5_flow_validate_action_rss(rss_act,
+					action_flags, dev, attr,
+					item_flags, error);
+			if (ret)
+				return ret;
 		}
 		*def_policy = false;
 	}
@@ -7684,6 +7707,7 @@ flow_dv_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attr,
 		case RTE_FLOW_ACTION_TYPE_METER:
 			ret = mlx5_flow_validate_action_meter(dev,
 							      action_flags,
+							      item_flags,
 							      actions, attr,
 							      port_id_item,
 							      &def_policy,
-- 
2.21.0


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH v2] net/mlx5: fix missing RSS validation with meter policy
  2021-11-15 11:35 [PATCH] net/mlx5: fix missing RSS validation with meter policy Bing Zhao
@ 2021-11-15 14:51 ` Bing Zhao
  2021-11-16  9:25   ` Raslan Darawsheh
  0 siblings, 1 reply; 3+ messages in thread
From: Bing Zhao @ 2021-11-15 14:51 UTC (permalink / raw)
  To: viacheslavo, matan; +Cc: dev, rasland, lizh, stable

The RSS can be one of the fate actions when creating a meter with
policy. In the previous implementation, the RSS validation was missed
when creating a flow rule with such meter due to the fact that a
policy meter was created firstly and then used in the rule. In the
stage of meter creation, no rte_flow_item* information was provided.

A unnecessary RSS expansion might be called since the validation was
missed and would cause an unexpected error of the rule creation. Even
though the rule should be rejected from the very beginning, it would
cause confusion. There might be some other errors when the validation
was missed.

Adding the RSS validation inside the meter action validation will
prevent the code from continuing when there is a conflict between the
items, other actions and the policy meter RSS action.

Fixes: 444320186393 ("net/mlx5: support meter creation with policy")
Cc: lizh@nvidia.com
Cc: stable@dpdk.org

Signed-off-by: Bing Zhao <bingz@nvidia.com>
Reviewed-by: Li Zhang <lizh@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
---
v2: fix the coding style issue.
---
 drivers/net/mlx5/mlx5_flow_dv.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index 287a17d956..7b32c06fc6 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -5133,6 +5133,8 @@ flow_dv_modify_hdr_action_max(struct rte_eth_dev *dev __rte_unused,
  *   Pointer to rte_eth_dev structure.
  * @param[in] action_flags
  *   Bit-fields that holds the actions detected until now.
+ * @param[in] item_flags
+ *   Holds the items detected.
  * @param[in] action
  *   Pointer to the meter action.
  * @param[in] attr
@@ -5147,7 +5149,7 @@ flow_dv_modify_hdr_action_max(struct rte_eth_dev *dev __rte_unused,
  */
 static int
 mlx5_flow_validate_action_meter(struct rte_eth_dev *dev,
-				uint64_t action_flags,
+				uint64_t action_flags, uint64_t item_flags,
 				const struct rte_flow_action *action,
 				const struct rte_flow_attr *attr,
 				const struct rte_flow_item *port_id_item,
@@ -5251,6 +5253,27 @@ mlx5_flow_validate_action_meter(struct rte_eth_dev *dev,
 						NULL,
 						"Flow and meter policy "
 						"have different src port.");
+		} else if (mtr_policy->is_rss) {
+			struct mlx5_meter_policy_action_container *acg =
+				&mtr_policy->act_cnt[RTE_COLOR_GREEN];
+			struct mlx5_meter_policy_action_container *acy =
+				&mtr_policy->act_cnt[RTE_COLOR_YELLOW];
+			const struct rte_flow_action *rss_act;
+			int ret;
+
+			MLX5_ASSERT(acg->fate_action ==
+				    MLX5_FLOW_FATE_SHARED_RSS ||
+				    acy->fate_action ==
+				    MLX5_FLOW_FATE_SHARED_RSS);
+			if (acg->fate_action == MLX5_FLOW_FATE_SHARED_RSS)
+				rss_act = acg->rss;
+			else
+				rss_act = acy->rss;
+			ret = mlx5_flow_validate_action_rss(rss_act,
+					action_flags, dev, attr,
+					item_flags, error);
+			if (ret)
+				return ret;
 		}
 		*def_policy = false;
 	}
@@ -7684,6 +7707,7 @@ flow_dv_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attr,
 		case RTE_FLOW_ACTION_TYPE_METER:
 			ret = mlx5_flow_validate_action_meter(dev,
 							      action_flags,
+							      item_flags,
 							      actions, attr,
 							      port_id_item,
 							      &def_policy,
-- 
2.25.1


^ permalink raw reply	[flat|nested] 3+ messages in thread

* RE: [PATCH v2] net/mlx5: fix missing RSS validation with meter policy
  2021-11-15 14:51 ` [PATCH v2] " Bing Zhao
@ 2021-11-16  9:25   ` Raslan Darawsheh
  0 siblings, 0 replies; 3+ messages in thread
From: Raslan Darawsheh @ 2021-11-16  9:25 UTC (permalink / raw)
  To: Bing Zhao, Slava Ovsiienko, Matan Azrad; +Cc: dev, Li Zhang, stable

Hi,

> -----Original Message-----
> From: Bing Zhao <bingz@nvidia.com>
> Sent: Monday, November 15, 2021 4:51 PM
> To: Slava Ovsiienko <viacheslavo@nvidia.com>; Matan Azrad
> <matan@nvidia.com>
> Cc: dev@dpdk.org; Raslan Darawsheh <rasland@nvidia.com>; Li Zhang
> <lizh@nvidia.com>; stable@dpdk.org
> Subject: [PATCH v2] net/mlx5: fix missing RSS validation with meter policy
> 
> The RSS can be one of the fate actions when creating a meter with policy. In
> the previous implementation, the RSS validation was missed when creating a
> flow rule with such meter due to the fact that a policy meter was created
> firstly and then used in the rule. In the stage of meter creation, no
> rte_flow_item* information was provided.
> 
> A unnecessary RSS expansion might be called since the validation was missed
> and would cause an unexpected error of the rule creation. Even though the
> rule should be rejected from the very beginning, it would cause confusion.
> There might be some other errors when the validation was missed.
> 
> Adding the RSS validation inside the meter action validation will prevent the
> code from continuing when there is a conflict between the items, other
> actions and the policy meter RSS action.
> 
> Fixes: 444320186393 ("net/mlx5: support meter creation with policy")
> Cc: lizh@nvidia.com
> Cc: stable@dpdk.org
> 
> Signed-off-by: Bing Zhao <bingz@nvidia.com>
> Reviewed-by: Li Zhang <lizh@nvidia.com>
> Acked-by: Matan Azrad <matan@nvidia.com>
> ---
> v2: fix the coding style issue.
> ---

Patch applied to next-net-mlx,

Kindest regards,
Raslan Darawsheh

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-11-16  9:25 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-15 11:35 [PATCH] net/mlx5: fix missing RSS validation with meter policy Bing Zhao
2021-11-15 14:51 ` [PATCH v2] " Bing Zhao
2021-11-16  9:25   ` Raslan Darawsheh

patches for DPDK stable branches

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://inbox.dpdk.org/stable/0 stable/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 stable stable/ http://inbox.dpdk.org/stable \
		stable@dpdk.org
	public-inbox-index stable

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.stable


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git