On Thu, Jul 22, 2021 at 04:22:44PM -0500, Bob Pearson wrote: > Add code to rxe_get_av in rxe_av.c to use the AH index in UD send WQEs > to lookup the kernel AH. For old user providers continue to use the AV > passed in WQEs. Move setting pkt->rxe to before the call to rxe_get_av() > to get access to the AH pool. > > Signed-off-by: Bob Pearson <rpearsonhpe@xxxxxxxxx> > drivers/infiniband/sw/rxe/rxe_av.c | 20 +++++++++++++++++++- > drivers/infiniband/sw/rxe/rxe_req.c | 8 +++++--- > 2 files changed, 24 insertions(+), 4 deletions(-) > > diff --git a/drivers/infiniband/sw/rxe/rxe_av.c b/drivers/infiniband/sw/rxe/rxe_av.c > index 85580ea5eed0..38c7b6fb39d7 100644 > +++ b/drivers/infiniband/sw/rxe/rxe_av.c > @@ -101,11 +101,29 @@ void rxe_av_fill_ip_info(struct rxe_av *av, struct rdma_ah_attr *attr) > > struct rxe_av *rxe_get_av(struct rxe_pkt_info *pkt) > { > + struct rxe_ah *ah; > + u32 ah_num; > + > if (!pkt || !pkt->qp) > return NULL; > > if (qp_type(pkt->qp) == IB_QPT_RC || qp_type(pkt->qp) == IB_QPT_UC) > return &pkt->qp->pri_av; > > - return (pkt->wqe) ? &pkt->wqe->wr.wr.ud.av : NULL; > + if (!pkt->wqe) > + return NULL; > + > + ah_num = pkt->wqe->wr.wr.ud.ah_num; > + if (ah_num) { > + /* only new user provider or kernel client */ > + ah = rxe_pool_get_index(&pkt->rxe->ah_pool, ah_num); rxe_pool_get_index() incr's a kref, but I don't see any put of that kref in this code? Jason