<html><body>
<p>Hello Roland,<br>
<br>
Let's assume this senarios: <br>
<br>
1. QP100 last WQE reached event, QP100 context is added into flush_list, and then it is put into drain_list, and does post_send of a drain WR.<br>
2. QP200 last WQE reached event, QP200 context is added into flush_list, but not drain_list since only one drain WR will be posted<br>
3. QP300 ...., QP300 context is added into flush_list, but not drain_list<br>
<br>
So QP100 is on drain_list, QP200, QP300 are on flush_list<br>
<br>
In rcq poll_cq,<br>
1. QP 100 drain WR cqe is polled, it will put QP100 into reap_list then call ipoib_cm_start_rx_drain(), post_send of QP200 drain WR, and QP200, QP300 are both moved from flush_list to drain_list<br>
2. QP 200 drain WR cqe is polled, it will move both QP200 and QP300 from drain_list to reap_list<br>
3. QP300 cqe comes, but QP300 context has been freed, ---> panic.<br>
<br>
Does that make sense?<br>
<br>
Thanks<br>
Shirley </body></html>