Received: by 2002:a05:6358:1087:b0:cb:c9d3:cd90 with SMTP id j7csp3317120rwi; Sun, 16 Oct 2022 08:47:46 -0700 (PDT) X-Google-Smtp-Source: AMsMyM447pbpD1supS/F0PyKoGcb8xHXGJuFi/3Uji5rgXdjRWKfHYn9oDy0FM5Z3BEh8t4FYh0t X-Received: by 2002:a05:6402:1944:b0:457:fed7:5c30 with SMTP id f4-20020a056402194400b00457fed75c30mr6460559edz.278.1665935266361; Sun, 16 Oct 2022 08:47:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1665935266; cv=none; d=google.com; s=arc-20160816; b=wH3g8r/n2LYL5kKYSVsSB7Sce293ckTNVxOQ2238yGTSuVx2wLVP64qXpPDvu/q3MS 7/7vvjIghRxf7T+WP1gJS6RhaZl1DChPGRcnCBGpVXGrwpz3aYKN9CeYz/UN4GCy1pLd tro/KU7U3BxuGlaLrI2DmylbhP2gtpoT/PLKHnBJic0ctViX5uBRQgC9Q3nIgqQrwlgp CEYAbeny+BbqEZyLS0rMdWtLRu5KD+c6OCV1rgYbOO0f8fCqnxcLUoBJPw28vN6HkmLr um/2SpiOrD+9K8WhQrTHdqfDajyZHge9lJe8F+6L8LmDMv0QRgi0c9/XmQbJexxWeVTA y5Dw== 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:reply-to:message-id:subject:cc:to:from:date :dkim-signature; bh=CCZa/UVTtyfwLhsNPsv35w5C9ohXlPETtFKkc0JlwaU=; b=efRsuXBN+r0XFMc6qbUOF7iSr32IK8rqrRTsyP2CIvuFbzsi1yQDCouJQlrmUd6/Ae AL5EIhxR+u/8oEmPg4yWBlI+6K9YYHJ8+i4neLgn/qBehkpfsmAvv93oXwWWMHS0v1Sw N+vQ4vn0UcwzjHcNYkg76uP/YUKq/g3hg/x0SWj5/ItxW7HuXDM887yF+2GgnYL6jfxv oRwX5jjLaFlZ/Q4Vgs/XmJpKJKH/6SnMCutuLM9PHy7qPzCrIxIY8tALvtrRFp0DwIrY wHdttv0iNJaFHk89R/X5K4WxoX92MObId27Sr1pJK2kCcXF5l5tEKcc2ehXExeyuSt4A +v6Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="nvR/j/RK"; 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 sa22-20020a1709076d1600b0078b96068bc0si7804656ejc.79.2022.10.16.08.47.12; Sun, 16 Oct 2022 08:47:46 -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="nvR/j/RK"; 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 S229770AbiJPPRB (ORCPT + 99 others); Sun, 16 Oct 2022 11:17:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41138 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229711AbiJPPQ7 (ORCPT ); Sun, 16 Oct 2022 11:16:59 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9AF7431DE8; Sun, 16 Oct 2022 08:16:58 -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 ams.source.kernel.org (Postfix) with ESMTPS id 64DC4B80CBF; Sun, 16 Oct 2022 15:16:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 21330C433D6; Sun, 16 Oct 2022 15:16:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1665933416; bh=p2AC17y9FzsnRIAnSQtdt8ru86VoJ0PGE02CSXYdDR4=; h=Date:From:To:Cc:Subject:Reply-To:References:In-Reply-To:From; b=nvR/j/RKINBhqT8Mu27cQ+8ZMN9UpU9vuUjWXoZUkZOCUjs5rNP1PGu8pvuDu7bBZ SVVgFs3G4lU31PKReeMeseGppAL4DAAzMUICm4fxb1YlOEOdd5nH64dBi9WZozexgQ wj9UMpADlMrwRa0Wso3+5RJ/0OTFvUdJEWrJDRM7AKrIncYLG5EZLxWhtMg1eI6FQo Z2iouU7HjR5g+ZmNEFnLfK61JD614uyiIHEiICtrO0UJCl0GD2Wgc+xHY3fVpHvMpM 5K7reRm5fXEw72WQ5kmgsGzJryg1ewxXvsJRXpqwzhRX0gXU8eOitZbdNTGCwQYbNi 0HmGvMFK3rhtA== Received: by paulmck-ThinkPad-P17-Gen-1.home (Postfix, from userid 1000) id AA1C95C0624; Sun, 16 Oct 2022 08:16:55 -0700 (PDT) Date: Sun, 16 Oct 2022 08:16:55 -0700 From: "Paul E. McKenney" To: Frederic Weisbecker Cc: Joel Fernandes , rcu@vger.kernel.org, linux-kernel@vger.kernel.org, rushikesh.s.kadam@intel.com, urezki@gmail.com, neeraj.iitr10@gmail.com, rostedt@goodmis.org, youssefesmat@google.com, surenb@google.com Subject: Re: [PATCH v8 01/13] rcu: Fix missing nocb gp wake on rcu_barrier() Message-ID: <20221016151655.GA5600@paulmck-ThinkPad-P17-Gen-1> Reply-To: paulmck@kernel.org References: <20221011180142.2742289-1-joel@joelfernandes.org> <20221011180142.2742289-2-joel@joelfernandes.org> <20221014142127.GE4221@paulmck-ThinkPad-P17-Gen-1> <20221014144019.GB1108603@lothringen> <20221014150344.GG4221@paulmck-ThinkPad-P17-Gen-1> <20221014154606.GJ4221@paulmck-ThinkPad-P17-Gen-1> <20221014204750.GA1119620@lothringen> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20221014204750.GA1119620@lothringen> X-Spam-Status: No, score=-7.4 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 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 Fri, Oct 14, 2022 at 10:47:50PM +0200, Frederic Weisbecker wrote: > On Fri, Oct 14, 2022 at 08:46:06AM -0700, Paul E. McKenney wrote: > > On Fri, Oct 14, 2022 at 11:19:28AM -0400, Joel Fernandes wrote: > > > I agree with the discussion, though if all CBs are in the bypass list, > > > the patch will also save 2 jiffies. > > > > > > So just commit messages that need rework then? This one can be taken instead: > > > https://lore.kernel.org/rcu/21ECDA9F-81B1-4D22-8B03-020FB5DADA4F@joelfernandes.org/T/#m14d21fbce23539a521693a4184b28ddc55d7d2c5 > > > > This one looks plausible to me. > > With the following modified diff (passed 25 hours of TREE01): Very good! Could one of you (presumably Joel) please send v9? Just to avoid me getting the wrong patch in the wrong place or similar. Or mangling the required rebase following a pull (otherwise, as soon as I create branches, Stephen Rothwell notes the lack of a committer signoff.) Thanx, Paul > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c > index 96d678c9cfb6..7f1f6f792240 100644 > --- a/kernel/rcu/tree.c > +++ b/kernel/rcu/tree.c > @@ -3914,6 +3914,8 @@ static void rcu_barrier_entrain(struct rcu_data *rdp) > { > unsigned long gseq = READ_ONCE(rcu_state.barrier_sequence); > unsigned long lseq = READ_ONCE(rdp->barrier_seq_snap); > + bool wake_nocb = false; > + bool was_alldone = false; > > lockdep_assert_held(&rcu_state.barrier_lock); > if (rcu_seq_state(lseq) || !rcu_seq_state(gseq) || rcu_seq_ctr(lseq) != rcu_seq_ctr(gseq)) > @@ -3922,7 +3924,14 @@ static void rcu_barrier_entrain(struct rcu_data *rdp) > rdp->barrier_head.func = rcu_barrier_callback; > debug_rcu_head_queue(&rdp->barrier_head); > rcu_nocb_lock(rdp); > + /* > + * Flush bypass and wakeup rcuog if we add callbacks to an empty regular > + * queue. This way we don't wait for bypass timer that can reach seconds > + * if it's fully lazy. > + */ > + was_alldone = rcu_rdp_is_offloaded(rdp) && !rcu_segcblist_pend_cbs(&rdp->cblist); > WARN_ON_ONCE(!rcu_nocb_flush_bypass(rdp, NULL, jiffies)); > + wake_nocb = was_alldone && rcu_segcblist_pend_cbs(&rdp->cblist); > if (rcu_segcblist_entrain(&rdp->cblist, &rdp->barrier_head)) { > atomic_inc(&rcu_state.barrier_cpu_count); > } else { > @@ -3930,6 +3939,8 @@ static void rcu_barrier_entrain(struct rcu_data *rdp) > rcu_barrier_trace(TPS("IRQNQ"), -1, rcu_state.barrier_sequence); > } > rcu_nocb_unlock(rdp); > + if (wake_nocb) > + wake_nocb_gp(rdp, false); > smp_store_release(&rdp->barrier_seq_snap, gseq); > } > > diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h > index d4a97e40ea9c..925dd98f8b23 100644 > --- a/kernel/rcu/tree.h > +++ b/kernel/rcu/tree.h > @@ -439,6 +439,7 @@ static void zero_cpu_stall_ticks(struct rcu_data *rdp); > static struct swait_queue_head *rcu_nocb_gp_get(struct rcu_node *rnp); > static void rcu_nocb_gp_cleanup(struct swait_queue_head *sq); > static void rcu_init_one_nocb(struct rcu_node *rnp); > +static bool wake_nocb_gp(struct rcu_data *rdp, bool force); > static bool rcu_nocb_flush_bypass(struct rcu_data *rdp, struct rcu_head *rhp, > unsigned long j); > static bool rcu_nocb_try_bypass(struct rcu_data *rdp, struct rcu_head *rhp, > diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h > index f77a6d7e1356..094fd454b6c3 100644 > --- a/kernel/rcu/tree_nocb.h > +++ b/kernel/rcu/tree_nocb.h > @@ -1558,6 +1558,11 @@ static void rcu_init_one_nocb(struct rcu_node *rnp) > { > } > > +static bool wake_nocb_gp(struct rcu_data *rdp, bool force) > +{ > + return false; > +} > + > static bool rcu_nocb_flush_bypass(struct rcu_data *rdp, struct rcu_head *rhp, > unsigned long j) > {