[dpdk-dev] [PATCH v2 06/20] net/mlx5: add flow stop/start
Nelio Laranjeiro
nelio.laranjeiro at 6wind.com
Wed Jun 27 17:07:38 CEST 2018
Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro at 6wind.com>
---
drivers/net/mlx5/mlx5_flow.c | 24 ++++++++++++++++++++----
1 file changed, 20 insertions(+), 4 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index 7ac1ba24c..6593eafa0 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -912,9 +912,12 @@ mlx5_flow_list_flush(struct rte_eth_dev *dev, struct mlx5_flows *list)
* Pointer to a TAILQ flow list.
*/
void
-mlx5_flow_stop(struct rte_eth_dev *dev __rte_unused,
- struct mlx5_flows *list __rte_unused)
+mlx5_flow_stop(struct rte_eth_dev *dev, struct mlx5_flows *list)
{
+ struct rte_flow *flow;
+
+ TAILQ_FOREACH_REVERSE(flow, list, mlx5_flows, next)
+ mlx5_flow_fate_remove(dev, flow);
}
/**
@@ -929,10 +932,23 @@ mlx5_flow_stop(struct rte_eth_dev *dev __rte_unused,
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
int
-mlx5_flow_start(struct rte_eth_dev *dev __rte_unused,
- struct mlx5_flows *list __rte_unused)
+mlx5_flow_start(struct rte_eth_dev *dev, struct mlx5_flows *list)
{
+ struct rte_flow *flow;
+ struct rte_flow_error error;
+ int ret = 0;
+
+ TAILQ_FOREACH(flow, list, next) {
+ ret = mlx5_flow_fate_apply(dev, flow, &error);
+ if (ret < 0)
+ goto error;
+ }
return 0;
+error:
+ ret = rte_errno; /* Save rte_errno before cleanup. */
+ mlx5_flow_stop(dev, list);
+ rte_errno = ret; /* Restore rte_errno. */
+ return -rte_errno;
}
/**
--
2.18.0
More information about the dev
mailing list