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>,
	RDMA mailing list <linux-rdma@vger.kernel.org>
Subject: [PATCH rdma-next 02/43] RDMA/cm: Request For Communication (REQ) message definitions
Date: Sun, 27 Oct 2019 09:05:40 +0200	[thread overview]
Message-ID: <20191027070621.11711-3-leon@kernel.org> (raw)
In-Reply-To: <20191027070621.11711-1-leon@kernel.org>

From: Leon Romanovsky <leonro@mellanox.com>

Add Request For Communication (REQ) message definitions as it is written
in IBTA release 1.3 volume 1.

There are three types of definitions:
1. Regular ones with offset and mask, they will be accessible
   by CM_GET()/CM_SET().
2. GIDs with offset only, they will be accessible
   by CM_GET_GID()/CM_SET_GID().
3. Private data with offset and length in bytes.

Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/core/cm.c      |  4 +-
 drivers/infiniband/core/cm_msgs.h | 99 ++++++++++++++++++++++++++++++-
 drivers/infiniband/core/cma.c     |  3 +-
 include/rdma/ib_cm.h              |  1 -
 4 files changed, 102 insertions(+), 5 deletions(-)

diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index ecd868954958..7163a5782bea 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -1368,7 +1368,7 @@ static int cm_validate_req_param(struct ib_cm_req_param *param)
 		return -EINVAL;
 
 	if (param->private_data &&
-	    param->private_data_len > IB_CM_REQ_PRIVATE_DATA_SIZE)
+	    param->private_data_len > CM_REQ_PRIVATE_DATA_SIZE)
 		return -EINVAL;
 
 	if (param->alternate_path &&
@@ -1681,7 +1681,7 @@ static void cm_format_req_event(struct cm_work *work,
 	param->srq = cm_req_get_srq(req_msg);
 	param->ppath_sgid_attr = cm_id_priv->av.ah_attr.grh.sgid_attr;
 	work->cm_event.private_data = &req_msg->private_data;
-	work->cm_event.private_data_len = IB_CM_REQ_PRIVATE_DATA_SIZE;
+	work->cm_event.private_data_len = CM_REQ_PRIVATE_DATA_SIZE;
 }
 
 static void cm_process_work(struct cm_id_private *cm_id_priv,
diff --git a/drivers/infiniband/core/cm_msgs.h b/drivers/infiniband/core/cm_msgs.h
index 99e35a4610f1..a9112af2b325 100644
--- a/drivers/infiniband/core/cm_msgs.h
+++ b/drivers/infiniband/core/cm_msgs.h
@@ -89,6 +89,103 @@
 		a | (b << 32);                                                 \
 	})
 
