Roland,
Please review this patch.
This patch has fixed a deadlock problem: the caller calls ipoib_put_ah() while holding priv->lock. (In ipoib_free_ah() the same lock is reacquired.) This also fixes the ipoib_flush_paths() calls __patch_free() without holding priv->lock.
My email has problem to inline patches. So I inline this patch for review and an attached file for applying this patch. Sorry for the inconvenient.
diff -urN infiniband/ulp/ipoib/ipoib_ib.c infiniband-panic/ulp/ipoib/ipoib_ib.c
--- infiniband/ulp/ipoib/ipoib_ib.c 2005-02-09 10:45:06.000000000 -0800
+++ infiniband-panic/ulp/ipoib/ipoib_ib.c 2005-02-14 14:52:43.000000000 -0800
@@ -85,11 +85,8 @@
ipoib_dbg(priv, "Freeing ah %p\n", ah->ah);
ib_destroy_ah(ah->ah);
kfree(ah);
- } else {
- spin_lock_irqsave(&priv->lock, flags);
+ } else
list_add_tail(&ah->list, &priv->dead_ahs);
- spin_unlock_irqrestore(&priv->lock, flags);
- }
}
static inline int ipoib_ib_receive(struct ipoib_dev_priv *priv,
diff -urN infiniband/ulp/ipoib/ipoib_main.c infiniband-panic/ulp/ipoib/ipoib_main.c
--- infiniband/ulp/ipoib/ipoib_main.c 2005-02-04 16:05:13.000000000 -0800
+++ infiniband-panic/ulp/ipoib/ipoib_main.c 2005-02-11 15:00:33.000000000 -0800
@@ -256,7 +256,9 @@
if (path->query)
ib_sa_cancel_query(path->query_id, path->query);
wait_for_completion(&path->done);
+ spin_lock_irqsave(&priv->lock, flags);
__path_free(dev, path);
+ spin_unlock_irqrestore(&priv->lock, flags);
}
}
diff -urN infiniband/ulp/ipoib/ipoib_multicast.c infiniband-panic/ulp/ipoib/ipoib_multicast.c
--- infiniband/ulp/ipoib/ipoib_multicast.c 2005-02-04 16:05:13.000000000 -0800
+++ infiniband-panic/ulp/ipoib/ipoib_multicast.c 2005-02-14 14:54:52.000000000 -0800
@@ -107,11 +107,11 @@
kfree(neigh);
}
- spin_unlock_irqrestore(&priv->lock, flags);
-
if (mcast->ah)
ipoib_put_ah(mcast->ah);
+ spin_unlock_irqrestore(&priv->lock, flags);
+
while (!skb_queue_empty(&mcast->pkt_queue)) {
struct sk_buff *skb = skb_dequeue(&mcast->pkt_queue);
Thanks
Shirley Ma
IBM Linux Technology Center
15300 SW Koll Parkway
Beaverton, OR 97006-6063
Phone(Fax): (503) 578-7638
infiniband-lock.patch
Description: Binary data
_______________________________________________ openib-general mailing list openib-general@openib.org http://openib.org/mailman/listinfo/openib-general
To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general