[ofw] CM ref counting issues...
Sean Hefty
sean.hefty at intel.com
Mon Dec 14 18:18:16 PST 2009
>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
More information about the ofw
mailing list