All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon@kernel.org>
To: Doug Ledford <dledford@redhat.com>, Jason Gunthorpe <jgg@nvidia.com>
Cc: Parav Pandit <parav@nvidia.com>,
	"David S. Miller" <davem@davemloft.net>,
	Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>,
	Jakub Kicinski <kuba@kernel.org>,
	Karsten Graul <kgraul@linux.ibm.com>,
	linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org,
	linux-s390@vger.kernel.org,
	Mike Marciniszyn <mike.marciniszyn@cornelisnetworks.com>,
	netdev@vger.kernel.org, rds-devel@oss.oracle.com,
	Santosh Shilimkar <santosh.shilimkar@oracle.com>
Subject: [PATCH rdma-next 2/8] RDMA/cma: Skip device which doesn't support CM
Date: Mon,  5 Apr 2021 08:49:54 +0300	[thread overview]
Message-ID: <20210405055000.215792-3-leon@kernel.org> (raw)
In-Reply-To: <20210405055000.215792-1-leon@kernel.org>

From: Parav Pandit <parav@nvidia.com>

A switchdev RDMA device do not support IB CM. When such device is added
to the RDMA CM's device list, when application invokes rdma_listen(),
cma attempts to listen to such device, however it has IB CM attribute
disabled.

Due to this, rdma_listen() call fails to listen for other non
switchdev devices as well.

A below error message can be seen.

infiniband mlx5_0: RDMA CMA: cma_listen_on_dev, error -38

A failing call flow is below.

rdma_listen()
  cma_listen_on_all()
    cma_listen_on_dev()
      _cma_attach_to_dev()
      rdma_listen() <- fails on a specific switchdev device

Hence, when a IB device doesn't support IB CM or IW CM, avoid adding
such device to the cma list.

Signed-off-by: Parav Pandit <parav@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
---
 drivers/infiniband/core/cma.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 42a1c8955c50..80156faf90de 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -157,11 +157,13 @@ EXPORT_SYMBOL(rdma_res_to_id);
 
 static int cma_add_one(struct ib_device *device);
 static void cma_remove_one(struct ib_device *device, void *client_data);
+static bool cma_supported(struct ib_device *device);
 
 static struct ib_client cma_client = {
 	.name   = "cma",
 	.add    = cma_add_one,
-	.remove = cma_remove_one
+	.remove = cma_remove_one,
+	.is_supported = cma_supported,
 };
 
 static struct ib_sa_client sa_client;
@@ -4870,6 +4872,17 @@ static void cma_process_remove(struct cma_device *cma_dev)
 	wait_for_completion(&cma_dev->comp);
 }
 
+static bool cma_supported(struct ib_device *device)
+{
+	u32 i;
+
+	rdma_for_each_port(device, i) {
+		if (rdma_cap_ib_cm(device, i) || rdma_cap_iw_cm(device, i))
+			return true;
+	}
+	return false;
+}
+
 static int cma_add_one(struct ib_device *device)
 {
 	struct rdma_id_private *to_destroy;
-- 
2.30.2


  parent reply	other threads:[~2021-04-05  5:50 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-05  5:49 [PATCH rdma-next 0/8] Generalize if ULP supported check Leon Romanovsky
2021-04-05  5:49 ` [PATCH rdma-next 1/8] RDMA/core: Check if client supports IB device or not Leon Romanovsky
2021-04-05  6:20   ` Gal Pressman
2021-04-05  8:46     ` Leon Romanovsky
2021-04-05  5:49 ` Leon Romanovsky [this message]
2021-04-05  5:49 ` [PATCH rdma-next 3/8] IB/cm: Skip device which doesn't support IB CM Leon Romanovsky
2021-04-05  5:49 ` [PATCH rdma-next 4/8] IB/core: Skip device which doesn't have necessary capabilities Leon Romanovsky
2021-04-06 15:46   ` Jason Gunthorpe
2021-04-07 15:06     ` Parav Pandit
2021-04-07 15:13       ` Jason Gunthorpe
2021-04-07 15:44         ` Parav Pandit
2021-04-08 12:16           ` Jason Gunthorpe
2021-04-09 12:31             ` Parav Pandit
2021-04-05  5:49 ` [PATCH rdma-next 5/8] IB/IPoIB: Skip device which doesn't have InfiniBand port Leon Romanovsky
2021-04-05  5:49 ` [PATCH rdma-next 6/8] IB/opa_vnic: Move to client_supported callback Leon Romanovsky
2021-04-05  5:49 ` [PATCH rdma-next 7/8] net/smc: " Leon Romanovsky
2021-04-05  5:50 ` [PATCH rdma-next 8/8] net/rds: " Leon Romanovsky
2021-04-05 16:12   ` Santosh Shilimkar

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=20210405055000.215792-3-leon@kernel.org \
    --to=leon@kernel.org \
    --cc=davem@davemloft.net \
    --cc=dennis.dalessandro@cornelisnetworks.com \
    --cc=dledford@redhat.com \
    --cc=jgg@nvidia.com \
    --cc=kgraul@linux.ibm.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=mike.marciniszyn@cornelisnetworks.com \
    --cc=netdev@vger.kernel.org \
    --cc=parav@nvidia.com \
    --cc=rds-devel@oss.oracle.com \
    --cc=santosh.shilimkar@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.