Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Apr 2012 19:31:52 +0000 (UTC)
From:      Navdeep Parhar <np@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r234442 - in user/np/toe_iwarp/sys/ofed: drivers/infiniband/core include/rdma
Message-ID:  <201204181931.q3IJVqZq047516@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: np
Date: Wed Apr 18 19:31:52 2012
New Revision: 234442
URL: http://svn.freebsd.org/changeset/base/234442

Log:
  Add a socket (for additional context) to a couple of iw_cm data structures.
  
  Obtained from:	Chelsio

Modified:
  user/np/toe_iwarp/sys/ofed/drivers/infiniband/core/cma.c
  user/np/toe_iwarp/sys/ofed/drivers/infiniband/core/iwcm.c
  user/np/toe_iwarp/sys/ofed/include/rdma/iw_cm.h

Modified: user/np/toe_iwarp/sys/ofed/drivers/infiniband/core/cma.c
==============================================================================
--- user/np/toe_iwarp/sys/ofed/drivers/infiniband/core/cma.c	Wed Apr 18 19:30:22 2012	(r234441)
+++ user/np/toe_iwarp/sys/ofed/drivers/infiniband/core/cma.c	Wed Apr 18 19:31:52 2012	(r234442)
@@ -1478,6 +1478,7 @@ static int cma_iw_listen(struct rdma_id_
 	struct sockaddr_in *sin;
 
 	id_priv->cm_id.iw = iw_create_cm_id(id_priv->id.device,
+					    id_priv->sock,
 					    iw_conn_req_handler,
 					    id_priv);
 	if (IS_ERR(id_priv->cm_id.iw))
@@ -2055,7 +2056,16 @@ static int cma_bind_addr(struct rdma_cm_
 				((struct sockaddr_in6 *) dst_addr)->sin6_scope_id;
 		}
 	}
-	return rdma_bind_addr(id, src_addr);
+	if (!cma_any_addr(src_addr))
+		return rdma_bind_addr(id, src_addr);
+	else {
+		struct sockaddr_in addr_in;
+
+        	memset(&addr_in, 0, sizeof addr_in);
+        	addr_in.sin_family = dst_addr->sa_family;
+        	addr_in.sin_len = sizeof addr_in;
+        	return rdma_bind_addr(id, (struct sockaddr *) &addr_in);
+	}
 }
 
 int rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr,
@@ -2604,7 +2614,8 @@ static int cma_connect_iw(struct rdma_id
 	int ret;
 	struct iw_cm_conn_param iw_param;
 
-	cm_id = iw_create_cm_id(id_priv->id.device, cma_iw_handler, id_priv);
+	cm_id = iw_create_cm_id(id_priv->id.device, id_priv->sock,
+				cma_iw_handler, id_priv);
 	if (IS_ERR(cm_id)) {
 		ret = PTR_ERR(cm_id);
 		goto out;

Modified: user/np/toe_iwarp/sys/ofed/drivers/infiniband/core/iwcm.c
==============================================================================
--- user/np/toe_iwarp/sys/ofed/drivers/infiniband/core/iwcm.c	Wed Apr 18 19:30:22 2012	(r234441)
+++ user/np/toe_iwarp/sys/ofed/drivers/infiniband/core/iwcm.c	Wed Apr 18 19:31:52 2012	(r234442)
@@ -189,6 +189,7 @@ static void rem_ref(struct iw_cm_id *cm_
 static int cm_event_handler(struct iw_cm_id *cm_id, struct iw_cm_event *event);
 
 struct iw_cm_id *iw_create_cm_id(struct ib_device *device,
+				 struct socket *so,
 				 iw_cm_handler cm_handler,
 				 void *context)
 {
@@ -205,6 +206,7 @@ struct iw_cm_id *iw_create_cm_id(struct 
 	cm_id_priv->id.event_handler = cm_event_handler;
 	cm_id_priv->id.add_ref = add_ref;
 	cm_id_priv->id.rem_ref = rem_ref;
+	cm_id_priv->id.so = so;
 	spin_lock_init(&cm_id_priv->lock);
 	atomic_set(&cm_id_priv->refcount, 1);
 	init_waitqueue_head(&cm_id_priv->connect_wait);
@@ -629,6 +631,7 @@ static void cm_conn_req_handler(struct i
 	spin_unlock_irqrestore(&listen_id_priv->lock, flags);
 
 	cm_id = iw_create_cm_id(listen_id_priv->id.device,
+				iw_event->so,
 				listen_id_priv->id.cm_handler,
 				listen_id_priv->id.context);
 	/* If the cm_id could not be created, ignore the request */

Modified: user/np/toe_iwarp/sys/ofed/include/rdma/iw_cm.h
==============================================================================
--- user/np/toe_iwarp/sys/ofed/include/rdma/iw_cm.h	Wed Apr 18 19:30:22 2012	(r234441)
+++ user/np/toe_iwarp/sys/ofed/include/rdma/iw_cm.h	Wed Apr 18 19:31:52 2012	(r234442)
@@ -63,6 +63,7 @@ struct iw_cm_event {
 	void *private_data;
 	u8 private_data_len;
 	void *provider_data;
+	struct socket *so;
 };
 
 /**
@@ -98,6 +99,7 @@ struct iw_cm_id {
 	/* Used by provider to add and remove refs on IW cm_id */
 	void (*add_ref)(struct iw_cm_id *);
 	void (*rem_ref)(struct iw_cm_id *);
+	struct socket           *so;
 };
 
 struct iw_cm_conn_param {
@@ -139,7 +141,7 @@ struct iw_cm_verbs {
  *   returned IW CM identifier.
  * @context: User specified context associated with the id.
  */
-struct iw_cm_id *iw_create_cm_id(struct ib_device *device,
+struct iw_cm_id *iw_create_cm_id(struct ib_device *device, struct socket *so,
 				 iw_cm_handler cm_handler, void *context);
 
 /**



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201204181931.q3IJVqZq047516>