+#define CM_REQ_LOCAL_COMM_ID_OFFSET 0
+#define CM_REQ_LOCAL_COMM_ID_MASK GENMASK(31, 0)
+#define CM_REQ_SERVICE_ID_OFFSET 8
+#define CM_REQ_SERVICE_ID_MASK GENMASK_ULL(63, 0)
+#define CM_REQ_LOCAL_CA_GUID_OFFSET 16
+#define CM_REQ_LOCAL_CA_GUID_MASK GENMASK_ULL(63, 0)
+#define CM_REQ_LOCAL_Q_KEY_OFFSET 28
+#define CM_REQ_LOCAL_Q_KEY_MASK GENMASK(31, 0)
+#define CM_REQ_LOCAL_QPN_OFFSET 32
+#define CM_REQ_LOCAL_QPN_MASK GENMASK(23, 0)
+#define CM_REQ_RESPONDED_RESOURCES_OFFSET 35
+#define CM_REQ_RESPONDED_RESOURCES_MASK GENMASK(7, 0)
+#define CM_REQ_LOCAL_EECN_OFFSET 36
+#define CM_REQ_LOCAL_EECN_MASK GENMASK(24, 0)
+#define CM_REQ_INITIATOR_DEPTH_OFFSET 39
+#define CM_REQ_INITIATOR_DEPTH_MASK GENMASK(7, 0)
+#define CM_REQ_REMOTE_EECN_OFFSET 40
+#define CM_REQ_REMOTE_EECN_MASK GENMASK(23, 0)
+#define CM_REQ_REMOTE_CM_RESPONSE_TIMEOUT_OFFSET 43
+#define CM_REQ_REMOTE_CM_RESPONSE_TIMEOUT_MASK GENMASK(4, 0)
+#define CM_REQ_TRANSPORT_SERVICE_TYPE_OFFSET 43
+#define CM_REQ_TRANSPORT_SERVICE_TYPE_MASK GENMASK(6, 5)
+#define CM_REQ_END_TO_END_FLOW_CONTROL_OFFSET 43
+#define CM_REQ_END_TO_END_FLOW_CONTROL_MASK GENMASK(7, 7)
+#define CM_REQ_STARTING_PSN_OFFSET 44
+#define CM_REQ_STARTING_PSN_MASK GENMASK(23, 0)
+#define CM_REQ_LOCAL_CM_RESPONSE_TIMEOUT_OFFSET 47
+#define CM_REQ_LOCAL_CM_RESPONSE_TIMEOUT_MASK GENMASK(4, 0)
+#define CM_REQ_RETRY_COUNT_OFFSET 47
+#define CM_REQ_RETRY_COUNT_MASK GENMASK(7, 5)
+#define CM_REQ_PARTITION_KEY_OFFSET 48
+#define CM_REQ_PARTITION_KEY_MASK GENMASK(15, 0)
+#define CM_REQ_PATH_PACKET_PAYLOAD_MTU_OFFSET  50
+#define CM_REQ_PATH_PACKET_PAYLOAD_MTU_MASK GENMASK(3, 0)
+#define CM_REQ_RDC_EXISTS_OFFSET 50
+#define CM_REQ_RDC_EXISTS_MASK GENMASK(4, 4)
+#define CM_REQ_RNR_RETRY_COUNT_OFFSET 50
+#define CM_REQ_RNR_RETRY_COUNT_MASK GENMASK(7, 5)
+#define CM_REQ_MAX_CM_RETRIES_OFFSET 51
+#define CM_REQ_MAX_CM_RETRIES_MASK GENMASK(3, 0)
+#define CM_REQ_SRQ_OFFSET 51
+#define CM_REQ_SRQ_MASK GENMASK(4, 4)
+#define CM_REQ_EXTENDED_TRANSPORT_TYPE_OFFSET 51
+#define CM_REQ_EXTENDED_TRANSPORT_TYPE_MASK GENMASK(7, 5)
+
+#define CM_REQ_PRIMARY_LOCAL_PORT_LID_OFFSET 52
+#define CM_REQ_PRIMARY_LOCAL_PORT_LID_MASK GENMASK(15, 0)
+#define CM_REQ_PRIMARY_REMOTE_PORT_LID_OFFSET 54
+#define CM_REQ_PRIMARY_REMOTE_PORT_LID_MASK GENMASK(15, 0)
+
+#define CM_REQ_PRIMARY_LOCAL_PORT_GID_OFFSET 56
+#define CM_REQ_PRIMARY_REMOTE_PORT_GID_OFFSET 72
+
+#define CM_REQ_PRIMARY_FLOW_LABEL_OFFSET 88
+#define CM_REQ_PRIMARY_FLOW_LABEL_MASK GENMASK(19, 0)
+#define CM_REQ_PRIMARY_PACKET_RATE_OFFSET 91
+#define CM_REQ_PRIMARY_PACKET_RATE_MASK GENMASK(3, 2)
+#define CM_REQ_PRIMARY_TRAFFIC_CLASS_OFFSET 92
+#define CM_REQ_PRIMARY_TRAFFIC_CLASS_MASK GENMASK(7, 0)
+#define CM_REQ_PRIMARY_HOP_LIMIT_OFFSET 93
+#define CM_REQ_PRIMARY_HOP_LIMIT_MASK GENMASK(7, 0)
+#define CM_REQ_PRIMARY_SL_OFFSET 94
+#define CM_REQ_PRIMARY_SL_MASK GENMASK(3, 0)
+#define CM_REQ_PRIMARY_SUBNET_LOCAL_OFFSET 94
+#define CM_REQ_PRIMARY_SUBNET_LOCAL_MASK GENMASK(4, 4)
+#define CM_REQ_PRIMARY_LOCAL_ACK_TIMEOUT_OFFSET 95
+#define CM_REQ_PRIMARY_LOCAL_ACK_TIMEOUT_MASK GENMASK(4, 0)
+
+#define CM_REQ_ALTERNATE_LOCAL_PORT_LID_OFFSET 96
+#define CM_REQ_ALTERNATE_LOCAL_PORT_LID_MASK GENMASK(15, 0)
+#define CM_REQ_ALTERNATE_REMOTE_PORT_LID_OFFSET 98
+#define CM_REQ_ALTERNATE_REMOTE_PORT_LID_MASK GENMASK(15, 0)
+
+#define CM_REQ_ALTERNATE_LOCAL_PORT_GID_OFFSET 100
+#define CM_REQ_ALTERNATE_REMOTE_PORT_GID_OFFSET 116
+
+#define CM_REQ_ALTERNATE_FLOW_LABEL_OFFSET 132
+#define CM_REQ_ALTERNATE_FLOW_LABEL_MASK GENMASK(19, 0)
+#define CM_REQ_ALTERNATE_PACKET_RATE_OFFSET 135
+#define CM_REQ_ALTERNATE_PACKET_RATE_MASK GENMASK(7, 2)
+#define CM_REQ_ALTERNATE_TRAFFIC_CLASS_OFFSET 136
+#define CM_REQ_ALTERNATE_TRAFFIC_CLASS_MASK GENMASK(7, 0)
+#define CM_REQ_ALTERNATE_HOP_LIMIT_OFFSET 137
+#define CM_REQ_ALTERNATE_HOP_LIMIT_MASK GENMASK(7, 0)
+#define CM_REQ_ALTERNATE_SL_OFFSET 138
+#define CM_REQ_ALTERNATE_SL_MASK GENMASK(3, 0)
+#define CM_REQ_ALTERNATE_SUBNET_LOCAL_OFFSET 138
+#define CM_REQ_ALTERNATE_SUBNET_LOCAL_MASK GENMASK(4, 4)
+#define CM_REQ_ALTERNATE_LOCAL_ACK_TIMEOUT_OFFSET 139
+#define CM_REQ_ALTERNATE_LOCAL_ACK_TIMEOUT_MASK GENMASK(4, 0)
+
+#define CM_REQ_SAP_SUPPORTED_OFFSET 139
+#define CM_REQ_SAP_SUPPORTED_MASK GENMASK(5, 5)
+
+#define CM_REQ_PRIVATE_DATA_OFFSET 140
+#define CM_REQ_PRIVATE_DATA_SIZE 92
+
 struct cm_req_msg {
 	struct ib_mad_hdr hdr;
 
@@ -141,7 +238,7 @@ struct cm_req_msg {
 	/* local ACK timeout:5, rsvd:3 */
 	u8 alt_offset139;
 
-	u32 private_data[IB_CM_REQ_PRIVATE_DATA_SIZE / sizeof(u32)];
+	u32 private_data[CM_REQ_PRIVATE_DATA_SIZE / sizeof(u32)];
 
 } __packed;
 
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 8f318928f29d..8e98faf071cf 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -36,6 +36,7 @@
 
 #include "core_priv.h"
 #include "cma_priv.h"
+#include "cm_msgs.h"
 
 MODULE_AUTHOR("Sean Hefty");
 MODULE_DESCRIPTION("Generic RDMA CM Agent");
@@ -2085,7 +2086,7 @@ static void cma_set_req_event_data(struct rdma_cm_event *event,
 				   void *private_data, int offset)
 {
 	event->param.conn.private_data = private_data + offset;
-	event->param.conn.private_data_len = IB_CM_REQ_PRIVATE_DATA_SIZE - offset;
+	event->param.conn.private_data_len = CM_REQ_PRIVATE_DATA_SIZE - offset;
 	event->param.conn.responder_resources = req_data->responder_resources;
 	event->param.conn.initiator_depth = req_data->initiator_depth;
 	event->param.conn.flow_control = req_data->flow_control;
diff --git a/include/rdma/ib_cm.h b/include/rdma/ib_cm.h
index b476e0e27ec9..956256b2fc5d 100644
--- a/include/rdma/ib_cm.h
+++ b/include/rdma/ib_cm.h
@@ -65,7 +65,6 @@ enum ib_cm_event_type {
 };
 
 enum ib_cm_data_size {
-	IB_CM_REQ_PRIVATE_DATA_SIZE	 = 92,
 	IB_CM_MRA_PRIVATE_DATA_SIZE	 = 222,
 	IB_CM_REJ_PRIVATE_DATA_SIZE	 = 148,
 	IB_CM_REP_PRIVATE_DATA_SIZE	 = 196,
-- 
2.20.1


  parent reply	other threads:[~2019-10-27  7:06 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-27  7:05 [PATCH rdma-next 00/43] Convert CM to bitmaps Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 01/43] RDMA/cm: Add naive SET/GET implementations to hide CM wire format Leon Romanovsky
2019-11-15 20:45   ` Jason Gunthorpe
2019-11-18 13:04     ` Leon Romanovsky
2019-11-18 13:43       ` Jason Gunthorpe
2019-10-27  7:05 ` Leon Romanovsky [this message]
2019-10-27  7:05 ` [PATCH rdma-next 03/43] RDMA/cm: Message Receipt Acknowledgment (MRA) message definitions Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 04/43] RDMA/cm: Reject (REJ) " Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 05/43] RDMA/cm: Reply To Request for communication (REP) definitions Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 06/43] RDMA/cm: Ready To Use (RTU) definitions Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 07/43] RDMA/cm: Request For Communication Release (DREQ) definitions Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 08/43] RDMA/cm: Reply To Request For Communication Release (DREP) definitions Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 09/43] RDMA/cm: Load Alternate Path (LAP) definitions Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 10/43] RDMA/cm: Alternate Path Response (APR) message definitions Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 11/43] RDMA/cm: Service ID Resolution Request (SIDR_REQ) definitions Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 12/43] RDMA/cm: Service ID Resolution Response (SIDR_REP) definitions Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 13/43] RDMA/cm: Convert QPN and EECN to be u32 variables Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 14/43] RDMA/cm: Convert REQ responded resources to the new scheme Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 15/43] RDMA/cm: Convert REQ initiator depth " Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 16/43] RDMA/cm: Convert REQ remote response timeout Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 17/43] RDMA/cm: Simplify QP type to wire protocol translation Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 18/43] RDMA/cm: Convert REQ flow control Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 19/43] RDMA/cm: Convert starting PSN to be u32 variable Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 20/43] RDMA/cm: Update REQ local response timeout Leon Romanovsky
2019-10-27  7:05 ` [PATCH rdma-next 21/43] RDMA/cm: Convert REQ retry count to use new scheme Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 22/43] RDMA/cm: Update REQ path MTU field Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 23/43] RDMA/cm: Convert REQ RNR retry timeout counter Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 24/43] RDMA/cm: Convert REQ MAX CM retries Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 25/43] RDMA/cm: Convert REQ SRQ field Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 26/43] RDMA/cm: Convert REQ flow label field Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 27/43] RDMA/cm: Convert REQ packet rate Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 28/43] RDMA/cm: Convert REQ SL fields Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 29/43] RDMA/cm: Convert REQ subnet local fields Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 30/43] RDMA/cm: Convert REQ local ack timeout Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 31/43] RDMA/cm: Convert MRA MRAed field Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 32/43] RDMA/cm: Convert MRA service timeout Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 33/43] RDMA/cm: Update REJ struct to use new scheme Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 34/43] RDMA/cm: Convert REP target ack delay field Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 35/43] RDMA/cm: Convert REP failover accepted field Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 36/43] RDMA/cm: Convert REP flow control field Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 37/43] RDMA/cm: Convert REP RNR retry count field Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 38/43] RDMA/cm: Convert REP SRQ field Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 39/43] RDMA/cm: Delete unused CM LAP functions Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 40/43] RDMA/cm: Convert LAP flow label field Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 41/43] RDMA/cm: Convert LAP fields Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 42/43] RDMA/cm: Delete unused CM ARP functions Leon Romanovsky
2019-10-27  7:06 ` [PATCH rdma-next 43/43] RDMA/cm: Convert SIDR_REP to new scheme 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=20191027070621.11711-3-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.