return dev_mc_del(rxe->ndev, ll_addr);
 }
 
-/* caller should hold mc_grp_pool->pool_lock */
+/* caller should hold rxe->mcg_lock */
 static struct rxe_mcg *create_grp(struct rxe_dev *rxe,
                                     struct rxe_pool *pool,
                                     union ib_gid *mgid)
                return ERR_PTR(-ENOMEM);
 
        INIT_LIST_HEAD(&grp->qp_list);
-       spin_lock_init(&grp->mcg_lock);
        grp->rxe = rxe;
        rxe_add_key_locked(grp, mgid);
 
        if (rxe->attr.max_mcast_qp_attach == 0)
                return -EINVAL;
 
-       write_lock_irqsave(&pool->pool_lock, flags);
+       spin_lock_irqsave(&rxe->mcg_lock, flags);
 
        grp = rxe_pool_get_key_locked(pool, mgid);
        if (grp)
 
        grp = create_grp(rxe, pool, mgid);
        if (IS_ERR(grp)) {
-               write_unlock_irqrestore(&pool->pool_lock, flags);
+               spin_unlock_irqrestore(&rxe->mcg_lock, flags);
                err = PTR_ERR(grp);
                return err;
        }
 
 done:
-       write_unlock_irqrestore(&pool->pool_lock, flags);
+       spin_unlock_irqrestore(&rxe->mcg_lock, flags);
        *grp_p = grp;
        return 0;
 }
        unsigned long flags;
 
        /* check to see of the qp is already a member of the group */
-       spin_lock_irqsave(&grp->mcg_lock, flags);
+       spin_lock_irqsave(&rxe->mcg_lock, flags);
        list_for_each_entry(elem, &grp->qp_list, qp_list) {
                if (elem->qp == qp) {
                        err = 0;
 
        err = 0;
 out:
-       spin_unlock_irqrestore(&grp->mcg_lock, flags);
+       spin_unlock_irqrestore(&rxe->mcg_lock, flags);
        return err;
 }
 
        if (!grp)
                goto err1;
 
-       spin_lock_irqsave(&grp->mcg_lock, flags);
+       spin_lock_irqsave(&rxe->mcg_lock, flags);
 
        list_for_each_entry_safe(elem, tmp, &grp->qp_list, qp_list) {
                if (elem->qp == qp) {
                        grp->num_qp--;
                        atomic_dec(&qp->mcg_num);
 
-                       spin_unlock_irqrestore(&grp->mcg_lock, flags);
+                       spin_unlock_irqrestore(&rxe->mcg_lock, flags);
                        rxe_drop_ref(elem);
                        rxe_drop_ref(grp);      /* ref held by QP */
                        rxe_drop_ref(grp);      /* ref from get_key */
                }
        }
 
-       spin_unlock_irqrestore(&grp->mcg_lock, flags);
+       spin_unlock_irqrestore(&rxe->mcg_lock, flags);
        rxe_drop_ref(grp);                      /* ref from get_key */
 err1:
        return -EINVAL;