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@mellanox.com>
Cc: Leon Romanovsky <leonro@mellanox.com>, linux-rdma@vger.kernel.org
Subject: [PATCH rdma-next v2 3/7] RDMA/ucma: Extend ucma_connect to receive ECE parameters
Date: Mon, 13 Apr 2020 17:15:34 +0300	[thread overview]
Message-ID: <20200413141538.935574-4-leon@kernel.org> (raw)
In-Reply-To: <20200413141538.935574-1-leon@kernel.org>

From: Leon Romanovsky <leonro@mellanox.com>

Active side of CMID initiates connection through librdmacm's rdma_connect()
and kernel's ucma_connect(). Extend UCMA interface to handle those new
parameters.

Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/core/cma.c      | 13 +++++++++++++
 drivers/infiniband/core/cma_priv.h |  1 +
 drivers/infiniband/core/ucma.c     | 14 +++++++++++---
 include/rdma/rdma_cm.h             | 11 +++++++++++
 4 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 22df46933d60..6ded5d3ecc1d 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -4031,6 +4031,19 @@ int rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param)
 }
 EXPORT_SYMBOL(rdma_connect);
 
+int rdma_connect_ece(struct rdma_cm_id *id, struct rdma_conn_param *conn_param,
+		     struct rdma_ucm_ece *ece)
+{
+	struct rdma_id_private *id_priv =
+		container_of(id, struct rdma_id_private, id);
+
+	id_priv->ece.vendor_id = ece->vendor_id;
+	id_priv->ece.attr_mod = ece->attr_mod;
+
+	return rdma_connect(id, conn_param);
+}
+EXPORT_SYMBOL(rdma_connect_ece);
+
 static int cma_accept_ib(struct rdma_id_private *id_priv,
 			 struct rdma_conn_param *conn_param)
 {
diff --git a/drivers/infiniband/core/cma_priv.h b/drivers/infiniband/core/cma_priv.h
index 5edcf44a9307..caece96ebcf5 100644
--- a/drivers/infiniband/core/cma_priv.h
+++ b/drivers/infiniband/core/cma_priv.h
@@ -95,6 +95,7 @@ struct rdma_id_private {
 	 * Internal to RDMA/core, don't use in the drivers
 	 */
 	struct rdma_restrack_entry     res;
+	struct rdma_ucm_ece ece;
 };
 
 #if IS_ENABLED(CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS)
diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c
index 16b6cf57fa85..f7415d8d2140 100644
--- a/drivers/infiniband/core/ucma.c
+++ b/drivers/infiniband/core/ucma.c
@@ -1070,12 +1070,15 @@ static void ucma_copy_conn_param(struct rdma_cm_id *id,
 static ssize_t ucma_connect(struct ucma_file *file, const char __user *inbuf,
 			    int in_len, int out_len)
 {
-	struct rdma_ucm_connect cmd;
 	struct rdma_conn_param conn_param;
+	struct rdma_ucm_ece ece = {};
+	struct rdma_ucm_connect cmd;
 	struct ucma_context *ctx;
+	size_t in_size;
 	int ret;
 
-	if (copy_from_user(&cmd, inbuf, sizeof(cmd)))
+	in_size = min_t(size_t, in_len, sizeof(cmd));
+	if (copy_from_user(&cmd, inbuf, in_size))
 		return -EFAULT;
 
 	if (!cmd.conn_param.valid)
@@ -1086,8 +1089,13 @@ static ssize_t ucma_connect(struct ucma_file *file, const char __user *inbuf,
 		return PTR_ERR(ctx);
 
 	ucma_copy_conn_param(ctx->cm_id, &conn_param, &cmd.conn_param);
+	if (offsetofend(typeof(cmd), ece) <= in_size) {
+		ece.vendor_id = cmd.ece.vendor_id;
+		ece.attr_mod = cmd.ece.attr_mod;
+	}
+
 	mutex_lock(&ctx->mutex);
-	ret = rdma_connect(ctx->cm_id, &conn_param);
+	ret = rdma_connect_ece(ctx->cm_id, &conn_param, &ece);
 	mutex_unlock(&ctx->mutex);
 	ucma_put_ctx(ctx);
 	return ret;
diff --git a/include/rdma/rdma_cm.h b/include/rdma/rdma_cm.h
index 71f48cfdc24c..86a849214c84 100644
--- a/include/rdma/rdma_cm.h
+++ b/include/rdma/rdma_cm.h
@@ -264,6 +264,17 @@ int rdma_init_qp_attr(struct rdma_cm_id *id, struct ib_qp_attr *qp_attr,
  */
 int rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param);
 
+/**
+ * rdma_connect_ece - Initiate an active connection request with ECE data.
+ * @id: Connection identifier to connect.
+ * @conn_param: Connection information used for connected QPs.
+ * @ece: ECE parameters
+ *
+ * See rdma_connect() explanation.
+ */
+int rdma_connect_ece(struct rdma_cm_id *id, struct rdma_conn_param *conn_param,
+		     struct rdma_ucm_ece *ece);
+
 /**
  * rdma_listen - This function is called by the passive side to
  *   listen for incoming connection requests.
-- 
2.25.2


  parent reply	other threads:[~2020-04-13 14:15 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-13 14:15 [PATCH rdma-next v2 0/7] Add Enhanced Connection Established (ECE) Leon Romanovsky
2020-04-13 14:15 ` Leon Romanovsky
2020-04-13 14:15 ` Leon Romanovsky
2020-04-13 14:15 ` [PATCH rdma-next v2 1/7] RDMA/cm: Add Enhanced Connection Establishment (ECE) bits Leon Romanovsky
2020-04-13 14:15 ` [PATCH rdma-next v2 2/7] RDMA/uapi: Add ECE definitions to UCMA Leon Romanovsky
2020-04-13 14:15 ` Leon Romanovsky [this message]
2020-05-25 17:41   ` [PATCH rdma-next v2 3/7] RDMA/ucma: Extend ucma_connect to receive ECE parameters Jason Gunthorpe
2020-05-25 17:47     ` Leon Romanovsky
2020-05-25 18:15       ` Jason Gunthorpe
2020-05-25 18:23         ` Leon Romanovsky
2020-04-13 14:15 ` [PATCH rdma-next v2 4/7] RDMA/ucma: Deliver ECE parameters through UCMA events Leon Romanovsky
2020-04-13 14:15 ` [PATCH rdma-next v2 5/7] RDMA/cm: Send and receive ECE parameter over the wire Leon Romanovsky
2020-05-25 17:58   ` Jason Gunthorpe
2020-05-25 18:02     ` Leon Romanovsky
2020-04-13 14:15 ` [PATCH rdma-next v2 6/7] RDMA/cma: Connect ECE to rdma_accept Leon Romanovsky
2020-04-13 14:15 ` [PATCH rdma-next v2 7/7] RDMA/cma: Provide ECE reject reason Leon Romanovsky
2020-04-13 14:15   ` Leon Romanovsky
2020-04-13 14:15   ` Leon Romanovsky
2020-05-25 18:14   ` Jason Gunthorpe
2020-05-25 18:14     ` Jason Gunthorpe
2020-05-25 18:14     ` Jason Gunthorpe
2020-05-25 18:22     ` Leon Romanovsky
2020-05-25 18:22       ` Leon Romanovsky
2020-05-25 18:22       ` Leon Romanovsky
2020-05-25 18:36       ` Jason Gunthorpe
2020-05-25 18:36         ` Jason Gunthorpe
2020-05-25 18:36         ` Jason Gunthorpe
2020-05-26  5:49         ` Leon Romanovsky
2020-05-26  5:49           ` Leon Romanovsky
2020-05-26  5:49           ` Leon Romanovsky
2020-04-20 13:36 ` [PATCH rdma-next v2 0/7] Add Enhanced Connection Established (ECE) Leon Romanovsky
2020-04-20 13:36   ` Leon Romanovsky
2020-04-20 13:36   ` Leon Romanovsky

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=20200413141538.935574-4-leon@kernel.org \
    --to=leon@kernel.org \
    --cc=dledford@redhat.com \
    --cc=jgg@mellanox.com \
    --cc=leonro@mellanox.com \
    --cc=linux-rdma@vger.kernel.org \
    /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.