<html><body>
<p>Hello Roland, <br>
<br>
        We have found several panics and memory leak for IPoIB-CM. I reviewed the code and caught some issues. I will start to submit a list of patches for review. i have tested the combined patch for connectX, it passed 24 hours 16 netperf/netserver bidirctional TCP, UDP stream test for 2.7.26-rc6 kernel.<br>
<br>
        I turned on debug, I found that same QP context being destoryed twice for nonSRQ connection. I reviewed the code and found that there is a window the list could be added after the reap call, so checking the QP context status is needed. <br>
<br>
        My linux email client is broken, so I attach each patch here.<br>
<br>
Address a possible race<br>
-------------------<br>
Signed-off-by: Shirley Ma <xma@us.ibm.com><br>
<br>
 drivers/infiniband/ulp/ipoib/ipoib_cm.c |    9 ++++++---<br>
 1 files changed, 6 insertions(+), 3 deletions(-)<br>
<br>
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c<br>
index 97e67d3..0886ee7 100644<br>
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c<br>
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c<br>
@@ -559,9 +559,12 @@ void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc)<br>
                else {<br>
                        if (!--p->recv_count) {<br>
                                spin_lock_irqsave(&priv->lock, flags);<br>
-                               list_move(&p->list, &priv->cm.rx_reap_list);<br>
-                               spin_unlock_irqrestore(&priv->lock, flags);<br>
-                               queue_work(ipoib_workqueue, &priv->cm.rx_reap_task);<br>
+                               if (p->state == IPOIB_CM_RX_LIVE) {<br>
+                                       list_move(&p->list, &priv->cm.rx_reap_list);<br>
+                                       spin_unlock_irqrestore(&priv->lock, flags);<br>
+                                       queue_work(ipoib_workqueue, &priv->cm.rx_reap_task);<br>
+                               } else<br>
+                                       spin_unlock_irqrestore(&priv->lock, flags);<br>
                        }<br>
                        return;<br>
                }       <br>
<br>
<i>(See attached file: nonsrq_last_recv_race.patch)</i><br>
<br>
Thanks<br>
Shirley </body></html>