Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BC24EC61DA4 for ; Wed, 15 Mar 2023 11:52:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231819AbjCOLwS (ORCPT ); Wed, 15 Mar 2023 07:52:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54348 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231768AbjCOLv5 (ORCPT ); Wed, 15 Mar 2023 07:51:57 -0400 Received: from mail-qv1-xf31.google.com (mail-qv1-xf31.google.com [IPv6:2607:f8b0:4864:20::f31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 072B772B3E for ; Wed, 15 Mar 2023 04:50:55 -0700 (PDT) Received: by mail-qv1-xf31.google.com with SMTP id cu4so12354399qvb.3 for ; Wed, 15 Mar 2023 04:50:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; t=1678881054; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=mIhw5TKqO9mTYKFemZbRpq7iDCkZNqVFLva/m8xHOzg=; b=waNm/Unrsfng4WDuQSr20zp5Ams7+pYpWM90E+gaO4TrMWxivrOTrq/aAcN6iY8xch aQVWfoLUgoLqh+/khtH8Dps79O1dLU7XnMwVac1GtbeIlB6olJSNI6Hen1PTn9TVcW0L 5Ul2V4oA32dF3XebYgdkXK32ZX1gBrZewBE9E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678881054; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=mIhw5TKqO9mTYKFemZbRpq7iDCkZNqVFLva/m8xHOzg=; b=2ZVMjRThz5FnicPdjwKx7WKcruLWblE5fnrra0Qpv2VUKCkhZbBC/h5j437x5OtVni ng0YYrWTWQ2uTFKHgJRRfAfCeJd1MJePsiXAez9FPhEn0tuoXoOFfMqB2pw6jNU6S2sv s3jwQbxckaLaOR38WYyb7n2G85/5sRkolPdU4wCCM2NfP2Qjk88k2O6zKon9H385m5wA OIU0qk5zNsUaLWR7+6xpeypJLzm80vEIjIPs+PjvshIRtleJn2Xj7qiJXj9n7Sct/91U vKDgS1wDnZwl6Ff7pAGmGIF4RsT7l8HhVVs9qzItBD5wEdiDScF+8UbHLqRpW4OLMxmJ Ag3Q== X-Gm-Message-State: AO0yUKV9Eu6pZLhHBEC5Od914zpJHqEQh6V7ajDd8cDbLIvetq272juQ XeJQegesvR63hBc+a6gJSdu0SQ== X-Google-Smtp-Source: AK7set/HGERichkdCGc8V5hGUWnrdJVEw1/aY6DvqL/rGnqLrjxBvexv0saeYel2bNqXVs0YW3jM5w== X-Received: by 2002:a05:622a:1208:b0:3d2:90b1:d161 with SMTP id y8-20020a05622a120800b003d290b1d161mr9397483qtx.48.1678881054440; Wed, 15 Mar 2023 04:50:54 -0700 (PDT) Received: from localhost (129.239.188.35.bc.googleusercontent.com. [35.188.239.129]) by smtp.gmail.com with ESMTPSA id x7-20020ac87307000000b003b63b8df24asm3585728qto.36.2023.03.15.04.50.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Mar 2023 04:50:54 -0700 (PDT) Date: Wed, 15 Mar 2023 11:50:53 +0000 From: Joel Fernandes To: Bob Pearson Cc: Uladzislau Rezki , Zhu Yanjun , Jason Gunthorpe , Leon Romanovsky , linux-rdma@vger.kernel.org, Jason Gunthorpe , LKML , RCU , "Paul E . McKenney" , Oleksiy Avramchenko , Jens Axboe , Philipp Reisner , Bryan Tan , Steven Rostedt , Eric Dumazet , Ariel Levkovich , Theodore Ts'o , Julian Anastasov Subject: Re: [PATCH 07/13] RDMA/rxe: Rename kfree_rcu() to kfree_rcu_mightsleep() Message-ID: <20230315115053.GA3784687@google.com> References: <20230201150815.409582-1-urezki@gmail.com> <20230201150815.409582-8-urezki@gmail.com> <20230310005529.GA339498@google.com> <67fbe385-3682-be4e-15fe-f26cc56fd56b@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <67fbe385-3682-be4e-15fe-f26cc56fd56b@gmail.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Mar 13, 2023 at 02:43:43PM -0500, Bob Pearson wrote: > On 3/9/23 18:55, Joel Fernandes wrote: > > 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 > >>>> Cc: Jason Gunthorpe > >>>> Signed-off-by: Uladzislau Rezki (Sony) > >>>> --- > >>>> 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; > > } > > > I just got back from a 1 week vacation and missed all this. > > The "RDMA/rxe: Remove rxe_alloc()" patch just moved the memory allocation > for MR (verbs) objects outside of the rxe_pool code since it only applied > to MRs and not the other verbs objects (AH, QP, CQ, ...). That code has to > handle a unique situation for AH objects which can be created or destroyed > by connection manager code in atomic context while all the other ones > including MRs are always created/destroyed in process context. All objects > other than MR's are created/destroyed in the rdma-core code > (drivers/infiniband/core). > > The rxe driver keeps xarray's of pointers to the various objects which are > protected by rcu locking and so it made sense to use kfree_rcu to delete > the object with a delay. In the MR case ..._mightsleep seems harmless and > should not be an issue. > > However on reflection, all the references to the MR objects are ref counted > and they have been dropped before reaching the kfree and so there really > never was a good reason to use kfree_rcu in the first place. So a better > solution would be to replace kfree_rcu with kfree. There is a timeout in > completion_done() that triggers a WARN_ON() and this is only seen if the > driver is broken for some reason but that is equivalent to getting a seg > fault so no reason to further delay the kfree. > > Reviewed-by: Bob Pearson Thanks, I am planning to send the following patch for 6.4 consideration, please let me know if you disagree. Still testing it. ----8<--- From: Joel Fernandes (Google) Subject: [PATCH] RDMA/rxe: Rename kfree_rcu() to kvfree_rcu_mightsleep() The k[v]free_rcu() macro's single-argument form is deprecated. Therefore switch to the new k[v]free_rcu_mightsleep() variant. The goal is to avoid accidental use of the single-argument forms, which can introduce functionality bugs in atomic contexts and latency bugs in non-atomic contexts. There is no functionality change with this patch. Link: https://lore.kernel.org/rcu/20230201150815.409582-1-urezki@gmail.com Acked-by: Zhu Yanjun Reviewed-by: Bob Pearson Reviewed-by: Paul E. McKenney Fixes: 72a03627443d ("RDMA/rxe: Remove rxe_alloc()") Signed-off-by: Joel Fernandes (Google) --- drivers/infiniband/sw/rxe/rxe_mr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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; } -- 2.40.0.rc1.284.g88254d51c5-goog