<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>