Received: by 2002:a05:6358:bb9e:b0:b9:5105:a5b4 with SMTP id df30csp5443387rwb; Wed, 7 Sep 2022 03:00:14 -0700 (PDT) X-Google-Smtp-Source: AA6agR5Q1nc6XSQM6NNiU4z5xcZgz+jqnCGWfgiq0lMsQb3vgZvLAEp/dLcaLGE1Fhs0T5CUBZKT X-Received: by 2002:a65:6e8f:0:b0:42a:c7d3:f2ed with SMTP id bm15-20020a656e8f000000b0042ac7d3f2edmr2696034pgb.209.1662544814232; Wed, 07 Sep 2022 03:00:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662544814; cv=none; d=google.com; s=arc-20160816; b=nT3lTDTPtcowvTKJnH1pe8MJjEY7gKIpVU7xbWwZ2SappB50FMDcMxoCnN/2y4FLfG KI/nz6yYU0w9ex0dAxAUNLtnLiIm15N3OYIH+wkZS45IHDjMkh0yP1kHa3M5jqpbUekP N41l+5XtGzf0JDbfc9ZrpEQytsRq7Pncognhv+UxxyNr2+6LB3DOV790UWT9IthizNuL kwJmMkdnLZ5EasaHqy0G1WRMM3hZmuXxnrrSfeih7cOYEWxsrk/AZAAQRDqeYrAAFSzS bDZzNB5hh5FryuNSLicfFNXImCd/m91z7LbBh5J/XxToxznKESnCfiJ14FK5TyEGQ6gm bDUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=NrJMlgugBJXP/dNVSyzt/Y/wWbeHiNLxHxUznN9DPCk=; b=rmlvcFJRMo2g5nWP2Rlft9CWxoeW6nO29Tf6oUew+T1kpk+8qkQOGyqhI0Cx+j28DS VVqkOx6BXHlrHmqHwS7mZm3Diuwqp+60irdwLkjNEnAxxb6WcCBHlxX60CrbZAs+EQLp 5t7cCz+Kjc6aWQSAnP/+RpxKwqhtQlNUFyGJGMZpRvuIvuBCHS9vPpwF03M95GNOxdhG hlWw3BR/uHaNm7wINTKwSyiBinKa4Ekq0uNvQPRAbcs7+JuIEiqnq8cdhRbEqiPF6S9q DFgeCoBx4VAkzCfs33vumtyXgHCwpnMbRpEMi8mgs+ggarkzqIBq/pkgQJWhxyUmpHyy p8MA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=EEKEXeLi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q11-20020a170902bd8b00b001726a59e2desi15640273pls.133.2022.09.07.03.00.01; Wed, 07 Sep 2022 03:00:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=EEKEXeLi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229768AbiIGJkY (ORCPT + 99 others); Wed, 7 Sep 2022 05:40:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50870 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229926AbiIGJkU (ORCPT ); Wed, 7 Sep 2022 05:40:20 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5483A84EDD; Wed, 7 Sep 2022 02:40:18 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id DA4096183D; Wed, 7 Sep 2022 09:40:17 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id EDDB9C433D6; Wed, 7 Sep 2022 09:40:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1662543617; bh=Hr5+aZcVWl6y16hq00Ch1HiG5Xj0qqyjZBPbI6n2aJI=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=EEKEXeLi2DMICa6qMVttCThbm7230aMFc3x/0NvPQ9f4JLVjt3u0NrDBKr7wkeeJB GQ9H1VCa09WxK7P39c93t8EmE4/FHmE4QSnxoXgMssmJ97/nYZWFfh3zAAZj7SBazF noAtbrHz+NxC0/RbIZuZSePwfYppPuE5bRK8287lZwphYk/ZE+msBg5Ar+nNxnYQkf yXl3VCubvkZnxAM0fEmkSDWrgKpMP5m/ueGFkkmcEJjz1L/JBYZavkNdJkO9UP0/pR ddV1gnNBEgRxwUnAb6AcTF6TCryzFIqEGQt/ymhauhdwlwvldb5K8+YWXoQf3lFWZ5 4ZcjZPS20O3wA== Date: Wed, 7 Sep 2022 11:40:14 +0200 From: Frederic Weisbecker To: Joel Fernandes Cc: rcu@vger.kernel.org, linux-kernel@vger.kernel.org, rushikesh.s.kadam@intel.com, urezki@gmail.com, neeraj.iitr10@gmail.com, paulmck@kernel.org, rostedt@goodmis.org, vineeth@bitbyteword.org, boqun.feng@gmail.com Subject: Re: [PATCH v5 06/18] rcu: Introduce call_rcu_lazy() API implementation Message-ID: <20220907094014.GA193994@lothringen> References: <20220901221720.1105021-1-joel@joelfernandes.org> <20220901221720.1105021-7-joel@joelfernandes.org> <20220902152132.GA115525@lothringen> <20220906151757.GA183806@lothringen> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Sep 07, 2022 at 12:06:26AM +0000, Joel Fernandes wrote: > > > @@ -326,13 +372,20 @@ static bool rcu_nocb_do_flush_bypass(struct rcu_data *rdp, struct rcu_head *rhp, > > > * Note that this function always returns true if rhp is NULL. > > > */ > > > static bool rcu_nocb_flush_bypass(struct rcu_data *rdp, struct rcu_head *rhp, > > > - unsigned long j) > > > + unsigned long j, unsigned long flush_flags) > > > { > > > + bool ret; > > > + > > > if (!rcu_rdp_is_offloaded(rdp)) > > > return true; > > > rcu_lockdep_assert_cblist_protected(rdp); > > > rcu_nocb_bypass_lock(rdp); > > > - return rcu_nocb_do_flush_bypass(rdp, rhp, j); > > > + ret = rcu_nocb_do_flush_bypass(rdp, rhp, j, flush_flags); > > > + > > > + if (flush_flags & FLUSH_BP_WAKE) > > > + wake_nocb_gp(rdp, true); > > > > Why the true above? > > > > Also should we check if the wake up is really necessary (otherwise it means we > > force a wake up for all rdp's from rcu_barrier())? > > > > was_alldone = rcu_segcblist_pend_cbs(&rdp->cblist); > > ret = rcu_nocb_do_flush_bypass(rdp, rhp, j, flush_flags); > > if (was_alldone && rcu_segcblist_pend_cbs(&rdp->cblist)) > > wake_nocb_gp(rdp, false); > > You mean something like the following right? Though I'm thinking if its > better to call wake_nocb_gp() from tree.c in entrain() and let that handle > the wake. That way, we can get rid of the extra FLUSH_BP flags as well and > let the flush callers deal with the wakeups.. Ah yes that could make sense if only one caller cares. > > Anyway, for testing this should be good... > > ---8<----------------------- > > diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h > index bd8f39ee2cd0..e3344c262672 100644 > --- a/kernel/rcu/tree_nocb.h > +++ b/kernel/rcu/tree_nocb.h > @@ -382,15 +382,19 @@ static bool rcu_nocb_flush_bypass(struct rcu_data *rdp, struct rcu_head *rhp, > unsigned long j, unsigned long flush_flags) > { > bool ret; > + bool was_alldone; > > if (!rcu_rdp_is_offloaded(rdp)) > return true; > rcu_lockdep_assert_cblist_protected(rdp); > rcu_nocb_bypass_lock(rdp); > + if (flush_flags & FLUSH_BP_WAKE) > + was_alldone = !rcu_segcblist_pend_cbs(&rdp->cblist); > + You can check that outside bypass lock (but you still need nocb_lock). > ret = rcu_nocb_do_flush_bypass(rdp, rhp, j, flush_flags); > > - if (flush_flags & FLUSH_BP_WAKE) > - wake_nocb_gp(rdp, true); > + if (flush_flags & FLUSH_BP_WAKE && was_alldone) > + wake_nocb_gp(rdp, false); That doesn't check if the bypass list was empty. Thanks.