On 7/31/23 13:15, Jason Gunthorpe wrote: > On Fri, Jul 21, 2023 at 03:50:21PM -0500, Bob Pearson wrote: >> This patch gives a more detailed list of objects that are not >> freed in case of error before the module exits. >> >> Signed-off-by: Bob Pearson <rpearsonhpe@xxxxxxxxx> >> --- >> drivers/infiniband/sw/rxe/rxe_pool.c | 12 +++++++++++- >> 1 file changed, 11 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/infiniband/sw/rxe/rxe_pool.c b/drivers/infiniband/sw/rxe/rxe_pool.c >> index cb812bd969c6..3249c2741491 100644 >> --- a/drivers/infiniband/sw/rxe/rxe_pool.c >> +++ b/drivers/infiniband/sw/rxe/rxe_pool.c >> @@ -113,7 +113,17 @@ void rxe_pool_init(struct rxe_dev *rxe, struct rxe_pool *pool, >> >> void rxe_pool_cleanup(struct rxe_pool *pool) >> { >> - WARN_ON(!xa_empty(&pool->xa)); >> + unsigned long index; >> + struct rxe_pool_elem *elem; >> + >> + xa_lock(&pool->xa); >> + xa_for_each(&pool->xa, index, elem) { >> + rxe_err_dev(pool->rxe, "%s#%d: Leaked", pool->name, >> + elem->index); >> + } >> + xa_unlock(&pool->xa); >> + >> + xa_destroy(&pool->xa); >> } > > Is this why? Just count the number of unfinalized objects and report > if there is difference, don't mess up the xarray. > > Jason This is why I made the last change but I really didn't like that there was no way to lookup the qp from its index since we were using a NULL xarray entry to indicate the state of the qp. Making it explicit, i.e. a variable in the struct seems much more straight forward. Not sure why you hated the last change. Bob