public inbox for netdev@vger.kernel.org 
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon@kernel•org>
To: Doug Ledford <dledford@redhat•com>, Jason Gunthorpe <jgg@mellanox•com>
Cc: Leon Romanovsky <leonro@mellanox•com>,
	RDMA mailing list <linux-rdma@vger•kernel.org>,
	Saeed Mahameed <saeedm@mellanox•com>,
	Yishai Hadas <yishaih@mellanox•com>,
	linux-netdev <netdev@vger•kernel.org>
Subject: [PATCH mlx5-next v2 01/13] net/mlx5: Fix mlx5_core_destroy_cq() error flow
Date: Sun, 30 Jun 2019 19:23:22 +0300	[thread overview]
Message-ID: <20190630162334.22135-2-leon@kernel.org> (raw)
In-Reply-To: <20190630162334.22135-1-leon@kernel.org>

From: Yishai Hadas <yishaih@mellanox•com>

The firmware command to destroy a CQ might fail when the object is
referenced by other object and the ref count is managed by the firmware.

To enable a second successful destruction post the first failure need to
change  mlx5_eq_del_cq() to be a void function.

As an error in mlx5_eq_del_cq() is quite fatal from the option to
recover, a debug message inside it should be good enougth and it was
changed to be void.

Signed-off-by: Yishai Hadas <yishaih@mellanox•com>
Acked-by: Saeed Mahameed <saeedm@mellanox•com>
Signed-off-by: Leon Romanovsky <leonro@mellanox•com>
---
 drivers/net/ethernet/mellanox/mlx5/core/cq.c     |  9 ++-------
 drivers/net/ethernet/mellanox/mlx5/core/eq.c     | 16 +++++++---------
 drivers/net/ethernet/mellanox/mlx5/core/lib/eq.h |  2 +-
 3 files changed, 10 insertions(+), 17 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/cq.c b/drivers/net/ethernet/mellanox/mlx5/core/cq.c
index 713a17ee3751..703d88332bc6 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/cq.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/cq.c
@@ -158,13 +158,8 @@ int mlx5_core_destroy_cq(struct mlx5_core_dev *dev, struct mlx5_core_cq *cq)
 	u32 in[MLX5_ST_SZ_DW(destroy_cq_in)] = {0};
 	int err;
 
-	err = mlx5_eq_del_cq(mlx5_get_async_eq(dev), cq);
-	if (err)
-		return err;
-
-	err = mlx5_eq_del_cq(&cq->eq->core, cq);
-	if (err)
-		return err;
+	mlx5_eq_del_cq(mlx5_get_async_eq(dev), cq);
+	mlx5_eq_del_cq(&cq->eq->core, cq);
 
 	MLX5_SET(destroy_cq_in, in, opcode, MLX5_CMD_OP_DESTROY_CQ);
 	MLX5_SET(destroy_cq_in, in, cqn, cq->cqn);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eq.c b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
index 58fff2f39b38..8000d2a4a7e2 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eq.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
@@ -389,7 +389,7 @@ int mlx5_eq_add_cq(struct mlx5_eq *eq, struct mlx5_core_cq *cq)
 	return err;
 }
 
-int mlx5_eq_del_cq(struct mlx5_eq *eq, struct mlx5_core_cq *cq)
+void mlx5_eq_del_cq(struct mlx5_eq *eq, struct mlx5_core_cq *cq)
 {
 	struct mlx5_cq_table *table = &eq->cq_table;
 	struct mlx5_core_cq *tmp;
@@ -399,16 +399,14 @@ int mlx5_eq_del_cq(struct mlx5_eq *eq, struct mlx5_core_cq *cq)
 	spin_unlock(&table->lock);
 
 	if (!tmp) {
-		mlx5_core_warn(eq->dev, "cq 0x%x not found in eq 0x%x tree\n", eq->eqn, cq->cqn);
-		return -ENOENT;
+		mlx5_core_dbg(eq->dev, "cq 0x%x not found in eq 0x%x tree\n",
+			      eq->eqn, cq->cqn);
+		return;
 	}
 
-	if (tmp != cq) {
-		mlx5_core_warn(eq->dev, "corruption on cqn 0x%x in eq 0x%x\n", eq->eqn, cq->cqn);
-		return -EINVAL;
-	}
-
-	return 0;
+	if (tmp != cq)
+		mlx5_core_dbg(eq->dev, "corruption on cqn 0x%x in eq 0x%x\n",
+			      eq->eqn, cq->cqn);
 }
 
 int mlx5_eq_table_init(struct mlx5_core_dev *dev)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/eq.h b/drivers/net/ethernet/mellanox/mlx5/core/lib/eq.h
