On Thu, Mar 09, 2023 at 03:13:08PM +0100, Uladzislau Rezki wrote: > > On Wed, Feb 01, 2023 at 04:08:13PM +0100, Uladzislau Rezki (Sony) wrote: > > > The kfree_rcu()'s single argument name is deprecated therefore > > > rename it to kfree_rcu_mightsleep() variant. The goal is explicitly > > > underline that it is for sleepable contexts. > > > > > > Please check the RXE driver in a way that a single argument can > > > be used. Briefly looking at it and rcu_head should be embed to > > > free an obj over RCU-core. The context might be atomic. > > > > > > Cc: Bob Pearson <rpearsonhpe@xxxxxxxxx> > > > Cc: Jason Gunthorpe <jgg@xxxxxxxxxx> > > > Signed-off-by: Uladzislau Rezki (Sony) <urezki@xxxxxxxxx> > > > --- > > > drivers/infiniband/sw/rxe/rxe_pool.c | 2 +- > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > Could you please add you reviwed-by or Acked-by tags so we can bring > > our series with renaming for the next merge window? > > > > Thanks! > > > __rxe_cleanup() can be called in two contexts, sleepable and not. > Therefore usage of a single argument of the kvfree_rcu() is not correct > here. > > Could you please fix and check your driver? If my above statement > is not correct, please provide Acked-by or Reviwed-by tags to the > path that is in question. > > Otherwise please add an rcu_head in your data to free objects over > kvfree_rcu() using double argument API. > > Could you please support? Also this one needs renaming? It came in because of the commit in 6.3-rc1: 72a03627443d ("RDMA/rxe: Remove rxe_alloc()") It could be squashed into this patch itself since it is infiniband related. Paul noticed that this breaks dropping the old API on -next, so it is blocking the renaming. ---8<----------------------- diff --git a/drivers/infiniband/sw/rxe/rxe_mr.c b/drivers/infiniband/sw/rxe/rxe_mr.c index b10aa1580a64..ae3a100e18fb 100644 --- a/drivers/infiniband/sw/rxe/rxe_mr.c +++ b/drivers/infiniband/sw/rxe/rxe_mr.c @@ -731,7 +731,7 @@ int rxe_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata) return -EINVAL; rxe_cleanup(mr); - kfree_rcu(mr); + kfree_rcu_mightsleep(mr); return 0; }