--- /dev/null
+Bottom: 8cf40079eee667ce77d40e89ceda72843734dba8
+Top: a112d61591167592063eaca83d29cb8d0f18d350
+Author: Sean Hefty <sean.hefty@intel.com>
+Date: 2010-08-13 17:41:38 -0700
+
+Refresh of max-rdma
+
+---
+
+diff --git a/trunk/ulp/librdmacm/include/rdma/rdma_cma.h b/trunk/ulp/librdmacm/include/rdma/rdma_cma.h
+index 16f7f21..294a75b 100644
+--- a/trunk/ulp/librdmacm/include/rdma/rdma_cma.h
++++ b/trunk/ulp/librdmacm/include/rdma/rdma_cma.h
+@@ -146,6 +146,11 @@ struct rdma_cm_id
+ struct ibv_cq *recv_cq;\r
+ };\r
+ \r
++enum {\r
++ RDMA_MAX_RESP_RES = 0xFF,\r
++ RDMA_MAX_INIT_DEPTH = 0xFF\r
++};\r
++\r
+ struct rdma_conn_param\r
+ {\r
+ const void *private_data;\r
+diff --git a/trunk/ulp/librdmacm/src/cma.cpp b/trunk/ulp/librdmacm/src/cma.cpp
+index 0d6e6f5..d8ba0be 100644
+--- a/trunk/ulp/librdmacm/src/cma.cpp
++++ b/trunk/ulp/librdmacm/src/cma.cpp
+@@ -74,6 +74,8 @@ struct cma_id_private
+ int index;\r
+ volatile LONG refcnt;\r
+ struct rdma_cm_id **req_list;\r
++ uint8_t initiator_depth;\r
++ uint8_t responder_resources;\r
+ };\r
+ \r
+ struct cma_device\r
+@@ -737,15 +739,19 @@ void rdma_destroy_qp(struct rdma_cm_id *id)
+ }\r
+ \r
+ static int ucma_valid_param(struct cma_id_private *id_priv,\r
+- struct rdma_conn_param *conn_param)\r
++ struct rdma_conn_param *param)\r
+ {\r
+ if (id_priv->id.ps != RDMA_PS_TCP) {\r
+ return 0;\r
+ }\r
+ \r
+- if ((conn_param->responder_resources > id_priv->cma_dev->max_responder_resources) ||\r
+- (conn_param->initiator_depth > id_priv->cma_dev->max_initiator_depth)) {\r
+- return -1;\r
++ if ((param->responder_resources != RDMA_MAX_RESP_RES) &&\r
++ (param->responder_resources > id_priv->cma_dev->max_responder_resources)) {\r
++ return rdma_seterrno(EINVAL);\r
++ \r
++ if ((param->initiator_depth != RDMA_MAX_INIT_DEPTH) &&\r
++ (param->initiator_depth > id_priv->cma_dev->max_initiator_depth)) {\r
++ return rdma_seterrno(EINVAL);\r
+ }\r
+ \r
+ return 0;\r
+@@ -765,9 +771,14 @@ int rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param)
+ return ret;\r
+ }\r
+ \r
++ id_priv->responder_resources = min(conn_param->responder_resources,\r
++ id_priv->cma_dev->responder_resources);\r
++ id_priv->initiator_depth = min(conn_param->initiator_depth,\r
++ id_priv->cma_dev->initiator_depth);\r
++\r
+ RtlZeroMemory(&attr, sizeof attr);\r
+- attr.ResponderResources = conn_param->responder_resources;\r
+- attr.InitiatorDepth = conn_param->initiator_depth;\r
++ attr.ResponderResources = id_priv->responder_resources;\r
++ attr.InitiatorDepth = id_priv->initiator_depth;\r
+ attr.RetryCount = conn_param->retry_count;\r
+ attr.RnrRetryCount = conn_param->rnr_retry_count;\r
+ if ((attr.DataLength = conn_param->private_data_len)) {\r
+@@ -892,9 +903,22 @@ int rdma_accept(struct rdma_cm_id *id, struct rdma_conn_param *conn_param)
+ return ret;\r
+ }\r
+ \r
++ if (conn_param->initiator_depth == RDMA_MAX_INIT_DEPTH) {\r
++ id_priv->initiator_depth = min(id_priv->initiator_depth,\r
++ id_priv->cma_dev->max_initiator_depth);\r
++ } else {\r
++ id_priv->initiator_depth = conn_param->initiator_depth;\r
++ }\r
++ if (conn_param->responder_resources == RDMA_MAX_RESP_RES) {\r
++ id_priv->responder_resources = min(id_priv->responder_resources,\r
++ id_priv->cma_dev->max_responder_resources);\r
++ } else {\r
++ id_priv->responder_resources = conn_param->responder_resources;\r
++ }\r
++\r
+ RtlZeroMemory(&attr, sizeof attr);\r
+- attr.ResponderResources = conn_param->responder_resources;\r
+- attr.InitiatorDepth = conn_param->initiator_depth;\r
++ attr.ResponderResources = id_priv->responder_resources;\r
++ attr.InitiatorDepth = id_priv->initiator_depth;\r
+ attr.RetryCount = conn_param->retry_count;\r
+ attr.RnrRetryCount = conn_param->rnr_retry_count;\r
+ if ((attr.DataLength = conn_param->private_data_len)) {\r
+@@ -1004,6 +1028,8 @@ static int ucma_process_conn_req(struct cma_event *event)
+ event->event.event = RDMA_CM_EVENT_CONNECT_REQUEST;\r
+ id_priv->state = cma_passive_connect;\r
+ event->event.listen_id = &listen->id;\r
++ id_priv->initiator_depth = event->event.param.conn.initiator_depth;\r
++ id_priv->responder_resources = event->event.param.conn.responder_resources;\r
+ \r
+ return 0;