index 24bd991a727e..d826e63d5a17 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/eq.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/eq.h
@@ -75,7 +75,7 @@ int mlx5_eq_table_create(struct mlx5_core_dev *dev);
 void mlx5_eq_table_destroy(struct mlx5_core_dev *dev);
 
 int mlx5_eq_add_cq(struct mlx5_eq *eq, struct mlx5_core_cq *cq);
-int mlx5_eq_del_cq(struct mlx5_eq *eq, struct mlx5_core_cq *cq);
+void mlx5_eq_del_cq(struct mlx5_eq *eq, struct mlx5_core_cq *cq);
 struct mlx5_eq_comp *mlx5_eqn2comp_eq(struct mlx5_core_dev *dev, int eqn);
 struct mlx5_eq *mlx5_get_async_eq(struct mlx5_core_dev *dev);
 void mlx5_cq_tasklet_cb(unsigned long data);
-- 
2.20.1


  reply	other threads:[~2019-06-30 16:23 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-30 16:23 [PATCH rdma-next v2 00/13] DEVX asynchronous events Leon Romanovsky
2019-06-30 16:23 ` Leon Romanovsky [this message]
2019-06-30 16:23 ` [PATCH mlx5-next v2 02/13] net/mlx5: Use event mask based on device capabilities Leon Romanovsky
2019-06-30 16:23 ` [PATCH mlx5-next v2 03/13] net/mlx5: Expose the API to register for ANY event Leon Romanovsky
2019-06-30 16:23 ` [PATCH mlx5-next v2 04/13] net/mlx5: mlx5_core_create_cq() enhancements Leon Romanovsky
2019-06-30 16:23 ` [PATCH mlx5-next v2 05/13] net/mlx5: Report a CQ error event only when a handler was set Leon Romanovsky
2019-06-30 16:23 ` [PATCH mlx5-next v2 06/13] net/mlx5: Report EQE data upon CQ completion Leon Romanovsky
2019-06-30 16:23 ` [PATCH mlx5-next v2 07/13] net/mlx5: Expose device definitions for object events Leon Romanovsky
2019-06-30 16:23 ` [PATCH rdma-next v2 08/13] IB/mlx5: Introduce MLX5_IB_OBJECT_DEVX_ASYNC_EVENT_FD Leon Romanovsky
2019-06-30 16:23 ` [PATCH rdma-next v2 09/13] IB/mlx5: Register DEVX with mlx5_core to get async events Leon Romanovsky
2019-06-30 16:23 ` [PATCH rdma-next v2 10/13] IB/mlx5: Enable subscription for device events over DEVX Leon Romanovsky
2019-07-03 20:18   ` Jason Gunthorpe
2019-06-30 16:23 ` [PATCH rdma-next v2 11/13] IB/mlx5: Implement DEVX dispatching event Leon Romanovsky
2019-06-30 16:23 ` [PATCH rdma-next v2 12/13] IB/mlx5: Add DEVX support for CQ events Leon Romanovsky
2019-06-30 16:23 ` [PATCH rdma-next v2 13/13] IB/mlx5: DEVX cleanup mdev Leon Romanovsky
2019-07-03 15:29 ` [PATCH rdma-next v2 00/13] DEVX asynchronous events Jason Gunthorpe
2019-07-03 18:04   ` Leon Romanovsky
2019-07-03 20:19 ` Jason Gunthorpe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190630162334.22135-2-leon@kernel.org \
    --to=leon@kernel$(echo .)org \
    --cc=dledford@redhat$(echo .)com \
    --cc=jgg@mellanox$(echo .)com \
    --cc=leonro@mellanox$(echo .)com \
    --cc=linux-rdma@vger$(echo .)kernel.org \
    --cc=netdev@vger$(echo .)kernel.org \
    --cc=saeedm@mellanox$(echo .)com \
    --cc=yishaih@mellanox$(echo .)com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox