If the user does not specify connection parameters, use default
settings.

From: Sean Hefty <[email protected]>
---
 trunk/ulp/librdmacm/src/cma.cpp |   65 ++++++++++++++++++++++++++-------------
 1 files changed, 43 insertions(+), 22 deletions(-)

diff --git a/trunk/ulp/librdmacm/src/cma.cpp b/trunk/ulp/librdmacm/src/cma.cpp
index 05c672d..7240c4d 100644
--- a/trunk/ulp/librdmacm/src/cma.cpp
+++ b/trunk/ulp/librdmacm/src/cma.cpp
@@ -745,6 +745,14 @@ static int ucma_valid_param(struct cma_id_private *id_priv,
                return 0;
        }
 
+       if (!id_priv->id.qp && !param) {
+               return rdma_seterrno(EINVAL);
+       }
+
+       if (!param) {
+               return 0;
+       }
+
        if ((param->responder_resources != RDMA_MAX_RESP_RES) &&
                (param->responder_resources > 
id_priv->cma_dev->max_responder_resources)) {
                return rdma_seterrno(EINVAL);
@@ -758,6 +766,27 @@ static int ucma_valid_param(struct cma_id_private *id_priv,
        return 0;
 }
 
+static void ucma_set_connect_attr(struct cma_id_private *id_priv,
+                                                                 struct 
rdma_conn_param *param,
+                                                                 
WV_CONNECT_PARAM *attr)
+{
+       RtlZeroMemory(attr, sizeof *attr);
+
+       attr->ResponderResources = id_priv->responder_resources;
+       attr->InitiatorDepth = id_priv->initiator_depth;
+
+       if (param) {
+               attr->RetryCount = param->retry_count;
+               attr->RnrRetryCount = param->rnr_retry_count;
+               if ((attr->DataLength = param->private_data_len)) {
+                       RtlCopyMemory(attr->Data, param->private_data, 
attr->DataLength);
+               }
+       } else {
+               attr->RetryCount = 7;
+               attr->RnrRetryCount = 7;
+       }
+}
+
 __declspec(dllexport)
 int rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param)
 {
@@ -772,20 +801,19 @@ int rdma_connect(struct rdma_cm_id *id, struct 
rdma_conn_param *conn_param)
                return ret;
        }
 
-       id_priv->responder_resources = min(conn_param->responder_resources,
-                                                                          
id_priv->cma_dev->max_responder_resources);
-       id_priv->initiator_depth = min(conn_param->initiator_depth,
-                                                                  
id_priv->cma_dev->max_initiator_depth);
-
-       RtlZeroMemory(&attr, sizeof attr);
-       attr.ResponderResources = id_priv->responder_resources;
-       attr.InitiatorDepth = id_priv->initiator_depth;
-       attr.RetryCount = conn_param->retry_count;
-       attr.RnrRetryCount = conn_param->rnr_retry_count;
-       if ((attr.DataLength = conn_param->private_data_len)) {
-               RtlCopyMemory(attr.Data, conn_param->private_data, 
attr.DataLength);
+       if (conn_param && conn_param->responder_resources != RDMA_MAX_RESP_RES) 
{
+               id_priv->responder_resources = conn_param->responder_resources;
+       } else {
+               id_priv->responder_resources = 
id_priv->cma_dev->max_responder_resources;
+       }
+       if (conn_param && conn_param->initiator_depth != RDMA_MAX_INIT_DEPTH) {
+               id_priv->initiator_depth = conn_param->initiator_depth;
+       } else {
+               id_priv->initiator_depth = 
id_priv->cma_dev->max_initiator_depth;
        }
 
+       ucma_set_connect_attr(id_priv, conn_param, &attr);
+
        id_priv->state = cma_active_connect;
        id_priv->refcnt++;
        id->comp_entry.Busy = 1;
@@ -904,27 +932,20 @@ int rdma_accept(struct rdma_cm_id *id, struct 
rdma_conn_param *conn_param)
                return ret;
        }
 
-       if (conn_param->initiator_depth == RDMA_MAX_INIT_DEPTH) {
+       if (!conn_param || conn_param->initiator_depth == RDMA_MAX_INIT_DEPTH) {
                id_priv->initiator_depth = min(id_priv->initiator_depth,
                                                                           
id_priv->cma_dev->max_initiator_depth);
        } else {
                id_priv->initiator_depth = conn_param->initiator_depth;
        }
-       if (conn_param->responder_resources == RDMA_MAX_RESP_RES) {
+       if (!conn_param || conn_param->responder_resources == 
RDMA_MAX_RESP_RES) {
                id_priv->responder_resources = min(id_priv->responder_resources,
                                                                                
   id_priv->cma_dev->max_responder_resources);
        } else {
                id_priv->responder_resources = conn_param->responder_resources;
        }
 
-       RtlZeroMemory(&attr, sizeof attr);
-       attr.ResponderResources = id_priv->responder_resources;
-       attr.InitiatorDepth = id_priv->initiator_depth;
-       attr.RetryCount = conn_param->retry_count;
-       attr.RnrRetryCount = conn_param->rnr_retry_count;
-       if ((attr.DataLength = conn_param->private_data_len)) {
-               RtlCopyMemory(attr.Data, conn_param->private_data, 
attr.DataLength);
-       }
+       ucma_set_connect_attr(id_priv, conn_param, &attr);
 
        id_priv->state = cma_accepting;
        id_priv->refcnt++;

_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to