From: Peter Zijlstra <peterz@infradead.org>
To: Manfred Spraul <manfred@colorfullife.com>
Cc: Will Deacon <will.deacon@arm.com>,
benh@kernel.crashing.org, paulmck@linux.vnet.ibm.com,
Ingo Molnar <mingo@elte.hu>, Boqun Feng <boqun.feng@gmail.com>,
Andrew Morton <akpm@linux-foundation.org>,
LKML <linux-kernel@vger.kernel.org>,
1vier1@web.de, Davidlohr Bueso <dave@stgolabs.net>,
Pablo Neira Ayuso <pablo@netfilter.org>,
netfilter-devel@vger.kernel.org
Subject: Re: [PATCH 8/7] net/netfilter/nf_conntrack_core: Remove another memory barrier
Date: Fri, 2 Sep 2016 21:22:13 +0200 [thread overview]
Message-ID: <20160902192213.GM10153@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <1971bcf8-0f42-c0b7-5e59-2ceaa6e024a7@colorfullife.com>
On Fri, Sep 02, 2016 at 08:35:55AM +0200, Manfred Spraul wrote:
> On 09/01/2016 06:41 PM, Peter Zijlstra wrote:
> >On Thu, Sep 01, 2016 at 04:30:39PM +0100, Will Deacon wrote:
> >>On Thu, Sep 01, 2016 at 05:27:52PM +0200, Manfred Spraul wrote:
> >>>Since spin_unlock_wait() is defined as equivalent to spin_lock();
> >>>spin_unlock(), the memory barrier before spin_unlock_wait() is
> >>>also not required.
> >Note that ACQUIRE+RELEASE isn't a barrier.
> >
> >Both are semi-permeable and things can cross in the middle, like:
> >
> >
> > x = 1;
> > LOCK
> > UNLOCK
> > r = y;
> >
> >can (validly) get re-ordered like:
> >
> > LOCK
> > r = y;
> > x = 1;
> > UNLOCK
> >
> >So if you want things ordered, as I think you do, I think the smp_mb()
> >is still needed.
> CPU1:
> x=1; /* without WRITE_ONCE */
> LOCK(l);
> UNLOCK(l);
> <do_semop>
> smp_store_release(x,0)
>
>
> CPU2;
> LOCK(l)
> if (smp_load_acquire(x)==1) goto slow_path
> <do_semop>
> UNLOCK(l)
>
> Ordering is enforced because both CPUs access the same lock.
>
> x=1 can't be reordered past the UNLOCK(l), I don't see that further
> guarantees are necessary.
>
> Correct?
Correct, sadly implementations do not comply :/ In fact, even x86 is
broken here.
I spoke to Will earlier today and he suggests either making
spin_unlock_wait() stronger to avoids any and all such surprises or just
getting rid of the thing.
I'm not sure which way we should go, but please hold off on these two
patches until I've had a chance to audit all of those implementations
again.
I'll try and have a look at your other patches before that.
next prev parent reply other threads:[~2016-09-02 19:22 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-01 15:27 [PATCH 8/7] net/netfilter/nf_conntrack_core: Remove another memory barrier Manfred Spraul
2016-09-01 15:27 ` [PATCH 9/7] ipc/sem.c: " Manfred Spraul
2016-09-01 15:30 ` [PATCH 8/7] net/netfilter/nf_conntrack_core: " Will Deacon
2016-09-01 16:41 ` Peter Zijlstra
2016-09-02 6:17 ` Boqun Feng
2016-09-02 6:35 ` Manfred Spraul
2016-09-02 19:22 ` Peter Zijlstra [this message]
2016-09-03 5:33 ` Manfred Spraul
2016-09-05 18:57 ` Manfred Spraul
2016-09-06 17:56 ` Will Deacon
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=20160902192213.GM10153@twins.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=1vier1@web.de \
--cc=akpm@linux-foundation.org \
--cc=benh@kernel.crashing.org \
--cc=boqun.feng@gmail.com \
--cc=dave@stgolabs.net \
--cc=linux-kernel@vger.kernel.org \
--cc=manfred@colorfullife.com \
--cc=mingo@elte.hu \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=will.deacon@arm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox