patches for DPDK stable branches
 help / color / mirror / Atom feed
* [dpdk-stable] [PATCH] net/mlx5: fix flow application order on stop/start
@ 2017-05-29  9:40 Nelio Laranjeiro
  2017-05-29 13:29 ` Adrien Mazarguil
  0 siblings, 1 reply; 3+ messages in thread
From: Nelio Laranjeiro @ 2017-05-29  9:40 UTC (permalink / raw)
  To: dev; +Cc: Adrien Mazarguil, Yongseok Koh, stable

Flow rules must be applied in the same order as they have been created and
thus destroyed in the reverse order.

Fixes: 2097d0d1e2cc ("net/mlx5: support basic flow items and actions")

Cc: stable@dpdk.org
Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
Acked-by: Yongseok Koh <yskoh@mellanox.com>
---
 drivers/net/mlx5/mlx5.c      |  1 +
 drivers/net/mlx5/mlx5.h      |  2 +-
 drivers/net/mlx5/mlx5_flow.c | 27 +++++++++++----------------
 3 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index fc99c0d..bcb2c1b 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -789,6 +789,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
 		eth_dev->device->driver = &mlx5_driver.driver;
 		priv->dev = eth_dev;
 		eth_dev->dev_ops = &mlx5_dev_ops;
+		TAILQ_INIT(&priv->flows);
 
 		/* Bring Ethernet device up. */
 		DEBUG("forcing Ethernet interface up");
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 67fd742..1148dee 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -155,7 +155,7 @@ struct priv {
 	struct fdir_filter_list *fdir_filter_list; /* Flow director rules. */
 	struct fdir_queue *fdir_drop_queue; /* Flow director drop queue. */
 	struct rte_flow_drop *flow_drop_queue; /* Flow drop queue. */
-	LIST_HEAD(mlx5_flows, rte_flow) flows; /* RTE Flow rules. */
+	TAILQ_HEAD(mlx5_flows, rte_flow) flows; /* RTE Flow rules. */
 	uint32_t link_speed_capa; /* Link speed capabilities. */
 	struct mlx5_xstats_ctrl xstats_ctrl; /* Extended stats control. */
 	rte_spinlock_t lock; /* Lock for control functions. */
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index adcbe3f..8b3957b 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -91,7 +91,7 @@ mlx5_flow_create_vxlan(const struct rte_flow_item *item,
 		       void *data);
 
 struct rte_flow {
-	LIST_ENTRY(rte_flow) next; /**< Pointer to the next flow structure. */
+	TAILQ_ENTRY(rte_flow) next; /**< Pointer to the next flow structure. */
 	struct ibv_exp_flow_attr *ibv_attr; /**< Pointer to Verbs attributes. */
 	struct ibv_exp_rwq_ind_table *ind_table; /**< Indirection table. */
 	struct ibv_qp *qp; /**< Verbs queue pair. */
@@ -1230,7 +1230,7 @@ mlx5_flow_create(struct rte_eth_dev *dev,
 	priv_lock(priv);
 	flow = priv_flow_create(priv, attr, items, actions, error);
 	if (flow) {
-		LIST_INSERT_HEAD(&priv->flows, flow, next);
+		TAILQ_INSERT_TAIL(&priv->flows, flow, next);
 		DEBUG("Flow created %p", (void *)flow);
 	}
 	priv_unlock(priv);
@@ -1249,8 +1249,7 @@ static void
 priv_flow_destroy(struct priv *priv,
 		  struct rte_flow *flow)
 {
-	(void)priv;
-	LIST_REMOVE(flow, next);
+	TAILQ_REMOVE(&priv->flows, flow, next);
 	if (flow->ibv_flow)
 		claim_zero(ibv_exp_destroy_flow(flow->ibv_flow));
 	if (flow->drop)
@@ -1275,9 +1274,9 @@ priv_flow_destroy(struct priv *priv,
 		 */
 		for (queue_n = 0; queue_n < flow->rxqs_n; ++queue_n) {
 			rxq = flow->rxqs[queue_n];
-			for (tmp = LIST_FIRST(&priv->flows);
+			for (tmp = TAILQ_FIRST(&priv->flows);
 			     tmp;
-			     tmp = LIST_NEXT(tmp, next)) {
+			     tmp = TAILQ_NEXT(tmp, next)) {
 				uint32_t tqueue_n;
 
 				if (tmp->drop)
@@ -1330,10 +1329,10 @@ mlx5_flow_destroy(struct rte_eth_dev *dev,
 static void
 priv_flow_flush(struct priv *priv)
 {
-	while (!LIST_EMPTY(&priv->flows)) {
+	while (!TAILQ_EMPTY(&priv->flows)) {
 		struct rte_flow *flow;
 
-		flow = LIST_FIRST(&priv->flows);
+		flow = TAILQ_FIRST(&priv->flows);
 		priv_flow_destroy(priv, flow);
 	}
 }
@@ -1494,9 +1493,7 @@ priv_flow_stop(struct priv *priv)
 {
 	struct rte_flow *flow;
 
-	for (flow = LIST_FIRST(&priv->flows);
-	     flow;
-	     flow = LIST_NEXT(flow, next)) {
+	TAILQ_FOREACH_REVERSE(flow, &priv->flows, mlx5_flows, next) {
 		claim_zero(ibv_exp_destroy_flow(flow->ibv_flow));
 		flow->ibv_flow = NULL;
 		if (flow->mark) {
@@ -1528,9 +1525,7 @@ priv_flow_start(struct priv *priv)
 	ret = priv_flow_create_drop_queue(priv);
 	if (ret)
 		return -1;
-	for (flow = LIST_FIRST(&priv->flows);
-	     flow;
-	     flow = LIST_NEXT(flow, next)) {
+	TAILQ_FOREACH(flow, &priv->flows, next) {
 		struct ibv_qp *qp;
 
 		if (flow->drop)
@@ -1570,9 +1565,9 @@ priv_flow_rxq_in_use(struct priv *priv, struct rxq *rxq)
 {
 	struct rte_flow *flow;
 
-	for (flow = LIST_FIRST(&priv->flows);
+	for (flow = TAILQ_FIRST(&priv->flows);
 	     flow;
-	     flow = LIST_NEXT(flow, next)) {
+	     flow = TAILQ_NEXT(flow, next)) {
 		unsigned int n;
 
 		if (flow->drop)
-- 
2.1.4

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

* Re: [dpdk-stable] [PATCH] net/mlx5: fix flow application order on stop/start
  2017-05-29  9:40 [dpdk-stable] [PATCH] net/mlx5: fix flow application order on stop/start Nelio Laranjeiro
@ 2017-05-29 13:29 ` Adrien Mazarguil
  2017-05-30 12:33   ` Ferruh Yigit
  0 siblings, 1 reply; 3+ messages in thread
From: Adrien Mazarguil @ 2017-05-29 13:29 UTC (permalink / raw)
  To: Nelio Laranjeiro; +Cc: dev, Yongseok Koh, stable

On Mon, May 29, 2017 at 11:40:58AM +0200, Nelio Laranjeiro wrote:
> Flow rules must be applied in the same order as they have been created and
> thus destroyed in the reverse order.
> 
> Fixes: 2097d0d1e2cc ("net/mlx5: support basic flow items and actions")
> 
> Cc: stable@dpdk.org
> Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
> Acked-by: Yongseok Koh <yskoh@mellanox.com>

Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>

-- 
Adrien Mazarguil
6WIND

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

* Re: [dpdk-stable] [PATCH] net/mlx5: fix flow application order on stop/start
  2017-05-29 13:29 ` Adrien Mazarguil
@ 2017-05-30 12:33   ` Ferruh Yigit
  0 siblings, 0 replies; 3+ messages in thread
From: Ferruh Yigit @ 2017-05-30 12:33 UTC (permalink / raw)
  To: Adrien Mazarguil, Nelio Laranjeiro; +Cc: dev, Yongseok Koh, stable

On 5/29/2017 2:29 PM, Adrien Mazarguil wrote:
> On Mon, May 29, 2017 at 11:40:58AM +0200, Nelio Laranjeiro wrote:
>> Flow rules must be applied in the same order as they have been created and
>> thus destroyed in the reverse order.
>>
>> Fixes: 2097d0d1e2cc ("net/mlx5: support basic flow items and actions")
>>
>> Cc: stable@dpdk.org
>> Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
>> Acked-by: Yongseok Koh <yskoh@mellanox.com>
> 
> Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>

Applied to dpdk-next-net/master, thanks.

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

end of thread, other threads:[~2017-05-30 12:33 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-29  9:40 [dpdk-stable] [PATCH] net/mlx5: fix flow application order on stop/start Nelio Laranjeiro
2017-05-29 13:29 ` Adrien Mazarguil
2017-05-30 12:33   ` Ferruh Yigit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).