All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Sean Hefty" <sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: "Hefty,
	Sean" <sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	linux-rdma <linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: [RFC] [PATCH 12/22] [for 2.6.36] rdma/cm: expose private data when using AF_IB
Date: Tue, 23 Mar 2010 11:11:25 -0700	[thread overview]
Message-ID: <D2244BC987EF4F11AF5E4C0C8B125871@amr.corp.intel.com> (raw)
In-Reply-To: <2F3826558E79459EAD2A457A604221C1-Zpru7NauK7drdx17CPfAsdBPR1lH4CV8@public.gmane.org>

If the source or destination address is AF_IB, then do not
reserve a portion of the private data in the IB CM REQ or SIDR
REQ messages for the cma header.  Instead, all private data
should be exported to the user.  When AF_IB is used, the
rdma cm does not have sufficient information to fill in the
cma header.  Additionally, this will be necessary to support
any IB connection through the rdma cm interface, 

Signed-off-by: Sean Hefty <sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
---
rdma_getaddrinfo will end up formatting the private data for the user
if necessary.

 drivers/infiniband/core/cma.c |   46 +++++++++++++++++++++--------------------
 1 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index b4adcc6..0d3c4ef 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -818,14 +818,13 @@ static void cma_save_net_info(struct rdma_addr *addr,
 	}
 }
 
-static inline int cma_user_data_offset(enum rdma_port_space ps)
+static inline int cma_user_data_offset(struct rdma_cm_id *id)
 {
-	switch (ps) {
-	case RDMA_PS_SDP:
+	if (id->ps == RDMA_PS_SDP || id->route.addr.src_addr.ss_family == AF_IB ||
+	    id->route.addr.dst_addr.ss_family == AF_IB)
 		return 0;
-	default:
+	else
 		return sizeof(struct cma_hdr);
-	}
 }
 
 static void cma_cancel_route(struct rdma_id_private *id_priv)
@@ -1201,7 +1200,7 @@ static int cma_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event)
 		return -ECONNABORTED;
 
 	memset(&event, 0, sizeof event);
-	offset = cma_user_data_offset(listen_id->id.ps);
+	offset = cma_user_data_offset(&listen_id->id);
 	event.event = RDMA_CM_EVENT_CONNECT_REQUEST;
 	if (cma_is_ud_ps(listen_id->id.ps)) {
 		conn_id = cma_new_udp_id(&listen_id->id, ib_event);
@@ -2320,19 +2319,19 @@ err1:
 }
 EXPORT_SYMBOL(rdma_bind_addr);
 
