>It appears that even though the cm callback removed the WdfRequest from >the endpoint queue, the endpoint queue is still aware of it. The cleanup >thread blocks in WdfIoQueuePurgeSynchronously, and my guess is that >it's waiting for the missing WdfRequest to complete, which it can't >because the cleanup thread is blocking the wq thread from making progress.
I reworked the code in winverbs to avoid this problem, and this part of the hang went away. Apparently KMDF IoQueues track all requests that go through them and wait for them to complete before they can be destroyed. Removing a request from an IoQueue doesn't fully de-associate the request from the queue. (Boy, I wish that had been documented somewhere.) Anyway, here's part of the problem with the IB CM: __cep_mad_send_cb destroying cid 0x155c, attr 0x1500 mad status 0x9 cep state 0x10000 __cep_mad_send_cb destroying cid 0x229, attr 0x1500 mad status 0x9 cep state 0x10000 This is showing that DREQs were sent for CEPs. The CEPs were 'destroyed', but the DREQs were not canceled. So, destruction of the CEPs hung until the DREQs timed out. - Sean _______________________________________________ ofw mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
