]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/infiniband/hw/mthca/mthca_mcg.c
IB/mthca: Update QP state if query QP succeeds
[linux-2.6-omap-h63xx.git] / drivers / infiniband / hw / mthca / mthca_mcg.c
index 77bc6c746f43ac2783c837194b2b29ffd82c416c..a8ad072be0743c44b056d8ae2fde1faeb6511323 100644 (file)
@@ -32,7 +32,6 @@
  * $Id: mthca_mcg.c 1349 2004-12-16 21:09:43Z roland $
  */
 
-#include <linux/init.h>
 #include <linux/string.h>
 #include <linux/slab.h>
 
@@ -154,10 +153,7 @@ int mthca_multicast_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
                return PTR_ERR(mailbox);
        mgm = mailbox->buf;
 
-       if (down_interruptible(&dev->mcg_table.sem)) {
-               err = -EINTR;
-               goto err_sem;
-       }
+       mutex_lock(&dev->mcg_table.mutex);
 
        err = find_mgm(dev, gid->raw, mailbox, &hash, &prev, &index);
        if (err)
@@ -190,7 +186,7 @@ int mthca_multicast_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
 
        for (i = 0; i < MTHCA_QP_PER_MGM; ++i)
                if (mgm->qp[i] == cpu_to_be32(ibqp->qp_num | (1 << 31))) {
-                       mthca_dbg(dev, "QP %06x already a member of MGM\n", 
+                       mthca_dbg(dev, "QP %06x already a member of MGM\n",
                                  ibqp->qp_num);
                        err = 0;
                        goto out;
@@ -241,8 +237,8 @@ int mthca_multicast_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
                BUG_ON(index < dev->limits.num_mgms);
                mthca_free(&dev->mcg_table.alloc, index);
        }
-       up(&dev->mcg_table.sem);
- err_sem:
+       mutex_unlock(&dev->mcg_table.mutex);
+
        mthca_free_mailbox(dev, mailbox);
        return err;
 }
@@ -263,10 +259,7 @@ int mthca_multicast_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
                return PTR_ERR(mailbox);
        mgm = mailbox->buf;
 
-       if (down_interruptible(&dev->mcg_table.sem)) {
-               err = -EINTR;
-               goto err_sem;
-       }
+       mutex_lock(&dev->mcg_table.mutex);
 
        err = find_mgm(dev, gid->raw, mailbox, &hash, &prev, &index);
        if (err)
@@ -371,13 +364,13 @@ int mthca_multicast_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
        }
 
  out:
-       up(&dev->mcg_table.sem);
- err_sem:
+       mutex_unlock(&dev->mcg_table.mutex);
+
        mthca_free_mailbox(dev, mailbox);
        return err;
 }
 
-int __devinit mthca_init_mcg_table(struct mthca_dev *dev)
+int mthca_init_mcg_table(struct mthca_dev *dev)
 {
        int err;
        int table_size = dev->limits.num_mgms + dev->limits.num_amgms;
@@ -389,12 +382,12 @@ int __devinit mthca_init_mcg_table(struct mthca_dev *dev)
        if (err)
                return err;
 
-       init_MUTEX(&dev->mcg_table.sem);
+       mutex_init(&dev->mcg_table.mutex);
 
        return 0;
 }
 
-void __devexit mthca_cleanup_mcg_table(struct mthca_dev *dev)
+void mthca_cleanup_mcg_table(struct mthca_dev *dev)
 {
        mthca_alloc_cleanup(&dev->mcg_table.alloc);
 }