]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
debug cma
authorSean Hefty <sean.hefty@intel.com>
Tue, 2 Feb 2010 23:46:32 +0000 (15:46 -0800)
committerSean Hefty <sean.hefty@intel.com>
Wed, 3 Feb 2010 00:39:15 +0000 (16:39 -0800)
trunk/ulp/librdmacm/src/cma.cpp

index cde309b881321206bbbb73204bd544d8d9989991..dc06faee36e28229ba93bcb7145fd8c10b30dec3 100644 (file)
@@ -71,6 +71,7 @@ struct cma_id_private
        int                                                     index;\r
        volatile LONG                           refcnt;\r
        struct rdma_cm_id                       **req_list;\r
+int active;\r
 };\r
 \r
 struct cma_device\r
@@ -672,6 +673,7 @@ int rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param)
                RtlCopyMemory(attr.Data, conn_param->private_data, attr.DataLength);\r
        }\r
 \r
+id_priv->active = 1;\r
        id_priv->state = cma_active_connect;\r
        id_priv->refcnt++;\r
        id->comp_entry.Busy = 1;\r
@@ -840,11 +842,13 @@ int rdma_disconnect(struct rdma_cm_id *id)
        HRESULT hr;\r
 \r
        id_priv = CONTAINING_RECORD(id, struct cma_id_private, id);\r
+       EnterCriticalSection(&lock);\r
        if (id_priv->state == cma_connected) {\r
                id_priv->state = cma_active_disconnect;\r
-       } else {\r
+       } else if (id_priv->state == cma_passive_disconnect) {\r
                id_priv->state = cma_disconnected;\r
        }\r
+       LeaveCriticalSection(&lock);\r
        hr = id->ep.connect->Disconnect(NULL);\r
        if (FAILED(hr)) {\r
                return hr;\r
@@ -904,6 +908,8 @@ static int ucma_process_conn_resp(struct cma_event *event)
        HRESULT hr;\r
 \r
        if (FAILED(event->event.status)) {\r
+id = &event->id_priv->id;\r
+printf("ucma_process_conn_resp %p - failed 0x%x\n", id, event->event.status);\r
                goto err;\r
        }\r
 \r
@@ -915,6 +921,7 @@ static int ucma_process_conn_resp(struct cma_event *event)
        hr = id->ep.connect->Accept(id->qp->conn_handle, &attr,\r
                                                                &id->comp_entry.Overlap);\r
        if (FAILED(hr) && hr != WV_IO_PENDING) {\r
+printf("ucma_process_conn_resp - accept failed 0x%x\n", hr);\r
                id->comp_entry.Busy = 0;\r
                event->event.status = hr;\r
                goto err;\r
@@ -938,6 +945,8 @@ static void ucma_process_establish(struct cma_event *event)
                event->event.status = ucma_query_connect(&id_priv->id,\r
                                                                                                 &event->event.param.conn);\r
        }\r
+else\r
+ printf("ucma_process_establish %p error 0x%x (active %d)\n", id_priv, event->event.status, id_priv->active);\r
 \r
        if (SUCCEEDED(event->event.status)) {\r
                event->event.event = RDMA_CM_EVENT_ESTABLISHED;\r
@@ -947,6 +956,7 @@ static void ucma_process_establish(struct cma_event *event)
                id_priv->id.comp_entry.Busy = 1;\r
                id_priv->id.ep.connect->NotifyDisconnect(&id_priv->id.comp_entry.Overlap);\r
        } else {\r
+printf("ucma_process_establish failure 0x%x\n", event->event.status);\r
                event->event.event = RDMA_CM_EVENT_CONNECT_ERROR;\r
                event->id_priv->state = cma_disconnected;\r
        }\r