Commit 8a99c81f authored by Bob Pearson's avatar Bob Pearson Committed by Jason Gunthorpe

RDMA/rxe: Replace int num_qp by atomic_t qp_num

Replace int num_qp in struct rxe_mcg by atomic_t qp_num.

Link: https://lore.kernel.org/r/20220208211644.123457-5-rpearsonhpe@gmail.comSigned-off-by: default avatarBob Pearson <rpearsonhpe@gmail.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
parent 5bc15d1f
...@@ -111,7 +111,8 @@ static int rxe_attach_mcg(struct rxe_dev *rxe, struct rxe_qp *qp, ...@@ -111,7 +111,8 @@ static int rxe_attach_mcg(struct rxe_dev *rxe, struct rxe_qp *qp,
} }
/* check limits after checking if already attached */ /* check limits after checking if already attached */
if (mcg->num_qp >= rxe->attr.max_mcast_qp_attach) { if (atomic_inc_return(&mcg->qp_num) > rxe->attr.max_mcast_qp_attach) {
atomic_dec(&mcg->qp_num);
kfree(mca); kfree(mca);
err = -ENOMEM; err = -ENOMEM;
goto out; goto out;
...@@ -122,7 +123,6 @@ static int rxe_attach_mcg(struct rxe_dev *rxe, struct rxe_qp *qp, ...@@ -122,7 +123,6 @@ static int rxe_attach_mcg(struct rxe_dev *rxe, struct rxe_qp *qp,
mca->qp = qp; mca->qp = qp;
atomic_inc(&qp->mcg_num); atomic_inc(&qp->mcg_num);
mcg->num_qp++;
list_add(&mca->qp_list, &mcg->qp_list); list_add(&mca->qp_list, &mcg->qp_list);
err = 0; err = 0;
...@@ -182,8 +182,7 @@ static int rxe_detach_mcg(struct rxe_dev *rxe, struct rxe_qp *qp, ...@@ -182,8 +182,7 @@ static int rxe_detach_mcg(struct rxe_dev *rxe, struct rxe_qp *qp,
* object since we are still holding a ref * object since we are still holding a ref
* from the get key above. * from the get key above.
*/ */
mcg->num_qp--; if (atomic_dec_return(&mcg->qp_num) <= 0)
if (mcg->num_qp <= 0)
__rxe_destroy_mcg(mcg); __rxe_destroy_mcg(mcg);
atomic_dec(&qp->mcg_num); atomic_dec(&qp->mcg_num);
...@@ -222,7 +221,7 @@ int rxe_attach_mcast(struct ib_qp *ibqp, union ib_gid *mgid, u16 mlid) ...@@ -222,7 +221,7 @@ int rxe_attach_mcast(struct ib_qp *ibqp, union ib_gid *mgid, u16 mlid)
err = rxe_attach_mcg(rxe, qp, mcg); err = rxe_attach_mcg(rxe, qp, mcg);
/* if we failed to attach the first qp to mcg tear it down */ /* if we failed to attach the first qp to mcg tear it down */
if (mcg->num_qp == 0) if (atomic_read(&mcg->qp_num) == 0)
rxe_destroy_mcg(mcg); rxe_destroy_mcg(mcg);
rxe_drop_ref(mcg); rxe_drop_ref(mcg);
......
...@@ -356,7 +356,7 @@ struct rxe_mcg { ...@@ -356,7 +356,7 @@ struct rxe_mcg {
struct rxe_dev *rxe; struct rxe_dev *rxe;
struct list_head qp_list; struct list_head qp_list;
union ib_gid mgid; union ib_gid mgid;
int num_qp; atomic_t qp_num;
u32 qkey; u32 qkey;
u16 pkey; u16 pkey;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment