ipoib_open() has to be called with rtnl_lock. First, it calls dev_change_flags()
which needs rtnl_lock, and second, it needs to sync with ipoib_stop().
Signed-off-by: Yossi Etigin <[EMAIL PROTECTED]>
--
It will not deadlock because we don't flush ipoib_workqueue with rtnl_lock
taken.
Index: b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
===================================================================
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c 2008-10-17 17:29:51.000000000
+0200
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c 2008-10-19 14:17:12.000000000
+0200
@@ -1045,9 +1045,11 @@ void ipoib_pkey_poll(struct work_struct
ipoib_pkey_dev_check_presence(dev);
- if (test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags))
+ if (test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags)) {
+ rtnl_lock();
ipoib_open(dev);
- else {
+ rtnl_unlock();
+ } else {
mutex_lock(&pkey_mutex);
if (!test_bit(IPOIB_PKEY_STOP, &priv->flags))
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general