From: "Jesper Juhl" <jesper.juhl@gmail.com>
To: "Chris Snook" <csnook@redhat.com>
Cc: akpm@linux-foundation.org, torvalds@linux-foundation.org,
ak@suse.de, heiko.carstens@de.ibm.com, davem@davemloft.net,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
schwidefsky@de.ibm.com, wensong@linux-vs.org, horms@verge.net.au,
wjiang@resilience.com, cfriesen@nortel.com, zlynx@acm.org
Subject: Re: [PATCH] make atomic_t volatile on all architectures
Date: Thu, 9 Aug 2007 01:51:29 +0200 [thread overview]
Message-ID: <9a8748490708081651o9ba7f7v8d350c155c5a2b18@mail.gmail.com> (raw)
In-Reply-To: <46BA524F.2070803@redhat.com>
On 09/08/2007, Chris Snook <csnook@redhat.com> wrote:
> Jesper Juhl wrote:
> > On 09/08/2007, Chris Snook <csnook@redhat.com> wrote:
> >> From: Chris Snook <csnook@redhat.com>
> >>
> >> Some architectures currently do not declare the contents of an atomic_t to be
> >> volatile. This causes confusion since atomic_read() might not actually read
> >> anything if an optimizing compiler re-uses a value stored in a register, which
> >> can break code that loops until something external changes the value of an
> >> atomic_t. Avoiding such bugs requires using barrier(), which causes re-loads
> >> of all registers used in the loop, thus hurting performance instead of helping
> >> it, particularly on architectures where it's unnecessary. Since we generally
> >> want to re-read the contents of an atomic variable on every access anyway,
> >> let's standardize the behavior across all architectures and avoid the
> >> performance and correctness problems of requiring the use of barrier() in
> >> loops that expect atomic_t variables to change externally. This is relevant
> >> even on non-smp architectures, since drivers may use atomic operations in
> >> interrupt handlers.
> >>
> >> Signed-off-by: Chris Snook <csnook@redhat.com>
> >>
> >
> > Hmm, I thought we were trying to move away from volatile since it is
> > very weakly defined and towards explicit barriers and locks...
> > Points to --> Documentation/volatile-considered-harmful.txt
>
> This is a special case.
I had a feeling it might be.
> Usually, the use of volatile is just lazy. In
> this case, it's probably necessary on at least some architectures, so we
> can't remove it everywhere unless we want to rewrite atomic.h completely
> in inline assembler for several architectures, and painstakingly verify
> all that work.
Sounds quite unpleasant and actively harmful - keeping stuff in plain
readable C makes it easier to handle by most people.
> I would hope it's obvious that having consistent
> behavior on all architectures, or even at all compiler optimization
> levels within an architecture, can be agreed to be good.
Agreed, consistency is good.
> Additionally,
> atomic_t variables are a rare exception, in that we pretty much always
> want to work with the latest value in RAM on every access. Making this
> atomic will allow us to remove a bunch of barriers which do nothing but
> slow things down on most architectures.
>
I believe you meant to say "volatile" and not "atomic" above. But
yes, if volatile is sufficiently defined to ensure it does what we
want in this case and using it means we can actually speed up the
kernel, then it does indeed sound reasonable. Especially since it's
confined to the implementation of atomic_t which most people shouldn't
be looking at anyway (but simply use) and when using an atomic_t it's
pretty reasonable to expect that it doesn't need any additional
locking or barriers since it's supposed to be *atomic*.
> I agree that the use of atomic_t in .c files is generally bad, but in
> certain special cases, hiding it inside defined data types may be worth
> the slight impurity, just as we sometimes tolerate lines longer than 80
> columns when "fixing" it makes things unreadable.
>
Can't argue with that.
It seems you've thought it through. I just wanted to be sure that
this approach was actually the one that makes the most sense, and
you've convinced me of that :-)
--
Jesper Juhl <jesper.juhl@gmail.com>
Don't top-post http://www.catb.org/~esr/jargon/html/T/top-post.html
Plain text mails only, please http://www.expita.com/nomime.html
next prev parent reply other threads:[~2007-08-08 23:51 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-08 23:07 Chris Snook
2007-08-08 23:18 ` Jesper Juhl
2007-08-08 23:31 ` Chris Snook
2007-08-08 23:51 ` Jesper Juhl [this message]
2007-08-08 23:25 ` Lennert Buytenhek
2007-08-08 23:35 ` Chris Snook
2007-08-09 1:03 ` Herbert Xu
2007-08-09 1:48 ` David Miller
2007-08-09 3:47 ` Paul E. McKenney
2007-08-09 7:47 ` Chris Snook
2007-08-09 8:30 ` Herbert Xu
2007-08-09 11:44 ` Chris Snook
2007-08-09 4:18 ` Linus Torvalds
2007-08-09 4:59 ` Jerry Jiang
2007-08-09 7:31 ` Chris Snook
2007-08-09 8:14 ` Heiko Carstens
2007-08-09 17:36 ` Chuck Ebbert
2007-08-09 17:55 ` Linus Torvalds
2007-08-09 18:20 ` Martin Schwidefsky
2007-08-12 5:53 ` Segher Boessenkool
2007-08-12 6:09 ` Linus Torvalds
2007-08-12 9:48 ` Martin Schwidefsky
2007-08-12 9:54 ` Linus Torvalds
2007-08-12 16:30 ` Segher Boessenkool
2007-08-12 18:11 ` Linus Torvalds
2007-08-12 19:13 ` Segher Boessenkool
2007-08-12 10:27 ` Segher Boessenkool
2007-08-12 17:59 ` Linus Torvalds
2007-08-12 9:47 ` Martin Schwidefsky
2007-08-12 10:35 ` Segher Boessenkool
2007-08-09 17:57 ` Martin Schwidefsky
[not found] <8Q2Pg-8uV-23@gated-at.bofh.it>
[not found] ` <8Q7Fa-7rJ-1@gated-at.bofh.it>
[not found] ` <8Q8rD-hh-7@gated-at.bofh.it>
2007-08-09 9:10 ` Bodo Eggert
2007-08-09 9:18 ` Jerry Jiang
2007-08-09 15:00 ` Linus Torvalds
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=9a8748490708081651o9ba7f7v8d350c155c5a2b18@mail.gmail.com \
--to=jesper.juhl@gmail.com \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=cfriesen@nortel.com \
--cc=csnook@redhat.com \
--cc=davem@davemloft.net \
--cc=heiko.carstens@de.ibm.com \
--cc=horms@verge.net.au \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=schwidefsky@de.ibm.com \
--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
all inboxes | Powered by JetHome®