From: Lance Roy <ldr709@gmail.com>
To: Lai Jiangshan <jiangshanlai@gmail.com>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
LKML <linux-kernel@vger.kernel.org>,
"Ingo Molnar" <mingo@kernel.org>,
dipankar@in.ibm.com, akpm@linux-foundation.org,
"Mathieu Desnoyers" <mathieu.desnoyers@efficios.com>,
"Josh Triplett" <josh@joshtriplett.org>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Peter Zijlstra" <peterz@infradead.org>,
"Steven Rostedt" <rostedt@goodmis.org>,
"David Howells" <dhowells@redhat.com>,
"Eric Dumazet" <edumazet@google.com>,
dvhart@linux.intel.com,
"Frédéric Weisbecker" <fweisbec@gmail.com>,
oleg@redhat.com, "pranith kumar" <bobby.prani@gmail.com>
Subject: Re: [PATCH RFC tip/core/rcu] SRCU rewrite
Date: Thu, 17 Nov 2016 11:53:04 -0800 [thread overview]
Message-ID: <20161117115304.0ff3f84e@gmail.com> (raw)
In-Reply-To: <CAJhGHyA=y1NSoHhZaQumfM_odN4Lcs4tJ3FyQfdLY9p7cZu2nQ@mail.gmail.com>
On Thu, 17 Nov 2016 21:58:34 +0800
Lai Jiangshan <jiangshanlai@gmail.com> wrote:
> from the changelog, it sounds like that "ULONG_MAX - NR_CPUS" is the limit
> of the implements(old or this one). but actually the real max number of
> active readers is much smaller, I think ULONG_MAX/4 can be used here instead
> and that part of the changelog can be removed.
In the old version, there are two separate limits. There first is that there
are no more than ULONG_MAX nested or parallel readers, as otherwise ->c[] would
overflow.
The other limit is to prevent ->seq[] from overflowing during
srcu_readers_active_idx_check(). For this to happen, there must be ULONG_MAX+1
readers that loaded ->completed before srcu_flip() was run which then increment
->seq[]. The ->seq[] array is supposed to prevent
srcu_readers_active_idx_check() from completing successfully if any such
readers increment ->seq[], because otherwise they could decrement ->c[] while
it is being read, which could cause it to incorrectly report that there are no
active readers. If ->seq[] overflows then there is nothing (except how
improbable it is) to prevent this from happening.
I used to think (because of the previous comment) that there could be at most
one such increment of ->seq[] per CPU, as they would have to be using to old
value of ->completed and preemption would be disabled. This is not the case
because there are no barriers around srcu_flip(), so the processor is not
required to increment ->completed before reading ->seq[] the first time, nor is
it required to wait until it is done reading ->seq[] the second time before
incrementing. This means that the following code could cause ->seq[] to
increment an arbitrarily large number of times between the two ->seq[] loads in
srcu_readers_active_idx_check().
while (true) {
int idx = srcu_read_lock(sp);
srcu_read_unlock(sp, idx);
}
Thanks,
Lance
next prev parent reply other threads:[~2016-11-17 19:52 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-14 18:36 [PATCH RFC tip/core/rcu] SRCU rewrite Paul E. McKenney
2016-11-14 19:00 ` Mathieu Desnoyers
2016-11-15 1:44 ` Boqun Feng
2016-11-15 14:37 ` Paul E. McKenney
2016-11-17 12:18 ` Lai Jiangshan
2016-11-17 13:49 ` Paul E. McKenney
2016-11-17 14:38 ` Paul E. McKenney
2016-11-17 14:45 ` Boqun Feng
2016-11-17 15:54 ` Paul E. McKenney
2016-11-17 15:55 ` Lai Jiangshan
2016-11-17 17:42 ` Paul E. McKenney
2016-11-17 14:31 ` Boqun Feng
2016-11-17 15:03 ` Paul E. McKenney
2016-11-17 15:07 ` Lai Jiangshan
2016-11-17 15:31 ` Mathieu Desnoyers
2016-11-17 15:38 ` Mathieu Desnoyers
2016-11-17 15:53 ` Paul E. McKenney
2016-11-17 16:33 ` Mathieu Desnoyers
2016-11-17 20:31 ` Lance Roy
2016-11-15 7:51 ` Peter Zijlstra
2016-11-15 13:54 ` Mathieu Desnoyers
2016-11-15 13:59 ` Peter Zijlstra
2016-11-15 14:26 ` Paul E. McKenney
2016-11-15 14:55 ` Peter Zijlstra
2016-11-15 15:43 ` Paul E. McKenney
2016-11-17 13:58 ` Lai Jiangshan
2016-11-17 19:53 ` Lance Roy [this message]
2016-11-18 13:27 ` 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=20161117115304.0ff3f84e@gmail.com \
--to=ldr709@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=bobby.prani@gmail.com \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=dvhart@linux.intel.com \
--cc=edumazet@google.com \
--cc=fweisbec@gmail.com \
--cc=jiangshanlai@gmail.com \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/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.