From patchwork Wed Aug 31 18:14:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Paul E. McKenney" X-Patchwork-Id: 12961261 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 885F6ECAAD1 for ; Wed, 31 Aug 2022 18:19:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232667AbiHaSTS (ORCPT ); Wed, 31 Aug 2022 14:19:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232958AbiHaSSx (ORCPT ); Wed, 31 Aug 2022 14:18:53 -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 C789398C8D; Wed, 31 Aug 2022 11:15:26 -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 11A97B82275; Wed, 31 Aug 2022 18:14:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B8537C433D6; Wed, 31 Aug 2022 18:14:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1661969677; bh=cBcYSQi8ifVtJhthmgoriB/jVUKxKquenaTa9fU58ng=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=utpCE3dqLooqWsoJE0FtXdY71lLKblks6OSe0OfUgCH7zg3s5IMnh9unnOrtphCO6 gOM7RYwPccDhFPyAoc950ImBzITnkteqZVhD9H/waKvogDWKegK/hWptcp4w8yGRBV wbNJb2OgmhdgUL0KyqXSf8a7K6BGGua0myDm6B0iz2NkRh1Dg56JFx5X1EVFtNnWYx iDrmxGL8GTyTxdaWi5dbDdaToujlq3JKIGVZpTRupe0M8qnNGiUN+G/3dnv5X1XrhL 0kZvgDPHKo9w4cMZQ5y2eKf/jAmL6l7XncMOaT8yV7U8WPirTLpxxSOCOrmTXpak25 nLhOzSDg/4ovg== Received: by paulmck-ThinkPad-P17-Gen-1.home (Postfix, from userid 1000) id 741A45C015D; Wed, 31 Aug 2022 11:14:37 -0700 (PDT) From: "Paul E. McKenney" To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, kernel-team@fb.com, rostedt@goodmis.org, "Paul E. McKenney" Subject: [PATCH rcu 1/4] rcutorture: Make "srcud" option also test polled grace-period API Date: Wed, 31 Aug 2022 11:14:32 -0700 Message-Id: <20220831181435.2695936-1-paulmck@kernel.org> X-Mailer: git-send-email 2.31.1.189.g2e36527f23 In-Reply-To: <20220831181349.GA2695341@paulmck-ThinkPad-P17-Gen-1> References: <20220831181349.GA2695341@paulmck-ThinkPad-P17-Gen-1> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: rcu@vger.kernel.org This commit brings the "srcud" (dynamically allocated) SRCU test in line with the "srcu" (statically allocated) test, so that both test the full SRCU polled grace-period API. Signed-off-by: Paul E. McKenney --- kernel/rcu/rcutorture.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index d8e1b270a065f..7168dc8d61e98 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -709,6 +709,9 @@ static struct rcu_torture_ops srcud_ops = { .deferred_free = srcu_torture_deferred_free, .sync = srcu_torture_synchronize, .exp_sync = srcu_torture_synchronize_expedited, + .get_gp_state = srcu_torture_get_gp_state, + .start_gp_poll = srcu_torture_start_gp_poll, + .poll_gp_state = srcu_torture_poll_gp_state, .call = srcu_torture_call, .cb_barrier = srcu_torture_barrier, .stats = srcu_torture_stats, From patchwork Wed Aug 31 18:14:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Paul E. McKenney" X-Patchwork-Id: 12961262 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 5E195ECAAD3 for ; Wed, 31 Aug 2022 18:20:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232593AbiHaSUM (ORCPT ); Wed, 31 Aug 2022 14:20:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32790 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232480AbiHaSTw (ORCPT ); Wed, 31 Aug 2022 14:19:52 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BE0D3F47D6; Wed, 31 Aug 2022 11:16:11 -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 B153E61C81; Wed, 31 Aug 2022 18:14:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C4159C433C1; Wed, 31 Aug 2022 18:14:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1661969677; bh=ECPhDnSbN1XcKN9Q0Qw11HM6nYqQWLTqOmnBbwnm2wQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SlqlE+gN3jlWxLyOau1CN8cJrP5tJvc+9SmxgKJ0WAItUKC2Yhpgcx3MhXhGehY5s fWYnUzo4PdVwvDExM2J9lT5T2T0+XxiQ1ZjNiwv++pwiNY/qJMkObovwv0fTD6d/qa tu2gwIWw2oUZC/X4EZiAMej13JYgoyTnw1HADQniqM5KLC8XbsHdL7CoDSziSxiKmC F1EV41PUW/aR+YyNPvI/14ETpspWNFi0gemr7Lw59TLNKu6QpxD9kHe16Vxz2GHrPl PsOblV5EDXXbsiCRz5cOoUJ3+Dzg8yCUtuBi5qF/DFpc7YkPSlzPxM6IO2OSwYs2vs aku6TfXCgN5oQ== Received: by paulmck-ThinkPad-P17-Gen-1.home (Postfix, from userid 1000) id 769AC5C019C; Wed, 31 Aug 2022 11:14:37 -0700 (PDT) From: "Paul E. McKenney" To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, kernel-team@fb.com, rostedt@goodmis.org, "Paul E. McKenney" Subject: [PATCH rcu 2/4] srcu: Add GP and maximum requested GP to Tiny SRCU rcutorture output Date: Wed, 31 Aug 2022 11:14:33 -0700 Message-Id: <20220831181435.2695936-2-paulmck@kernel.org> X-Mailer: git-send-email 2.31.1.189.g2e36527f23 In-Reply-To: <20220831181349.GA2695341@paulmck-ThinkPad-P17-Gen-1> References: <20220831181349.GA2695341@paulmck-ThinkPad-P17-Gen-1> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: rcu@vger.kernel.org This commit adds the ->srcu_idx and ->srcu_max_idx fields to the Tiny SRCU rcutorture output for additional diagnostics. Signed-off-by: Paul E. McKenney --- include/linux/srcutiny.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/linux/srcutiny.h b/include/linux/srcutiny.h index 6cfaa0a9a9b96..4fcec6f5af908 100644 --- a/include/linux/srcutiny.h +++ b/include/linux/srcutiny.h @@ -82,10 +82,12 @@ static inline void srcu_torture_stats_print(struct srcu_struct *ssp, int idx; idx = ((data_race(READ_ONCE(ssp->srcu_idx)) + 1) & 0x2) >> 1; - pr_alert("%s%s Tiny SRCU per-CPU(idx=%d): (%hd,%hd)\n", + pr_alert("%s%s Tiny SRCU per-CPU(idx=%d): (%hd,%hd) gp: %hu->%hu\n", tt, tf, idx, data_race(READ_ONCE(ssp->srcu_lock_nesting[!idx])), - data_race(READ_ONCE(ssp->srcu_lock_nesting[idx]))); + data_race(READ_ONCE(ssp->srcu_lock_nesting[idx])), + data_race(READ_ONCE(ssp->srcu_idx)), + data_race(READ_ONCE(ssp->srcu_idx_max))); } #endif From patchwork Wed Aug 31 18:14:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Paul E. McKenney" X-Patchwork-Id: 12961267 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 2BE86ECAAD3 for ; Wed, 31 Aug 2022 18:24:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231924AbiHaSYK (ORCPT ); Wed, 31 Aug 2022 14:24:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54238 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232958AbiHaSXq (ORCPT ); Wed, 31 Aug 2022 14:23:46 -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 65D55101E6; Wed, 31 Aug 2022 11:19:57 -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 2BF85B82271; Wed, 31 Aug 2022 18:14:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BEF33C433D7; Wed, 31 Aug 2022 18:14:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1661969677; bh=X9PKdPFevUFDYLsifWGkcchXcPpnWnttSHK/jbXc4Yg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Af4g9TloRVFDTdFQkjLT/cgHc2KSQ5+Q5CesGxRZo5xSnVkKLO40MCX+zumCiDD5o OTOj2HS4nBcFpLL8V+WSkLKYrxTEFma7nBvV4iicQMxZhfkkpLCsQZoKSkisjmcoxN bJ/AKjo64fm4IFOr66DYQjy8eaddpvLDqF5JtZngTiCQkuwl9a40R5CMq3KGR3m6Xa JMgezTYCaMggIX+BgRtFbqi1o4jCjndoZfPB7ICzKLw3YdALO3apiJqYyCEfHAU8CG 1LCJa4Tn1jcvxis7BLgUWjmmnUqtlvPHUm1ZKXY8yJvBVPjXJUQmjDz+tdKa9/ajJJ koOnkbiEZYitg== Received: by paulmck-ThinkPad-P17-Gen-1.home (Postfix, from userid 1000) id 7887D5C02A9; Wed, 31 Aug 2022 11:14:37 -0700 (PDT) From: "Paul E. McKenney" To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, kernel-team@fb.com, rostedt@goodmis.org, "Paul E. McKenney" Subject: [PATCH rcu 3/4] srcu: Make Tiny SRCU poll_state_synchronize_srcu() more precise Date: Wed, 31 Aug 2022 11:14:34 -0700 Message-Id: <20220831181435.2695936-3-paulmck@kernel.org> X-Mailer: git-send-email 2.31.1.189.g2e36527f23 In-Reply-To: <20220831181349.GA2695341@paulmck-ThinkPad-P17-Gen-1> References: <20220831181349.GA2695341@paulmck-ThinkPad-P17-Gen-1> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: rcu@vger.kernel.org This commit applies the more-precise grace-period-state check used by rcu_seq_done_exact() to poll_state_synchronize_srcu(). This is important because Tiny SRCU uses a 16-bit counter, which can wrap quite quickly. If counter wrap continues to be a problem, then expanding ->srcu_idx and ->srcu_idx_max to 32 bits might be warranted. Signed-off-by: Paul E. McKenney --- kernel/rcu/srcutiny.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/rcu/srcutiny.c b/kernel/rcu/srcutiny.c index 92c002d654828..a2af24f214676 100644 --- a/kernel/rcu/srcutiny.c +++ b/kernel/rcu/srcutiny.c @@ -240,10 +240,10 @@ EXPORT_SYMBOL_GPL(start_poll_synchronize_srcu); */ bool poll_state_synchronize_srcu(struct srcu_struct *ssp, unsigned long cookie) { - bool ret = USHORT_CMP_GE(READ_ONCE(ssp->srcu_idx), cookie); + unsigned short cur_s = READ_ONCE(ssp->srcu_idx); barrier(); - return ret; + return USHORT_CMP_GE(cur_s, cookie) || USHORT_CMP_LT(cur_s, cookie - 3); } EXPORT_SYMBOL_GPL(poll_state_synchronize_srcu); From patchwork Wed Aug 31 18:14:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Paul E. McKenney" X-Patchwork-Id: 12961268 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 CF1C3ECAAD1 for ; Wed, 31 Aug 2022 18:24:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232233AbiHaSYL (ORCPT ); Wed, 31 Aug 2022 14:24:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47252 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233011AbiHaSXz (ORCPT ); Wed, 31 Aug 2022 14:23:55 -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 6565EFD10; Wed, 31 Aug 2022 11:19:57 -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 328FFB82278; Wed, 31 Aug 2022 18:14:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C75AFC43470; Wed, 31 Aug 2022 18:14:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1661969677; bh=+SH5kjmaANmozmFWfCMjL/kkQVhc+n9ENVTV79RkIn0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RauIdH5VDxQB5a+js2cQ3dxl17gmiMmajkECJE6zSvXUgXi31KNdbgdputSc1MGze +3LHQtRIGb4dsxkyHIK+Z9V7J+TBM2aEMr9a6ZAkcP2cm2I3c54k0REYUEl3bERslX lQJigrerx0aeq4GsSGWEiZhjQkQITRxH6vd6c5ZSp1DIOBjLLOW/GgPgooqJCBHfBW pIL2MPbeOthOya8+efpFNDc3jDwe66a0p74QJsU8uzFgGHeXvD81gbRkW1ColoWCkO PXqK9BtChJM6VeAHPfRgyIX1MAV6HFzJOrLwpY/7etFB+pnf3cBr3mkCcAnB4YSZlm lfr7KIdfx5q0g== Received: by paulmck-ThinkPad-P17-Gen-1.home (Postfix, from userid 1000) id 7AB125C0513; Wed, 31 Aug 2022 11:14:37 -0700 (PDT) From: "Paul E. McKenney" To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, kernel-team@fb.com, rostedt@goodmis.org, "Paul E. McKenney" Subject: [PATCH rcu 4/4] srcu: Make Tiny SRCU use full-sized grace-period counters Date: Wed, 31 Aug 2022 11:14:35 -0700 Message-Id: <20220831181435.2695936-4-paulmck@kernel.org> X-Mailer: git-send-email 2.31.1.189.g2e36527f23 In-Reply-To: <20220831181349.GA2695341@paulmck-ThinkPad-P17-Gen-1> References: <20220831181349.GA2695341@paulmck-ThinkPad-P17-Gen-1> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: rcu@vger.kernel.org This commit makes Tiny SRCU use full-sized grace-period counters to further avoid counter-wrap issues when using polled grace-period APIs. Signed-off-by: Paul E. McKenney --- include/linux/srcutiny.h | 6 +++--- kernel/rcu/srcutiny.c | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/include/linux/srcutiny.h b/include/linux/srcutiny.h index 4fcec6f5af908..5aa5e0faf6a12 100644 --- a/include/linux/srcutiny.h +++ b/include/linux/srcutiny.h @@ -15,10 +15,10 @@ struct srcu_struct { short srcu_lock_nesting[2]; /* srcu_read_lock() nesting depth. */ - unsigned short srcu_idx; /* Current reader array element in bit 0x2. */ - unsigned short srcu_idx_max; /* Furthest future srcu_idx request. */ u8 srcu_gp_running; /* GP workqueue running? */ u8 srcu_gp_waiting; /* GP waiting for readers? */ + unsigned long srcu_idx; /* Current reader array element in bit 0x2. */ + unsigned long srcu_idx_max; /* Furthest future srcu_idx request. */ struct swait_queue_head srcu_wq; /* Last srcu_read_unlock() wakes GP. */ struct rcu_head *srcu_cb_head; /* Pending callbacks: Head. */ @@ -82,7 +82,7 @@ static inline void srcu_torture_stats_print(struct srcu_struct *ssp, int idx; idx = ((data_race(READ_ONCE(ssp->srcu_idx)) + 1) & 0x2) >> 1; - pr_alert("%s%s Tiny SRCU per-CPU(idx=%d): (%hd,%hd) gp: %hu->%hu\n", + pr_alert("%s%s Tiny SRCU per-CPU(idx=%d): (%hd,%hd) gp: %lu->%lu\n", tt, tf, idx, data_race(READ_ONCE(ssp->srcu_lock_nesting[!idx])), data_race(READ_ONCE(ssp->srcu_lock_nesting[idx])), diff --git a/kernel/rcu/srcutiny.c b/kernel/rcu/srcutiny.c index a2af24f214676..33adafdad2613 100644 --- a/kernel/rcu/srcutiny.c +++ b/kernel/rcu/srcutiny.c @@ -117,7 +117,7 @@ void srcu_drive_gp(struct work_struct *wp) struct srcu_struct *ssp; ssp = container_of(wp, struct srcu_struct, srcu_work); - if (ssp->srcu_gp_running || USHORT_CMP_GE(ssp->srcu_idx, READ_ONCE(ssp->srcu_idx_max))) + if (ssp->srcu_gp_running || ULONG_CMP_GE(ssp->srcu_idx, READ_ONCE(ssp->srcu_idx_max))) return; /* Already running or nothing to do. */ /* Remove recently arrived callbacks and wait for readers. */ @@ -150,17 +150,17 @@ void srcu_drive_gp(struct work_struct *wp) * straighten that out. */ WRITE_ONCE(ssp->srcu_gp_running, false); - if (USHORT_CMP_LT(ssp->srcu_idx, READ_ONCE(ssp->srcu_idx_max))) + if (ULONG_CMP_LT(ssp->srcu_idx, READ_ONCE(ssp->srcu_idx_max))) schedule_work(&ssp->srcu_work); } EXPORT_SYMBOL_GPL(srcu_drive_gp); static void srcu_gp_start_if_needed(struct srcu_struct *ssp) { - unsigned short cookie; + unsigned long cookie; cookie = get_state_synchronize_srcu(ssp); - if (USHORT_CMP_GE(READ_ONCE(ssp->srcu_idx_max), cookie)) + if (ULONG_CMP_GE(READ_ONCE(ssp->srcu_idx_max), cookie)) return; WRITE_ONCE(ssp->srcu_idx_max, cookie); if (!READ_ONCE(ssp->srcu_gp_running)) { @@ -215,7 +215,7 @@ unsigned long get_state_synchronize_srcu(struct srcu_struct *ssp) barrier(); ret = (READ_ONCE(ssp->srcu_idx) + 3) & ~0x1; barrier(); - return ret & USHRT_MAX; + return ret; } EXPORT_SYMBOL_GPL(get_state_synchronize_srcu); @@ -240,10 +240,10 @@ EXPORT_SYMBOL_GPL(start_poll_synchronize_srcu); */ bool poll_state_synchronize_srcu(struct srcu_struct *ssp, unsigned long cookie) { - unsigned short cur_s = READ_ONCE(ssp->srcu_idx); + unsigned long cur_s = READ_ONCE(ssp->srcu_idx); barrier(); - return USHORT_CMP_GE(cur_s, cookie) || USHORT_CMP_LT(cur_s, cookie - 3); + return ULONG_CMP_GE(cur_s, cookie) || ULONG_CMP_LT(cur_s, cookie - 3); } EXPORT_SYMBOL_GPL(poll_state_synchronize_srcu);