From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org,
laijs@cn.fujitsu.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
josh@joshtriplett.org, tglx@linutronix.de, rostedt@goodmis.org,
dhowells@redhat.com, edumazet@google.com, dvhart@linux.intel.com,
fweisbec@gmail.com, oleg@redhat.com, bobby.prani@gmail.com
Subject: Re: [PATCH RFC tip/core/rcu 05/14] rcu: Abstract sequence counting from synchronize_sched_expedited()
Date: Thu, 2 Jul 2015 07:13:30 -0700 [thread overview]
Message-ID: <20150702141330.GI3717@linux.vnet.ibm.com> (raw)
In-Reply-To: <20150702085041.GI25159@twins.programming.kicks-ass.net>
On Thu, Jul 02, 2015 at 10:50:41AM +0200, Peter Zijlstra wrote:
> On Wed, Jul 01, 2015 at 03:18:04PM -0700, Paul E. McKenney wrote:
> > On Wed, Jul 01, 2015 at 12:27:17PM +0200, Peter Zijlstra wrote:
>
> > > That wants to be an ACQUIRE, right?
> >
> > I cannot put the acquire in the WARN_ON_ONCE() because there
> > are configurations where WARN_ON_ONCE() is compiled out. I could
> > conditionally compile, but given that this is nothing like a fastpath,
> > I cannot really justify doing that.
>
> Fair enough.
>
> > We could define an smp_store_acquire(), but that would require a full
> > barrier against subsequent loads. The C++ committee hit this one when
> > trying to implement seqeunce locking using the C/C++11 atomics. ;-)
>
> Yeah, I'm not sure how much sense smp_store_acquire() makes, but I'm
> fairly sure this isn't the first time I've wondered about it.
>
> > > > +static bool rcu_seq_done(unsigned long *sp, unsigned long s)
> > > > +{
> > > > + return ULONG_CMP_GE(READ_ONCE(*sp), s);
> > >
> > > I'm always amused you're not wanting to rely on 2s complement for
> > > integer overflow. I _know_ its undefined behaviour in the C rule book,
> > > but the entire rest of the kernel hard assumes it.
> >
> > I take it you have never seen the demonic glow in the eyes of a compiler
> > implementer when thinking of all the code that can be broken^W^W^W^W^W
> > optimizations that are enabled by relying on undefined behavior for
> > signed integer overflow? ;-)
>
> Note that this is unsigned integers, but yes I know, you've said. But
> they cannot unilaterally change this 'undefined' behaviour because its
> been defined as 'whatever the hardware does' for such a long time.
For pure unsigned arithmetic, their options are indeed limited. For a
cast to signed, I am not so sure. I have been using time_before() and
friends for jiffy comparisons, which does a cast to signed after the
subtraction. Signed overflow is already unsafe with current compilers,
though the kernel suppresses these.
> Likewise they can dream all they want about breaking our concurrent code
> and state we should use the brand spanking new primitives, sod 30 years
> of existing code, but that's just not realistic either.
>
> Even if we didn't 'have' to support a wide range of compiler versions,
> most of which do not even support these new fangled primitives, who is
> going to audit our existing many million lines of code? Not to mention
> the many more million lines of code in other projects that rely on these
> same things.
>
> Its really time for them to stop wanking and stare reality in the face.
Indeed, I have been and will be continuing to make myself unpopular with
that topic. ;-)
> > > > +/* Wrapper functions for expedited grace periods. */
> > > > +static void rcu_exp_gp_seq_start(struct rcu_state *rsp)
> > > > +{
> > > > + rcu_seq_start(&rsp->expedited_sequence);
> > > > +}
> > > > +static void rcu_exp_gp_seq_end(struct rcu_state *rsp)
> > > > +{
> > > > + rcu_seq_end(&rsp->expedited_sequence);
> > > > +}
> > > > +static unsigned long rcu_exp_gp_seq_snap(struct rcu_state *rsp)
> > > > +{
> > > > + return rcu_seq_snap(&rsp->expedited_sequence);
> > > > +}
> > > > +static bool rcu_exp_gp_seq_done(struct rcu_state *rsp, unsigned long s)
> > > > +{
> > > > + return rcu_seq_done(&rsp->expedited_sequence, s);
> > > > +}
> > >
> > > This is wrappers for wrappers sake? Why?
> >
> > For _rcu_barrier(), as noted in the commit log.
>
> Yes it said; but why? Surely _rcu_barrier() can do the
> ->expedited_sequence thing itself, that hardly seems worthy of a
> wrapper.
Ah, you want synchronize_rcu_expedited() and synchronize_sched_expedited()
to use rcu_seq_start() and friends directly. I can certainly do that.
Thanx, Paul
next prev parent reply other threads:[~2015-07-02 14:14 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-30 22:25 [PATCH RFC tip/core/rcu 0/14] Rework expedited grace periods Paul E. McKenney
2015-06-30 22:25 ` [PATCH RFC tip/core/rcu 01/14] rcu: Switch synchronize_sched_expedited() to stop_one_cpu() Paul E. McKenney
2015-06-30 22:25 ` [PATCH RFC tip/core/rcu 02/14] rcu: Rework synchronize_rcu_expedited() counter handling Paul E. McKenney
2015-06-30 22:25 ` [PATCH RFC tip/core/rcu 03/14] rcu: Get rid of synchronize_sched_expedited()'s polling loop Paul E. McKenney
2015-06-30 22:25 ` [PATCH RFC tip/core/rcu 04/14] rcu: Make expedited GP CPU stoppage asynchronous Paul E. McKenney
2015-06-30 22:25 ` [PATCH RFC tip/core/rcu 05/14] rcu: Abstract sequence counting from synchronize_sched_expedited() Paul E. McKenney
2015-07-01 10:27 ` Peter Zijlstra
2015-07-01 22:18 ` Paul E. McKenney
2015-07-02 8:50 ` Peter Zijlstra
2015-07-02 14:13 ` Paul E. McKenney [this message]
2015-07-02 16:50 ` Peter Zijlstra
2015-07-09 8:42 ` Dan Carpenter
2015-07-09 14:21 ` Paul E. McKenney
2015-06-30 22:25 ` [PATCH RFC tip/core/rcu 06/14] rcu: Make synchronize_rcu_expedited() use sequence-counter scheme Paul E. McKenney
2015-06-30 22:25 ` [PATCH RFC tip/core/rcu 07/14] rcu: Abstract funnel locking from synchronize_sched_expedited() Paul E. McKenney
2015-06-30 22:25 ` [PATCH RFC tip/core/rcu 08/14] rcu: Fix synchronize_sched_expedited() type error for "s" Paul E. McKenney
2015-06-30 22:25 ` [PATCH RFC tip/core/rcu 09/14] rcu: Use funnel locking for synchronize_rcu_expedited()'s polling loop Paul E. McKenney
2015-06-30 22:25 ` [PATCH RFC tip/core/rcu 10/14] rcu: Apply rcu_seq operations to _rcu_barrier() Paul E. McKenney
2015-06-30 22:25 ` [PATCH RFC tip/core/rcu 11/14] rcu: Consolidate last open-coded expedited memory barrier Paul E. McKenney
2015-06-30 22:25 ` [PATCH RFC tip/core/rcu 12/14] rcu: Extend expedited funnel locking to rcu_data structure Paul E. McKenney
2015-06-30 22:25 ` [PATCH RFC tip/core/rcu 13/14] rcu: Add stall warnings to synchronize_sched_expedited() Paul E. McKenney
2015-06-30 22:25 ` [PATCH RFC tip/core/rcu 14/14] documentation: Describe new expedited stall warnings 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=20150702141330.GI3717@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.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=josh@joshtriplett.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=oleg@redhat.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.