From: Will Deacon <will.deacon@arm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Boqun Feng <boqun.feng@gmail.com>,
gregkh@linuxfoundation.org, keescook@chromium.org,
elena.reshetova@intel.com, arnd@arndb.de, tglx@linutronix.de,
mingo@kernel.org, hpa@zytor.com, dave@progbits.org,
linux-kernel@vger.kernel.org
Subject: Re: [RFC][PATCH 7/7] kref: Implement using refcount_t
Date: Thu, 17 Nov 2016 12:08:36 +0000 [thread overview]
Message-ID: <20161117120836.GE22855@arm.com> (raw)
In-Reply-To: <20161117092800.GD3142@twins.programming.kicks-ass.net>
On Thu, Nov 17, 2016 at 10:28:00AM +0100, Peter Zijlstra wrote:
> On Tue, Nov 15, 2016 at 10:19:09PM +0800, Boqun Feng wrote:
> > But as I said, we actually only need the pairing of orderings:
> >
> > 1) load part of cmpxchg -> free()
> > 2) object accesses -> store part of cmpxchg
> >
> > Ordering #1 can be achieved via control dependency as you pointed out
> > that free()s very much includes stores. And ordering #2 can be achieved
> > with RELEASE.
> >
> > So the code is right, I just thought the comment may be misleading. The
> > reason we use cmpxchg_release() is just for achieving ordering #2, and
> > not to order "prior loads and stores" with "a subsequent free".
> >
> > Am I missing some subtle orderings here?
>
> I would want to further quality 1), it must be no earlier than the load
> of the last / successful ll/sc round.
>
> At that point we're guaranteed a reference count of 1 that _will_ drop
> to 0, and thus nobody else (should) reference that memory anymore.
>
> If we agree on this, I'll update the comment :-) Will, do you too agree?
All sounds reasonable to me. It's worth pointing out that you can't create
order using a control dependency hanging off the status flag of a
store-conditional, but the code in question here has the dependency from
the loaded value, which is sufficient.
Will
next prev parent reply other threads:[~2016-11-17 16:58 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-14 17:39 [RFC][PATCH 0/7] kref improvements Peter Zijlstra
2016-11-14 17:39 ` [RFC][PATCH 1/7] kref: Add KREF_INIT() Peter Zijlstra
2016-11-14 17:39 ` [RFC][PATCH 2/7] kref: Add kref_read() Peter Zijlstra
2016-11-14 18:16 ` Christoph Hellwig
2016-11-15 7:28 ` Greg KH
2016-11-15 7:47 ` Peter Zijlstra
2016-11-15 8:37 ` [PATCH] printk, locking/atomics, kref: Introduce new %pAr and %pAk format string options for atomic_t and 'struct kref' Ingo Molnar
2016-11-15 8:43 ` [PATCH v2] " Ingo Molnar
2016-11-15 9:21 ` Peter Zijlstra
2016-11-15 9:41 ` [PATCH v3] printk, locking/atomics, kref: Introduce new %pAa " Ingo Molnar
2016-11-15 10:10 ` [PATCH v2] printk, locking/atomics, kref: Introduce new %pAr " kbuild test robot
2016-11-15 16:42 ` [PATCH] " Linus Torvalds
2016-11-16 8:13 ` Ingo Molnar
2016-11-15 7:33 ` [RFC][PATCH 2/7] kref: Add kref_read() Greg KH
2016-11-15 8:03 ` Peter Zijlstra
2016-11-15 20:53 ` Kees Cook
2016-11-16 8:21 ` Greg KH
2016-11-16 10:10 ` Peter Zijlstra
2016-11-16 10:18 ` Greg KH
2016-11-16 10:11 ` Daniel Borkmann
2016-11-16 10:19 ` Greg KH
2016-11-16 10:09 ` Peter Zijlstra
2016-11-16 18:58 ` Kees Cook
2016-11-17 8:34 ` Peter Zijlstra
2016-11-17 12:30 ` David Windsor
2016-11-17 12:43 ` Peter Zijlstra
2016-11-17 13:01 ` Reshetova, Elena
2016-11-17 13:22 ` Peter Zijlstra
2016-11-17 15:42 ` Reshetova, Elena
2016-11-17 18:02 ` Reshetova, Elena
2016-11-17 19:10 ` Peter Zijlstra
2016-11-17 19:29 ` Peter Zijlstra
2016-11-17 19:34 ` Kees Cook
2016-11-14 17:39 ` [RFC][PATCH 3/7] kref: Kill kref_sub() Peter Zijlstra
2016-11-14 17:39 ` [RFC][PATCH 4/7] kref: Use kref_get_unless_zero() more Peter Zijlstra
2016-11-14 17:39 ` [RFC][PATCH 5/7] kref: Implement kref_put_lock() Peter Zijlstra
2016-11-14 20:35 ` Kees Cook
2016-11-15 7:50 ` Peter Zijlstra
2016-11-14 17:39 ` [RFC][PATCH 6/7] kref: Avoid more abuse Peter Zijlstra
2016-11-14 17:39 ` [RFC][PATCH 7/7] kref: Implement using refcount_t Peter Zijlstra
2016-11-15 8:40 ` Ingo Molnar
2016-11-15 9:47 ` Peter Zijlstra
2016-11-15 10:03 ` Ingo Molnar
2016-11-15 10:46 ` Peter Zijlstra
2016-11-15 13:03 ` Ingo Molnar
2016-11-15 18:06 ` Kees Cook
2016-11-15 19:16 ` Peter Zijlstra
2016-11-15 19:23 ` Kees Cook
2016-11-16 8:31 ` Ingo Molnar
2016-11-16 8:51 ` Greg KH
2016-11-16 9:07 ` Ingo Molnar
2016-11-16 9:24 ` Greg KH
2016-11-16 10:15 ` Peter Zijlstra
2016-11-16 18:55 ` Kees Cook
2016-11-17 8:33 ` Peter Zijlstra
2016-11-17 19:50 ` Kees Cook
2016-11-16 18:41 ` Kees Cook
2016-11-15 12:33 ` Boqun Feng
2016-11-15 13:01 ` Peter Zijlstra
2016-11-15 14:19 ` Boqun Feng
2016-11-17 9:28 ` Peter Zijlstra
2016-11-17 9:48 ` Boqun Feng
2016-11-17 10:29 ` Peter Zijlstra
2016-11-17 10:39 ` Peter Zijlstra
2016-11-17 11:03 ` Greg KH
2016-11-17 12:48 ` Peter Zijlstra
[not found] ` <CAL0jBu-GnREUPSX4kUDp-Cc8ZGp6+Cb2q0HVandswcLzPRnChQ@mail.gmail.com>
2016-11-17 12:08 ` Peter Zijlstra
2016-11-17 12:08 ` Will Deacon [this message]
2016-11-17 16:11 ` Peter Zijlstra
2016-11-17 16:36 ` Will Deacon
2016-11-18 8:26 ` Boqun Feng
2016-11-18 10:16 ` Will Deacon
2016-11-18 10:07 ` Reshetova, Elena
2016-11-18 11:37 ` Peter Zijlstra
2016-11-18 17:06 ` Will Deacon
2016-11-18 18:57 ` Peter Zijlstra
2016-11-21 4:06 ` Boqun Feng
2016-11-21 7:48 ` Ingo Molnar
2016-11-21 8:38 ` Boqun Feng
2016-11-21 8:44 ` Boqun Feng
2016-11-21 9:02 ` Peter Zijlstra
2016-11-21 9:37 ` Boqun Feng
2016-11-18 10:47 ` Reshetova, Elena
2016-11-18 10:52 ` Peter Zijlstra
2016-11-18 16:58 ` Reshetova, Elena
2016-11-18 18:53 ` Peter Zijlstra
2016-11-19 7:14 ` Reshetova, Elena
2016-11-19 11:45 ` Peter Zijlstra
2017-01-26 23:14 ` Kees Cook
2017-01-27 9:58 ` Peter Zijlstra
2017-01-27 21:07 ` Kees Cook
2017-01-30 13:40 ` Peter Zijlstra
2016-11-15 7:27 ` [RFC][PATCH 0/7] kref improvements Greg KH
2016-11-15 7:42 ` Ingo Molnar
2016-11-15 15:05 ` Greg KH
2016-11-15 7:48 ` Peter Zijlstra
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=20161117120836.GE22855@arm.com \
--to=will.deacon@arm.com \
--cc=arnd@arndb.de \
--cc=boqun.feng@gmail.com \
--cc=dave@progbits.org \
--cc=elena.reshetova@intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=hpa@zytor.com \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).