From: Joel Fernandes <joel@joelfernandes.org>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: linux-kernel@vger.kernel.org, boqun.feng@gmail.com,
dave@stgolabs.net, Ingo Molnar <mingo@redhat.com>,
Josh Triplett <josh@joshtriplett.org>,
Lai Jiangshan <jiangshanlai@gmail.com>,
Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
neeraj.iitr10@gmail.com, rcu@vger.kernel.org,
Steven Rostedt <rostedt@goodmis.org>,
"Uladzislau Rezki (Sony)" <urezki@gmail.com>,
vineethrp@gmail.com
Subject: Re: [PATCH v4 -rcu 1/4] rcu/segcblist: Do not depend on rcl->len to store the segcb len during merge
Date: Tue, 25 Aug 2020 18:47:23 -0400 [thread overview]
Message-ID: <20200825224723.GB579506@google.com> (raw)
In-Reply-To: <20200825200809.GW2855@paulmck-ThinkPad-P72>
Hi Paul,
On Tue, Aug 25, 2020 at 01:08:09PM -0700, Paul E. McKenney wrote:
> On Mon, Aug 24, 2020 at 10:48:39PM -0400, Joel Fernandes (Google) wrote:
> > The donecbs's ->len field is used to store the total count of the segmented
> > callback list's length. This ->len field is then added to the destination segcb
> > list.
> >
> > However, this presents a problem for per-segment length counting which is added
> > in a future patch. This future patch sets the rcl->len field as we move
> > segments of callbacks between source and destination lists, thus becoming
> > incompatible with the donecb's ->len field.
>
> OK, I will bite. What is "rcl"? A placeholder for donecbs and pendcbs?
> If so, please just name them both. If not, please explain.
Ok will fix.
> > This commit therefore avoids depending on the ->len field in this way. IMHO,
> > this is also less error-prone and is more accurate - the donecb's ->len field
> > should be the length of the done segment and not just used as a temporarily
> > variable.
>
> Please also mention why ->len is handled specially at all, namely
> interactions between rcu_barrier() and callback invocation. This is
> the answer to "why not just make all this work like normal lists?"
> This might go well in the first paragraph.
Are you referring to the cblist structures ->len? I know the segcblist's
->len field is what rcu_barrier() samples but I am not changing that behavior
at all in this patch. This patch is only about the donecb's len (which is a
cblist structure on the stack).
> > Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
> > ---
> > kernel/rcu/rcu_segcblist.c | 8 ++++++--
> > 1 file changed, 6 insertions(+), 2 deletions(-)
> >
> > diff --git a/kernel/rcu/rcu_segcblist.c b/kernel/rcu/rcu_segcblist.c
> > index 2d2a6b6b9dfb..b70d4154433c 100644
> > --- a/kernel/rcu/rcu_segcblist.c
> > +++ b/kernel/rcu/rcu_segcblist.c
> > @@ -513,14 +513,18 @@ void rcu_segcblist_merge(struct rcu_segcblist *dst_rsclp,
> > {
> > struct rcu_cblist donecbs;
> > struct rcu_cblist pendcbs;
> > + long src_len;
> >
> > rcu_cblist_init(&donecbs);
> > rcu_cblist_init(&pendcbs);
> > - rcu_segcblist_extract_count(src_rsclp, &donecbs);
> > +
> > + src_len = rcu_segcblist_xchg_len(src_rsclp, 0);
>
> Given that both rcu_segcblist_xchg_len() and rcu_segcblist_extract_count()
> have only one callsite each, why not get rid of one of them?
Good point, I will do that.
> Or better yet, please see below, which should allow getting rid of both
> of them.
>
> > rcu_segcblist_extract_done_cbs(src_rsclp, &donecbs);
> > rcu_segcblist_extract_pend_cbs(src_rsclp, &pendcbs);
> > - rcu_segcblist_insert_count(dst_rsclp, &donecbs);
> > +
> > + rcu_segcblist_add_len(dst_rsclp, src_len);
> > rcu_segcblist_insert_done_cbs(dst_rsclp, &donecbs);
> > rcu_segcblist_insert_pend_cbs(dst_rsclp, &pendcbs);
>
> Rather than adding the blank lines, why not have the rcu_cblist structures
> carry the lengths? You are already adjusting one of the two call sites
> that care (rcu_do_batch()), and the other is srcu_invoke_callbacks().
> That should shorten this function a bit more. And make callback handling
> much more approachable, I suspect.
Sorry, I did not understand. The rcu_cblist structure already has a length
field. I do modify rcu_segcblist_extract_done_cbs() and
rcu_segcblist_extract_pend_cbs() to carry the length already, in a later
patch.
Just to emphasize, this patch is just a small refactor to avoid an issue in
later patches. It aims to keep current functionality unchanged.
thanks,
- Joel
>
> There would still be the callback-invocation need to be careful with
> ->cblist.len due to rcu_barrier() and srcu_barrier(). But both of
> those should be excluded by this code. (But don't take my word for it,
> ask KCSAN.)
>
> Thanx, Paul
>
> > +
> > rcu_segcblist_init(src_rsclp);
> > }
> > --
> > 2.28.0.297.g1956fa8f8d-goog
> >
next prev parent reply other threads:[~2020-08-25 22:47 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-25 2:48 [PATCH v4 -rcu 0/4] Maintain the length of each segment in the segcblist Joel Fernandes (Google)
2020-08-25 2:48 ` [PATCH v4 -rcu 1/4] rcu/segcblist: Do not depend on rcl->len to store the segcb len during merge Joel Fernandes (Google)
2020-08-25 20:08 ` Paul E. McKenney
2020-08-25 22:47 ` Joel Fernandes [this message]
2020-08-26 14:20 ` Paul E. McKenney
2020-08-27 22:55 ` Joel Fernandes
2020-08-28 14:18 ` Paul E. McKenney
2020-09-01 15:06 ` Joel Fernandes
2020-09-01 16:26 ` Paul E. McKenney
2020-08-25 2:48 ` [PATCH v4 -rcu 2/4] rcu/tree: Make rcu_do_batch count how many callbacks were executed Joel Fernandes (Google)
2020-08-25 20:13 ` Paul E. McKenney
2020-08-25 2:48 ` [PATCH v4 -rcu 3/4] rcu/segcblist: Add counters to segcblist datastructure Joel Fernandes (Google)
2020-08-25 21:53 ` Paul E. McKenney
2020-08-25 22:51 ` Joel Fernandes
2020-08-26 14:24 ` Paul E. McKenney
2020-08-28 0:18 ` [LTP] [rcu/segcblist] ab9a370277: WARNING:at_kernel/rcu/srcutree.c:#cleanup_srcu_struct kernel test robot
2020-08-28 0:18 ` kernel test robot
2020-08-28 0:18 ` kernel test robot
2020-08-25 2:48 ` [PATCH v4 -rcu 4/4] rcu/trace: Add tracing for how segcb list changes Joel Fernandes (Google)
2020-08-25 5:44 ` kernel test robot
2020-08-25 21:55 ` Paul E. McKenney
2020-08-25 22:53 ` Joel Fernandes
2020-08-25 19:58 ` [PATCH v4 -rcu 0/4] Maintain the length of each segment in the segcblist Paul E. McKenney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200825224723.GB579506@google.com \
--to=joel@joelfernandes.org \
--cc=boqun.feng@gmail.com \
--cc=dave@stgolabs.net \
--cc=jiangshanlai@gmail.com \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=madhuparnabhowmik10@gmail.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@redhat.com \
--cc=neeraj.iitr10@gmail.com \
--cc=paulmck@kernel.org \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=urezki@gmail.com \
--cc=vineethrp@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.