Skip to content

Commit

Permalink
RDMA/rxe: Move mw cleanup code to rxe_mw_cleanup()
Browse files Browse the repository at this point in the history
Move code from rxe_dealloc_mw() to rxe_mw_cleanup() to allow flows which
hold a reference to mw to complete.

Link: https://lore.kernel.org/r/20220421014042.26985-7-rpearsonhpe@gmail.com
Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
  • Loading branch information
Bob Pearson authored and Jason Gunthorpe committed May 9, 2022
1 parent cf40367 commit cde3f5d
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 29 deletions.
57 changes: 28 additions & 29 deletions drivers/infiniband/sw/rxe/rxe_mw.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,40 +36,11 @@ int rxe_alloc_mw(struct ib_mw *ibmw, struct ib_udata *udata)
return 0;
}

static void rxe_do_dealloc_mw(struct rxe_mw *mw)
{
if (mw->mr) {
struct rxe_mr *mr = mw->mr;

mw->mr = NULL;
atomic_dec(&mr->num_mw);
rxe_put(mr);
}

if (mw->qp) {
struct rxe_qp *qp = mw->qp;

mw->qp = NULL;
rxe_put(qp);
}

mw->access = 0;
mw->addr = 0;
mw->length = 0;
mw->state = RXE_MW_STATE_INVALID;
}

int rxe_dealloc_mw(struct ib_mw *ibmw)
{
struct rxe_mw *mw = to_rmw(ibmw);
struct rxe_pd *pd = to_rpd(ibmw->pd);

spin_lock_bh(&mw->lock);
rxe_do_dealloc_mw(mw);
spin_unlock_bh(&mw->lock);

rxe_put(mw);
rxe_put(pd);

return 0;
}
Expand Down Expand Up @@ -336,3 +307,31 @@ struct rxe_mw *rxe_lookup_mw(struct rxe_qp *qp, int access, u32 rkey)

return mw;
}

void rxe_mw_cleanup(struct rxe_pool_elem *elem)
{
struct rxe_mw *mw = container_of(elem, typeof(*mw), elem);
struct rxe_pd *pd = to_rpd(mw->ibmw.pd);

rxe_put(pd);

if (mw->mr) {
struct rxe_mr *mr = mw->mr;

mw->mr = NULL;
atomic_dec(&mr->num_mw);
rxe_put(mr);
}

if (mw->qp) {
struct rxe_qp *qp = mw->qp;

mw->qp = NULL;
rxe_put(qp);
}

mw->access = 0;
mw->addr = 0;
mw->length = 0;
mw->state = RXE_MW_STATE_INVALID;
}
1 change: 1 addition & 0 deletions drivers/infiniband/sw/rxe/rxe_pool.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ static const struct rxe_type_info {
.name = "mw",
.size = sizeof(struct rxe_mw),
.elem_offset = offsetof(struct rxe_mw, elem),
.cleanup = rxe_mw_cleanup,
.min_index = RXE_MIN_MW_INDEX,
.max_index = RXE_MAX_MW_INDEX,
.max_elem = RXE_MAX_MW_INDEX - RXE_MIN_MW_INDEX + 1,
Expand Down

0 comments on commit cde3f5d

Please sign in to comment.