Update flow creation/destroy functions for future reuse. List operations can be skipped inside functions and done separately out of flow creation.
Signed-off-by: Yongseok Koh <ys...@mellanox.com> Signed-off-by: Viacheslav Ovsiienko <viachesl...@mellanox.com> Acked-by: Matan Azrad <ma...@mellanox.com> --- drivers/net/mlx5/mlx5_flow.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index d1661f2..6e6c845 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -2736,7 +2736,10 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority, * @param dev * Pointer to Ethernet device. * @param list - * Pointer to a TAILQ flow list. + * Pointer to a TAILQ flow list. If this parameter NULL, + * no list insertion occurred, flow is just created, + * this is caller's responsibility to track the + * created flow. * @param[in] attr * Flow rule attributes. * @param[in] items @@ -2881,7 +2884,8 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority, if (ret < 0) goto error; } - TAILQ_INSERT_TAIL(list, flow, next); + if (list) + TAILQ_INSERT_TAIL(list, flow, next); flow_rxq_flags_set(dev, flow); return flow; error_before_flow: @@ -2975,7 +2979,8 @@ struct rte_flow * * @param dev * Pointer to Ethernet device. * @param list - * Pointer to a TAILQ flow list. + * Pointer to a TAILQ flow list. If this parameter NULL, + * there is no flow removal from the list. * @param[in] flow * Flow to destroy. */ @@ -2995,7 +3000,8 @@ struct rte_flow * mlx5_flow_id_release(priv->sh->flow_id_pool, flow->hairpin_flow_id); flow_drv_destroy(dev, flow); - TAILQ_REMOVE(list, flow, next); + if (list) + TAILQ_REMOVE(list, flow, next); rte_free(flow->fdir); rte_free(flow); } -- 1.8.3.1