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;