-static int cma_format_hdr(void *hdr, enum rdma_port_space ps,
-			  struct rdma_route *route)
+static int cma_format_hdr(void *hdr, struct rdma_cm_id *id)
 {
 	struct cma_hdr *cma_hdr;
 	struct sdp_hh *sdp_hdr;
 
-	if (route->addr.src_addr.ss_family == AF_INET) {
+	if (id->route.addr.src_addr.ss_family == AF_INET &&
+	    id->route.addr.dst_addr.ss_family == AF_INET) {
 		struct sockaddr_in *src4, *dst4;
 
-		src4 = (struct sockaddr_in *) &route->addr.src_addr;
-		dst4 = (struct sockaddr_in *) &route->addr.dst_addr;
+		src4 = (struct sockaddr_in *) &id->route.addr.src_addr;
+		dst4 = (struct sockaddr_in *) &id->route.addr.dst_addr;
 
-		switch (ps) {
+		switch (id->ps) {
 		case RDMA_PS_SDP:
 			sdp_hdr = hdr;
 			if (sdp_get_majv(sdp_hdr->sdp_version) != SDP_MAJ_VERSION)
@@ -2351,13 +2350,14 @@ static int cma_format_hdr(void *hdr, enum rdma_port_space ps,
 			cma_hdr->port = src4->sin_port;
 			break;
 		}
-	} else {
+	} else if (id->route.addr.src_addr.ss_family == AF_INET6 &&
+		   id->route.addr.dst_addr.ss_family == AF_INET6) {
 		struct sockaddr_in6 *src6, *dst6;
 
-		src6 = (struct sockaddr_in6 *) &route->addr.src_addr;
-		dst6 = (struct sockaddr_in6 *) &route->addr.dst_addr;
+		src6 = (struct sockaddr_in6 *) &id->route.addr.src_addr;
+		dst6 = (struct sockaddr_in6 *) &id->route.addr.dst_addr;
 
-		switch (ps) {
+		switch (id->ps) {
 		case RDMA_PS_SDP:
 			sdp_hdr = hdr;
 			if (sdp_get_majv(sdp_hdr->sdp_version) != SDP_MAJ_VERSION)
@@ -2449,20 +2449,20 @@ static int cma_resolve_ib_udp(struct rdma_id_private *id_priv,
 {
 	struct ib_cm_sidr_req_param req;
 	struct rdma_route *route;
-	int ret;
+	int offset, ret;
 
-	req.private_data_len = sizeof(struct cma_hdr) +
-			       conn_param->private_data_len;
+	offset = cma_user_data_offset(&id_priv->id);
+	req.private_data_len = offset + conn_param->private_data_len;
 	req.private_data = kzalloc(req.private_data_len, GFP_ATOMIC);
 	if (!req.private_data)
 		return -ENOMEM;
 
 	if (conn_param->private_data && conn_param->private_data_len)
-		memcpy((void *) req.private_data + sizeof(struct cma_hdr),
+		memcpy((void *) req.private_data + offset,
 		       conn_param->private_data, conn_param->private_data_len);
 
 	route = &id_priv->id.route;
-	ret = cma_format_hdr((void *) req.private_data, id_priv->id.ps, route);
+	ret = cma_format_hdr((void *) req.private_data, &id_priv->id);
 	if (ret)
 		goto out;
 
@@ -2498,7 +2498,7 @@ static int cma_connect_ib(struct rdma_id_private *id_priv,
 	int offset, ret;
 
 	memset(&req, 0, sizeof req);
-	offset = cma_user_data_offset(id_priv->id.ps);
+	offset = cma_user_data_offset(&id_priv->id);
 	req.private_data_len = offset + conn_param->private_data_len;
 	private_data = kzalloc(req.private_data_len, GFP_ATOMIC);
 	if (!private_data)
@@ -2516,7 +2516,7 @@ static int cma_connect_ib(struct rdma_id_private *id_priv,
 	}
 
 	route = &id_priv->id.route;
-	ret = cma_format_hdr(private_data, id_priv->id.ps, route);
+	ret = cma_format_hdr(private_data, &id_priv->id);
 	if (ret)
 		goto out;
 	req.private_data = private_data;



--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2010-03-23 18:11 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-23 17:48 [RFC] [PATCH 0/22] [for 2.6.36] rdma/cm: add support for native IB addressing Sean Hefty
     [not found] ` <2F3826558E79459EAD2A457A604221C1-Zpru7NauK7drdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2010-03-23 17:52   ` [RFC] [PATCH 1/22] [for 2.6.36] rdma/cm: define native IB address Sean Hefty
2010-03-23 17:54   ` [RFC] [PATCH 2/22] [for 2.6.36] rdma/cm: fix handling of ipv6 addressing in cma_use_port Sean Hefty
2010-03-23 17:55   ` [RFC] [PATCH 3/22] [for 2.6.36] rdma/cm: include AF_IB in loopback and any address checks Sean Hefty
2010-03-23 17:57   ` [RFC] [PATCH 4/22] [for 2.6.36] ib/addr: add AF_IB support to ip_addr_size Sean Hefty
2010-03-23 17:59   ` [RFC] [PATCH 5/22] [for 2.6.36] rdma/cm: update port reservation to support AF_IB Sean Hefty
     [not found]     ` <012F7D9E5E97445E9100EF170212AEE7-Zpru7NauK7drdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2010-03-25 19:05       ` [RFC] [PATCH 5/22 v2] " Sean Hefty
     [not found]         ` <7451BD1514874F3E987E55040776EECC-Zpru7NauK7drdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2010-03-25 20:29           ` Jason Gunthorpe
     [not found]             ` <20100325202924.GO29129-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2010-03-25 21:00               ` Sean Hefty
     [not found]                 ` <AC26D518E7AE4BE6BA3BDFC11480F8DB-Zpru7NauK7drdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2010-03-25 22:04                   ` Jason Gunthorpe
     [not found]                     ` <20100325220435.GP29129-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2010-03-25 22:40                       ` Sean Hefty
     [not found]                         ` <C70579E21917462C89AAEAE3C225A58B-Zpru7NauK7drdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2010-03-25 23:43                           ` Jason Gunthorpe
2010-03-26  3:56                           ` Sean Hefty
     [not found]                             ` <FD7DFBFAF86D4EA99F82836CBCA8AB33-Zpru7NauK7drdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2010-03-26  4:08                               ` Jason Gunthorpe
     [not found]                                 ` <20100326040809.GD9769-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2010-03-26 16:06                                   ` Sean Hefty
     [not found]                                     ` <57287E48AAAD47A4BD50719B889F4596-Zpru7NauK7drdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2010-03-26 17:17                                       ` Sean Hefty
     [not found]                                         ` <350558935FCC47B6A5ABA8402109746C-Zpru7NauK7drdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2010-03-26 17:20                                           ` Jason Gunthorpe
     [not found]                                             ` <20100326172057.GR29129-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2010-03-26 17:23                                               ` Sean Hefty
2010-03-27  0:11                                           ` Sean Hefty
     [not found]                                             ` <0F1BE18DBBF74165AEA2B3283B01F338-Zpru7NauK7drdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2010-03-27  0:44                                               ` Jason Gunthorpe
     [not found]                                                 ` <20100327004440.GE9769-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2010-03-27  1:01                                                   ` Sean Hefty
2010-03-23 18:01   ` [RFC] [PATCH 6/22] [for 2.6.36] rdma/cm: Allow user to specify AF_IB when binding Sean Hefty
2010-03-23 18:03   ` [RFC] [PATCH 7/22] [for 2.6.36] rdma/cm: do not modify sa_family when setting loopback address Sean Hefty
2010-03-23 18:04   ` [RFC] [PATCH 8/22] [for 2.6.36] rdma/cm: restrict AF_IB loopback to binding to IB devices only Sean Hefty
2010-03-23 18:06   ` [RFC] [PATCH 9/22] [for 2.6.36] rdma/cm: add support for AF_IB to rdma_resolve_addr Sean Hefty
2010-03-23 18:07   ` [RFC] [PATCH 10/22] [for 2.6.36] rdma/cm: add support for AF_IB to cma_get_service_id Sean Hefty
2010-03-23 18:08   ` [RFC] [PATCH 11/22] [for 2.6.36] rdma/cm: fixup white space Sean Hefty
2010-03-23 18:11   ` Sean Hefty [this message]
2010-03-23 18:12   ` [RFC] [PATCH 13/22] [for 2.6.36] rdma/cm: only listen on IB devices when using AF_IB Sean Hefty
2010-03-23 18:14   ` [RFC] [PATCH 14/22] [for 2.6.36] rdma/ucm: support querying for AF_IB addresses Sean Hefty
2010-03-23 18:16   ` [RFC] [PATCH 15/22] [for 2.6.36] ib/sa: export function to pack a path record into wire format Sean Hefty
2010-03-23 18:18   ` [RFC] [PATCH 16/22] [for 2.6.36] rdma/ucm: support querying when IB paths are not reversible Sean Hefty
2010-03-23 18:20   ` [RFC] [PATCH 17/22] [for 2.6.36] rdma/cm: export cma_get_service_id Sean Hefty
2010-03-23 18:23   ` [RFC] [PATCH 18/22] [for 2.6.36] rdma/ucm: add ability to query GID addresses Sean Hefty
2010-03-23 18:25   ` [RFC] [PATCH 19/22] [for 2.6.36] rdma/ucm: name changes to indicate only IP addresses supported Sean Hefty
2010-03-23 18:27   ` [RFC] [PATCH 20/22] [for 2.6.36] rdma/ucm: allow user space to bind to AF_IB Sean Hefty
2010-03-23 18:28   ` [RFC] [PATCH 21/22] [for 2.6.36] rdma/ucm: allow user space to pass AF_IB into resolve Sean Hefty
2010-03-23 18:30   ` [RFC] [PATCH 22/22] [for 2.6.36] rdma/ucm: allow user space to specify AF_IB when joining multicast Sean Hefty
     [not found]     ` <48F1FC4C2F114E928EB38D690091185E-Zpru7NauK7drdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2010-03-25 19:08       ` [RFC] [PATCH 22/22 v2] " Sean Hefty
2010-03-23 19:22   ` [RFC] [PATCH 0/22] [for 2.6.36] rdma/cm: add support for native IB addressing Sean Hefty
2010-03-26 17:33   ` Sean Hefty

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=D2244BC987EF4F11AF5E4C0C8B125871@amr.corp.intel.com \
    --to=sean.hefty-ral2jqcrhueavxtiumwx3w@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.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.