From: Stefan Richter <stefanr@s5r6.in-berlin.de>
To: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: paulmck@linux.vnet.ibm.com,
Herbert Xu <herbert@gondor.apana.org.au>,
Paul Mackerras <paulus@samba.org>,
Satyam Sharma <satyam@infradead.org>,
Christoph Lameter <clameter@sgi.com>,
Chris Snook <csnook@redhat.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
linux-arch@vger.kernel.org,
Linus Torvalds <torvalds@linux-foundation.org>,
netdev@vger.kernel.org, Andrew Morton <akpm@linux-foundation.org>,
ak@suse.de, heiko.carstens@de.ibm.com, davem@davemloft.net,
schwidefsky@de.ibm.com, wensong@linux-vs.org, horms@verge.net.au,
wjiang@resilience.com, cfriesen@nortel.com, zlynx@acm.org,
rpjday@mindspring.com, jesper.juhl@gmail.com,
segher@kernel.crashing.org
Subject: Re: [PATCH 0/24] make atomic_read() behave consistently across all architectures
Date: Fri, 17 Aug 2007 12:48:39 +0200 [thread overview]
Message-ID: <46C57D07.80604@s5r6.in-berlin.de> (raw)
In-Reply-To: <46C556F1.8000407@yahoo.com.au>
Nick Piggin wrote:
> Stefan Richter wrote:
>> For architecture port authors, there is Documentation/atomic_ops.txt.
>> Driver authors also can learn something from that document, as it
>> indirectly documents the atomic_t and bitops APIs.
>
> "Semantics and Behavior of Atomic and Bitmask Operations" is
> pretty direct :)
"Indirect", "pretty direct"... It's subjective.
(It is not an API documentation; it is an implementation specification.)
> Sure, it says that it's for arch maintainers, but there is no
> reason why users can't make use of it.
>
>
>> Prompted by this thread, I reread this document, and indeed, the
>> sentence "Unlike the above routines, it is required that explicit memory
>> barriers are performed before and after [atomic_{inc,dec}_return]"
>> indicates that atomic_read (one of the "above routines") is very
>> different from all other atomic_t accessors that return values.
>>
>> This is strange. Why is it that atomic_read stands out that way? IMO
>
> It is not just atomic_read of course. It is atomic_add,sub,inc,dec,set.
Yes, but unlike these, atomic_read returns a value.
Without me (the API user) providing extra barriers, that value may
become something else whenever someone touches code in the vicinity of
the atomic_read.
>> this API imbalance is quite unexpected by many people. Wouldn't it be
>> beneficial to change the atomic_read API to behave the same like all
>> other atomic_t accessors that return values?
>
> It is very consistent and well defined. Operations which both modify
> the data _and_ return something are defined to have full barriers
> before and after.
You are right, atomic_read is not only different from accessors that
don't retunr values, it is also different from all other accessors that
return values (because they all also modify the value). There is just
no actual API documentation, which contributes to the issue that some
people (or at least one: me) learn a little bit late how special
atomic_read is.
> What do you want to add to the other atomic accessors? Full memory
> barriers? Only compiler barriers? It's quite likely that if you think
> some barriers will fix bugs, then there are other bugs lurking there
> anyway.
A lot of different though related issues are discussed in this thread,
but I personally am only occupied by one particular thing: What kind of
return values do I get from atomic_read.
> Just use spinlocks if you're not absolutely clear about potential
> races and memory ordering issues -- they're pretty cheap and simple.
Probably good advice, like generally if driver guys consider lockless
algorithms.
>> OK, it is also different from the other accessors that return data in so
>> far as it doesn't modify the data. But as driver "author", i.e. user of
>> the API, I can't see much use of an atomic_read that can be reordered
>> and, more importantly, can be optimized away by the compiler.
>
> It will return to you an atomic snapshot of the data (loaded from
> memory at some point since the last compiler barrier). All you have
> to be aware of compiler barriers and the Linux SMP memory ordering
> model, which should be a given if you are writing lockless code.
OK, that's what I slowly realized during this discussion, and I
appreciate the explanations that were given here.
>> Sure, now
>> that I learned of these properties I can start to audit code and insert
>> barriers where I believe they are needed, but this simply means that
>> almost all occurrences of atomic_read will get barriers (unless there
>> already are implicit but more or less obvious barriers like msleep).
>
> You might find that these places that appear to need barriers are
> buggy for other reasons anyway. Can you point to some in-tree code
> we can have a look at?
I could, or could not, if I were through with auditing the code. I
remembered one case and posted it (nodemgr_host_thread) which was safe
because msleep_interruptible provided the necessary barrier there, and
this implicit barrier is not in danger to be removed by future patches.
--
Stefan Richter
-=====-=-=== =--- =---=
http://arcgraph.de/sr/
next prev parent reply other threads:[~2007-08-17 10:48 UTC|newest]
Thread overview: 308+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-09 13:14 [PATCH 0/24] make atomic_read() behave consistently across all architectures Chris Snook
2007-08-09 12:41 ` Arnd Bergmann
2007-08-09 14:29 ` Chris Snook
2007-08-09 15:30 ` Arnd Bergmann
2007-08-14 22:31 ` Christoph Lameter
2007-08-14 22:45 ` Chris Snook
2007-08-14 22:51 ` Christoph Lameter
2007-08-14 23:08 ` Satyam Sharma
2007-08-14 23:04 ` Chris Snook
2007-08-14 23:14 ` Christoph Lameter
2007-08-15 6:49 ` Herbert Xu
2007-08-15 8:18 ` Heiko Carstens
2007-08-15 13:53 ` Stefan Richter
2007-08-15 14:35 ` Satyam Sharma
2007-08-15 14:52 ` Herbert Xu
2007-08-15 16:09 ` Stefan Richter
2007-08-15 16:27 ` Paul E. McKenney
2007-08-15 17:13 ` Satyam Sharma
2007-08-15 18:31 ` Segher Boessenkool
2007-08-15 18:57 ` Paul E. McKenney
2007-08-15 19:54 ` Satyam Sharma
2007-08-15 20:17 ` Paul E. McKenney
2007-08-15 20:52 ` Segher Boessenkool
2007-08-15 22:42 ` Paul E. McKenney
2007-08-15 20:47 ` Segher Boessenkool
2007-08-16 0:36 ` (unknown) Satyam Sharma
2007-08-16 0:32 ` your mail Herbert Xu
2007-08-16 0:58 ` [PATCH 0/24] make atomic_read() behave consistently across all architectures Satyam Sharma
2007-08-16 0:51 ` Herbert Xu
2007-08-16 1:18 ` Satyam Sharma
2007-08-16 1:38 ` Segher Boessenkool
2007-08-15 21:05 ` [PATCH 0/24] make atomic_read() behave consistently across all architectures Segher Boessenkool
2007-08-15 22:44 ` Paul E. McKenney
2007-08-16 1:23 ` Segher Boessenkool
2007-08-16 2:22 ` Paul E. McKenney
2007-08-16 0:39 ` [PATCH] i386: Fix a couple busy loops in mach_wakecpu.h:wait_for_init_deassert() Satyam Sharma
2007-08-24 11:59 ` Denys Vlasenko
2007-08-24 12:07 ` Andi Kleen
2007-08-24 12:12 ` Kenn Humborg
2007-08-24 14:25 ` Denys Vlasenko
2007-08-24 17:34 ` Linus Torvalds
2007-08-24 13:30 ` Satyam Sharma
2007-08-24 17:06 ` Christoph Lameter
2007-08-24 20:26 ` Denys Vlasenko
2007-08-24 20:34 ` Chris Snook
2007-08-24 16:19 ` Luck, Tony
2007-08-15 16:13 ` [PATCH 0/24] make atomic_read() behave consistently across all architectures Chris Snook
2007-08-15 23:40 ` Herbert Xu
2007-08-15 23:51 ` Paul E. McKenney
2007-08-16 1:30 ` Segher Boessenkool
2007-08-16 2:30 ` Paul E. McKenney
2007-08-16 19:33 ` Segher Boessenkool
2007-08-16 1:26 ` Segher Boessenkool
2007-08-16 2:23 ` Nick Piggin
2007-08-16 19:32 ` Segher Boessenkool
2007-08-17 2:19 ` Nick Piggin
2007-08-17 3:16 ` Paul Mackerras
2007-08-17 3:32 ` Nick Piggin
2007-08-17 3:50 ` Linus Torvalds
2007-08-17 23:59 ` Paul E. McKenney
2007-08-18 0:09 ` Herbert Xu
2007-08-18 1:08 ` Paul E. McKenney
2007-08-18 1:24 ` Christoph Lameter
2007-08-18 1:41 ` Satyam Sharma
2007-08-18 4:13 ` Linus Torvalds
2007-08-18 13:36 ` Satyam Sharma
2007-08-18 21:54 ` Paul E. McKenney
2007-08-18 22:41 ` Linus Torvalds
2007-08-18 23:19 ` Paul E. McKenney
2007-08-24 12:19 ` Denys Vlasenko
2007-08-24 17:19 ` Linus Torvalds
2007-08-18 21:56 ` Paul E. McKenney
2007-08-20 13:31 ` Chris Snook
2007-08-20 22:04 ` Segher Boessenkool
2007-08-20 22:48 ` Russell King
2007-08-20 23:02 ` Segher Boessenkool
2007-08-21 0:05 ` Paul E. McKenney
2007-08-21 7:08 ` Russell King
2007-08-21 7:05 ` Russell King
2007-08-21 9:33 ` Paul Mackerras
2007-08-21 11:37 ` Andi Kleen
2007-08-21 14:48 ` Segher Boessenkool
2007-08-21 16:16 ` Paul E. McKenney
2007-08-21 22:51 ` Valdis.Kletnieks
2007-08-22 0:50 ` Paul E. McKenney
2007-08-22 21:38 ` Adrian Bunk
2007-08-21 14:39 ` Segher Boessenkool
2007-08-17 3:42 ` Linus Torvalds
2007-08-17 5:18 ` Paul E. McKenney
2007-08-17 5:56 ` Satyam Sharma
2007-08-17 7:26 ` Nick Piggin
2007-08-17 8:47 ` Satyam Sharma
2007-08-17 9:15 ` Nick Piggin
2007-08-17 10:12 ` Satyam Sharma
2007-08-17 12:14 ` Nick Piggin
2007-08-17 13:05 ` Satyam Sharma
2007-08-17 9:48 ` Paul Mackerras
2007-08-17 10:23 ` Satyam Sharma
2007-08-17 22:49 ` Segher Boessenkool
2007-08-17 23:51 ` Satyam Sharma
2007-08-17 23:55 ` Segher Boessenkool
2007-08-17 6:42 ` Geert Uytterhoeven
2007-08-17 8:52 ` Andi Kleen
2007-08-17 10:08 ` Satyam Sharma
2007-08-17 22:29 ` Segher Boessenkool
2007-08-17 17:37 ` Segher Boessenkool
2007-08-14 23:26 ` Paul E. McKenney
2007-08-15 10:35 ` Stefan Richter
2007-08-15 12:04 ` Herbert Xu
2007-08-15 12:31 ` Satyam Sharma
2007-08-15 13:08 ` Stefan Richter
2007-08-15 13:11 ` Stefan Richter
2007-08-15 13:47 ` Satyam Sharma
2007-08-15 14:25 ` Paul E. McKenney
2007-08-15 15:33 ` Herbert Xu
2007-08-15 16:08 ` Paul E. McKenney
2007-08-15 17:18 ` Satyam Sharma
2007-08-15 17:33 ` Paul E. McKenney
2007-08-15 18:05 ` Satyam Sharma
2007-08-15 17:55 ` Satyam Sharma
2007-08-15 19:07 ` Paul E. McKenney
2007-08-15 21:07 ` Segher Boessenkool
2007-08-15 20:58 ` Segher Boessenkool
2007-08-15 18:19 ` David Howells
2007-08-15 18:45 ` Paul E. McKenney
2007-08-15 23:41 ` Herbert Xu
2007-08-15 23:53 ` Paul E. McKenney
2007-08-16 0:12 ` Herbert Xu
2007-08-16 0:23 ` Paul E. McKenney
2007-08-16 0:30 ` Herbert Xu
2007-08-16 0:49 ` Paul E. McKenney
2007-08-16 0:53 ` Herbert Xu
2007-08-16 1:14 ` Paul E. McKenney
2007-08-15 18:31 ` Segher Boessenkool
2007-08-15 19:40 ` Satyam Sharma
2007-08-15 20:42 ` Segher Boessenkool
2007-08-16 1:23 ` Satyam Sharma
2007-08-15 23:22 ` Paul Mackerras
2007-08-16 0:26 ` Christoph Lameter
2007-08-16 0:34 ` Paul Mackerras
2007-08-16 0:40 ` Christoph Lameter
2007-08-16 0:39 ` Paul E. McKenney
2007-08-16 0:42 ` Christoph Lameter
2007-08-16 0:53 ` Paul E. McKenney
2007-08-16 0:59 ` Christoph Lameter
2007-08-16 1:14 ` Paul E. McKenney
2007-08-16 1:41 ` Christoph Lameter
2007-08-16 2:15 ` Satyam Sharma
2007-08-16 2:08 ` Herbert Xu
2007-08-16 2:18 ` Christoph Lameter
2007-08-16 3:23 ` Paul Mackerras
2007-08-16 3:33 ` Herbert Xu
2007-08-16 3:48 ` Paul Mackerras
2007-08-16 4:03 ` Herbert Xu
2007-08-16 4:34 ` Paul Mackerras
2007-08-16 5:37 ` Herbert Xu
2007-08-16 6:00 ` Paul Mackerras
2007-08-16 18:50 ` Christoph Lameter
2007-08-16 18:48 ` Christoph Lameter
2007-08-16 19:44 ` Segher Boessenkool
2007-08-16 2:18 ` Chris Friesen
2007-08-16 2:32 ` Paul E. McKenney
2007-08-16 1:51 ` Paul Mackerras
2007-08-16 2:00 ` Herbert Xu
2007-08-16 2:05 ` Paul Mackerras
2007-08-16 2:11 ` Herbert Xu
2007-08-16 2:35 ` Paul E. McKenney
2007-08-16 3:15 ` Paul Mackerras
2007-08-16 3:43 ` Herbert Xu
2007-08-16 2:15 ` Christoph Lameter
2007-08-16 2:17 ` Christoph Lameter
2007-08-16 2:33 ` Satyam Sharma
2007-08-16 3:01 ` Satyam Sharma
2007-08-16 4:11 ` Paul Mackerras
2007-08-16 5:39 ` Herbert Xu
2007-08-16 6:56 ` Paul Mackerras
2007-08-16 7:09 ` Herbert Xu
2007-08-16 8:06 ` Stefan Richter
2007-08-16 8:10 ` Herbert Xu
2007-08-16 9:54 ` Stefan Richter
2007-08-16 10:31 ` Stefan Richter
2007-08-16 10:42 ` Herbert Xu
2007-08-16 16:34 ` Paul E. McKenney
2007-08-16 23:59 ` Herbert Xu
2007-08-17 1:01 ` Paul E. McKenney
2007-08-17 7:39 ` Satyam Sharma
2007-08-17 14:31 ` Paul E. McKenney
2007-08-17 18:31 ` Satyam Sharma
2007-08-17 18:56 ` Paul E. McKenney
2007-08-17 3:15 ` Nick Piggin
2007-08-17 4:02 ` Paul Mackerras
2007-08-17 4:39 ` Nick Piggin
2007-08-17 7:25 ` Stefan Richter
2007-08-17 8:06 ` Nick Piggin
2007-08-17 8:58 ` Satyam Sharma
2007-08-17 9:15 ` Nick Piggin
2007-08-17 10:03 ` Satyam Sharma
2007-08-17 11:50 ` Nick Piggin
2007-08-17 12:50 ` Satyam Sharma
2007-08-17 12:56 ` Nick Piggin
2007-08-18 2:15 ` Satyam Sharma
2007-08-17 10:48 ` Stefan Richter [this message]
2007-08-17 10:58 ` Stefan Richter
2007-08-18 14:35 ` LDD3 pitfalls (was Re: [PATCH 0/24] make atomic_read() behave consistently across all architectures) Stefan Richter
2007-08-20 13:28 ` Chris Snook
2007-08-17 22:14 ` [PATCH 0/24] make atomic_read() behave consistently across all architectures Segher Boessenkool
2007-08-17 5:04 ` Paul Mackerras
2007-08-16 10:35 ` Herbert Xu
2007-08-16 19:48 ` Chris Snook
2007-08-17 0:02 ` Herbert Xu
2007-08-17 2:04 ` Chris Snook
2007-08-17 2:13 ` Herbert Xu
2007-08-17 2:31 ` Nick Piggin
2007-08-17 5:09 ` Paul Mackerras
2007-08-17 5:32 ` Herbert Xu
2007-08-17 5:41 ` Paul Mackerras
2007-08-17 8:28 ` Satyam Sharma
2007-08-16 14:48 ` Ilpo Järvinen
2007-08-16 16:19 ` Stefan Richter
2007-08-16 19:55 ` Chris Snook
2007-08-16 20:20 ` Christoph Lameter
2007-08-17 1:02 ` Paul E. McKenney
2007-08-17 1:28 ` Herbert Xu
2007-08-17 5:07 ` Paul E. McKenney
2007-08-17 2:16 ` Paul Mackerras
2007-08-17 3:03 ` Linus Torvalds
2007-08-17 3:43 ` Paul Mackerras
2007-08-17 3:53 ` Herbert Xu
2007-08-17 6:26 ` Satyam Sharma
2007-08-17 8:38 ` Nick Piggin
2007-08-17 9:14 ` Satyam Sharma
2007-08-17 9:31 ` Nick Piggin
2007-08-17 10:55 ` Satyam Sharma
2007-08-17 12:39 ` Nick Piggin
2007-08-17 13:36 ` Satyam Sharma
2007-08-17 16:48 ` Linus Torvalds
2007-08-17 18:50 ` Chris Friesen
2007-08-17 18:54 ` Arjan van de Ven
2007-08-17 19:49 ` Paul E. McKenney
2007-08-17 19:49 ` Arjan van de Ven
2007-08-17 20:12 ` Paul E. McKenney
2007-08-17 19:08 ` Linus Torvalds
2007-08-20 13:15 ` Chris Snook
2007-08-20 13:32 ` Herbert Xu
2007-08-20 13:38 ` Chris Snook
2007-08-20 22:07 ` Segher Boessenkool
2007-08-21 5:46 ` Linus Torvalds
2007-08-21 7:04 ` David Miller
2007-08-21 13:50 ` Chris Snook
2007-08-21 14:59 ` Segher Boessenkool
2007-08-21 16:31 ` Satyam Sharma
2007-08-21 16:43 ` Linus Torvalds
2007-09-09 18:02 ` Denys Vlasenko
2007-09-09 18:18 ` Arjan van de Ven
2007-09-10 10:56 ` Denys Vlasenko
2007-09-10 11:15 ` Herbert Xu
2007-09-10 12:22 ` Kyle Moffett
2007-09-10 13:38 ` Denys Vlasenko
2007-09-10 14:16 ` Denys Vlasenko
2007-09-10 15:09 ` Linus Torvalds
2007-09-10 16:46 ` Denys Vlasenko
2007-09-10 19:59 ` Kyle Moffett
2007-09-10 18:59 ` Christoph Lameter
2007-09-10 23:19 ` [PATCH] Document non-semantics of atomic_read() and atomic_set() Chris Snook
2007-09-10 23:44 ` Paul E. McKenney
2007-09-11 19:35 ` Christoph Lameter
2007-09-10 14:51 ` [PATCH 0/24] make atomic_read() behave consistently across all architectures Arjan van de Ven
2007-09-10 14:38 ` Denys Vlasenko
2007-09-10 17:02 ` Arjan van de Ven
2007-08-17 11:08 ` Stefan Richter
2007-08-17 22:09 ` Segher Boessenkool
2007-08-17 17:41 ` Segher Boessenkool
2007-08-17 18:38 ` Satyam Sharma
2007-08-17 23:17 ` Segher Boessenkool
2007-08-17 23:55 ` Satyam Sharma
2007-08-18 0:04 ` Segher Boessenkool
2007-08-18 1:56 ` Satyam Sharma
2007-08-18 2:15 ` Segher Boessenkool
2007-08-18 3:33 ` Satyam Sharma
2007-08-18 5:18 ` Segher Boessenkool
2007-08-18 13:20 ` Satyam Sharma
2007-09-10 18:59 ` Christoph Lameter
2007-09-10 20:54 ` Paul E. McKenney
2007-09-10 21:36 ` Christoph Lameter
2007-09-10 21:50 ` Paul E. McKenney
2007-09-11 2:27 ` Segher Boessenkool
2007-08-16 21:08 ` Luck, Tony
2007-08-16 19:55 ` Chris Snook
2007-08-16 18:54 ` Christoph Lameter
2007-08-16 20:07 ` Paul E. McKenney
2007-08-16 3:05 ` Paul Mackerras
2007-08-16 19:39 ` Segher Boessenkool
2007-08-16 2:07 ` Segher Boessenkool
2007-08-24 12:50 ` Denys Vlasenko
2007-08-24 17:15 ` Christoph Lameter
2007-08-24 20:21 ` Denys Vlasenko
2007-08-16 3:37 ` Bill Fink
2007-08-16 5:20 ` Satyam Sharma
2007-08-16 5:57 ` Satyam Sharma
2007-08-16 9:25 ` Satyam Sharma
2007-08-16 21:00 ` Segher Boessenkool
2007-08-17 4:32 ` Satyam Sharma
2007-08-17 22:38 ` Segher Boessenkool
2007-08-18 14:42 ` Satyam Sharma
2007-08-16 20:50 ` Segher Boessenkool
2007-08-17 4:24 ` Satyam Sharma
2007-08-17 22:34 ` Segher Boessenkool
2007-08-15 19:59 ` Christoph Lameter
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=46C57D07.80604@s5r6.in-berlin.de \
--to=stefanr@s5r6.in-berlin.de \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=cfriesen@nortel.com \
--cc=clameter@sgi.com \
--cc=csnook@redhat.com \
--cc=davem@davemloft.net \
--cc=heiko.carstens@de.ibm.com \
--cc=herbert@gondor.apana.org.au \
--cc=horms@verge.net.au \
--cc=jesper.juhl@gmail.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=nickpiggin@yahoo.com.au \
--cc=paulmck@linux.vnet.ibm.com \
--cc=paulus@samba.org \
--cc=rpjday@mindspring.com \
--cc=satyam@infradead.org \
--cc=schwidefsky@de.ibm.com \
--cc=segher@kernel.crashing.org \
--cc=torvalds@linux-foundation.org \
--cc=wensong@linux-vs.org \
--cc=wjiang@resilience.com \
--cc=zlynx@acm.org \
/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).