]> git.openfabrics.org - ~ardavis/dapl.git/commitdiff
openib_cma: fix cm responder/initiator exchange
authorArlin Davis <arlin.r.davis@intel.com>
Mon, 28 Jan 2008 22:00:47 +0000 (14:00 -0800)
committerArlin Davis <arlin.r.davis@intel.com>
Mon, 28 Jan 2008 22:00:47 +0000 (14:00 -0800)
            cleanup destroy_conn code

Signed-off by: Arlin Davis <ardavis@ichips.intel.com>

dapl/openib_cma/dapl_ib_cm.c

index 06c1a654ccab1b829205030bca939a667282f7da..ae126582ad9a6ffbecb13453bb97e101a061adac 100755 (executable)
@@ -152,38 +152,8 @@ static void dapli_route_resolve(struct dapl_cm_id *conn)
                conn->params.private_data_len,
                conn->params.responder_resources, 
                conn->params.initiator_depth );
-#if 0
-       /* Get default connect request timeout values, and adjust */
-       ret = rdma_get_option(conn->cm_id, RDMA_PROTO_IB, IB_CM_REQ_OPTIONS,
-                             (void*)&req_opt, &optlen);
-       if (ret) {
-               dapl_dbg_log(DAPL_DBG_TYPE_ERR, " rdma_get_option failed: %s\n",
-                            strerror(errno));
-               goto bail;
-       }
-
-       dapl_dbg_log(DAPL_DBG_TYPE_CM, " route_resolve: "
-                    "Set CR times - response %d to %d, retry %d to %d\n",
-                    req_opt.remote_cm_response_timeout, 
-                    conn->hca->ib_trans.max_cm_timeout,
-                    req_opt.max_cm_retries, 
-                    conn->hca->ib_trans.max_cm_retries);
-
-       /* Use hca response time setting for connect requests */
-       req_opt.max_cm_retries = conn->hca->ib_trans.max_cm_retries;
-       req_opt.remote_cm_response_timeout = 
-                               conn->hca->ib_trans.max_cm_timeout;
-       req_opt.local_cm_response_timeout = 
-                               req_opt.remote_cm_response_timeout;
-       ret = rdma_set_option(conn->cm_id, RDMA_PROTO_IB, IB_CM_REQ_OPTIONS,
-                             (void*)&req_opt, optlen);
-       if (ret) {
-               dapl_dbg_log(DAPL_DBG_TYPE_ERR, " rdma_set_option failed: %s\n",
-                            strerror(errno));
-               goto bail;
-       }
-#endif
        ret = rdma_connect(conn->cm_id, &conn->params);
+
        if (ret) {
                dapl_dbg_log(DAPL_DBG_TYPE_ERR, " rdma_connect failed: %s\n",
                             strerror(errno));
@@ -214,8 +184,10 @@ void dapli_destroy_conn(struct dapl_cm_id *conn)
        dapl_os_lock(&conn->lock);
        conn->destroy = 1;
        
-       if (conn->ep)
+       if (conn->ep) {
                conn->ep->cm_handle = IB_INVALID_HANDLE;
+               conn->ep->qp_handle = IB_INVALID_HANDLE;
+       }
 
        cm_id = conn->cm_id;
        conn->cm_id = NULL;
@@ -260,12 +232,12 @@ static struct dapl_cm_id * dapli_req_recv(struct dapl_cm_id *conn,
                new_conn->hca = conn->hca;
                
                /* Get requesters connect data, setup for accept */
-               new_conn->params.responder_resources = 
-                       DAPL_MIN(event->param.conn.initiator_depth,
-                                conn->hca->ib_trans.max_rdma_rd_in);
-               new_conn->params.initiator_depth = 
-                       DAPL_MIN(event->param.conn.responder_resources,
-                                conn->hca->ib_trans.max_rdma_rd_out);
+                new_conn->params.responder_resources =
+                        DAPL_MIN(event->param.conn.responder_resources,
+                                 conn->hca->ib_trans.max_rdma_rd_in);
+                new_conn->params.initiator_depth =
+                        DAPL_MIN(event->param.conn.initiator_depth,
+                                 conn->hca->ib_trans.max_rdma_rd_out);
 
                new_conn->params.flow_control = event->param.conn.flow_control;
                new_conn->params.rnr_retry_count = event->param.conn.rnr_retry_count;
@@ -389,8 +361,10 @@ static void dapli_cm_active_cb(struct dapl_cm_id *conn,
                        &conn->cm_id->route.addr.dst_addr)->sin_addr.s_addr));
 
                /* setup local and remote ports for ep query */
-               conn->ep->param.remote_port_qual = rdma_get_dst_port(conn->cm_id);
-               conn->ep->param.local_port_qual = rdma_get_src_port(conn->cm_id);
+               conn->ep->param.remote_port_qual = 
+                       ntohs(rdma_get_dst_port(conn->cm_id));
+               conn->ep->param.local_port_qual = 
+                       ntohs(rdma_get_src_port(conn->cm_id));
 
                dapl_evd_connection_callback(conn, IB_CME_CONNECTED,
                                             event->param.conn.private_data, conn->ep);
@@ -634,7 +608,7 @@ dapls_ib_disconnect(IN DAPL_EP *ep_ptr,
                     " disconnect(ep %p, conn %p, id %d flags %x)\n",
                     ep_ptr,conn, (conn?conn->cm_id:0),close_flags);
 
-       if (conn == IB_INVALID_HANDLE)
+       if ((conn == IB_INVALID_HANDLE) || (conn->cm_id == NULL))
                return DAT_SUCCESS;
 
        /* no graceful half-pipe disconnect option */
@@ -882,9 +856,6 @@ dapls_ib_accept_connection(IN DAT_CR_HANDLE cr_handle,
        }
 
        cr_ptr->param.local_ep_handle = ep_handle;
-       ep_ptr->qp_handle = cr_conn;
-       ep_ptr->cm_handle = cr_conn;
-       cr_conn->ep = ep_ptr;
        cr_conn->params.private_data = p_data;
        cr_conn->params.private_data_len = p_size;
 
@@ -895,6 +866,11 @@ dapls_ib_accept_connection(IN DAT_CR_HANDLE cr_handle,
                goto bail;
        }
 
+        /* save accepted conn and EP reference */
+        ep_ptr->qp_handle = cr_conn;
+        ep_ptr->cm_handle = cr_conn;
+        cr_conn->ep = ep_ptr;
+
        /* setup local and remote ports for ep query */
        ep_ptr->param.remote_port_qual = rdma_get_dst_port(cr_conn->cm_id);
        ep_ptr->param.local_port_qual = rdma_get_src_port(cr_conn->cm_id);