From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Ming Lei <tom.leiming@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>,
Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org, Shaohua Li <shli@kernel.org>,
Al Viro <viro@zeniv.linux.org.uk>
Subject: Re: [PATCH] atomic: improve atomic_inc_unless_negative/atomic_dec_unless_positive
Date: Tue, 12 Mar 2013 07:38:53 -0700 [thread overview]
Message-ID: <20130312143853.GD3725@linux.vnet.ibm.com> (raw)
In-Reply-To: <CACVXFVMuhFoPat7FAznr4ji5vXeeVBNCWya=JdYGLYqBv5SFUQ@mail.gmail.com>
On Tue, Mar 12, 2013 at 12:03:23PM +0800, Ming Lei wrote:
> On Tue, Mar 12, 2013 at 11:39 AM, Paul E. McKenney
> <paulmck@linux.vnet.ibm.com> wrote:
> >
> > Atomic operations that return a value are required to act as full memory
> > barriers. This means that code relying on ordering provided by these
> > atomic operations must also do ordering, either by using an explicit
> > memory barrier or by relying on guarantees from atomic operations.
> >
> > For example:
> >
> > CPU 0 CPU 1
> >
> > X = 1; r1 = Z;
> > if (atomic_inc_unless_negative(&Y) smp_mb();
> > do_something();
> > Z = 1; r2 = X;
> >
> > Assuming X and Z are initially zero, if r1==1, we are guaranteed
> > that r2==1. However, CPU 1 needs its smp_mb() in order to pair with
> > the barrier implicit in atomic_inc_unless_negative().
> >
> > Make sense?
>
> Yes, it does, and thanks for the explanation.
>
> But looks the above example is not what Frederic described:
>
> "the above atomic_read() might return -1 because there is no
> guarantee it's seeing the recent update on the remote CPU."
>
> Even I am not sure if adding one smp_mb() around atomic_read()
> can guarantee that too.
Frederic was likely thinking of some other scenario that would be
broken by atomic_inc_unless_negative() failing to act as a full
memory barrier. Here is another example:
CPU 0 CPU 1
X = 1;
if (atomic_inc_unless_negative(&Y) r1 = atomic_xchg(&Y, -1);
r2 = X;
If atomic_inc_unless_negative() acts as a full memory barrier, then
if CPU 0 reaches the assignment from X, the results will be guaranteed
to be 1. Otherwise, there is no guarantee.
Thanx, Paul
next prev parent reply other threads:[~2013-03-12 14:48 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-09 15:38 [PATCH] atomic: improve atomic_inc_unless_negative/atomic_dec_unless_positive Ming Lei
2013-03-11 23:45 ` Andrew Morton
2013-03-11 23:59 ` Frederic Weisbecker
2013-03-12 2:15 ` Ming Lei
2013-03-12 3:39 ` Paul E. McKenney
2013-03-12 4:03 ` Ming Lei
2013-03-12 14:38 ` Paul E. McKenney [this message]
2013-03-12 15:02 ` Frederic Weisbecker
2013-03-12 17:55 ` Paul E. McKenney
2013-03-13 9:33 ` anish singh
2013-03-13 12:40 ` Paul E. McKenney
2013-03-12 0:21 ` 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=20130312143853.GD3725@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=shli@kernel.org \
--cc=tom.leiming@gmail.com \
--cc=viro@zeniv.linux.org.uk \
/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.