public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Chris Friesen" <cfriesen@nortel.com>
To: Chris Snook <csnook@redhat.com>
Cc: Jerry Jiang <wjiang@resilience.com>,
	"Robert P. J. Day" <rpjday@mindspring.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: why are some atomic_t's not volatile, while most are?
Date: Tue, 07 Aug 2007 16:46:04 -0600	[thread overview]
Message-ID: <46B8F62C.6030607@nortel.com> (raw)
In-Reply-To: <46B8EBD8.9080101@redhat.com>

Chris Snook wrote:
> Chris Friesen wrote:
>> Without other restrictions, a suficiently 
>> intelligent optimiser could notice that the address of v doesn't 
>> change in the loop and the destination is never written within the 
>> loop, so the read could be hoisted out of the loop.

> That would be a compiler bug.

Could you elaborate?  From the point of view of the compiler, it "knows" 
that the variable doesn't change inside the loop.

In the "volatile considered evil" discussion in May of this year, Alan 
Cox explicitly mentioned the implementation of atomic primitives as a 
case where "volatile" might be required.

> On most superscalar architectures, including powerpc, multiple 
> instructions can be in flight simultaneously, potentially even reading 
> and writing the same data.  When the compiler detects data dependencies 
> within a thread of execution, it will do the right thing.

In the example I gave, as far as the compiler can detect there are no 
dependencies.  The code that changes the value is in a different 
compilation unit.

> Modern ISAs that lack legacy baggage do away 
> with this guarantee, putting the burden on the compiler to enforce 
> serialization.  When the compiler can't detect that it's needed, we use 
> volatile to inform it explicitly.

I certainly agree with this statement.

This leads logically to the question of whether there are cases where 
the compiler cannot detect that serialization is needed when 
implementing atomic_t accessor functions.  Previously in this thread 
you've said that there are not, while I've attempted to show that it is 
possible.

Chris

  reply	other threads:[~2007-08-07 22:46 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-01 12:49 why are some atomic_t's not volatile, while most are? Robert P. J. Day
2007-08-06  4:35 ` Jerry Jiang
2007-08-06 14:12   ` Chris Snook
2007-08-07 15:51     ` Chris Friesen
2007-08-07 20:32       ` Chris Snook
2007-08-07 21:02         ` Chris Friesen
2007-08-07 21:19           ` Chris Snook
2007-08-07 21:38             ` Chris Friesen
2007-08-07 22:02               ` Chris Snook
2007-08-07 22:46                 ` Chris Friesen [this message]
2007-08-07 22:06               ` Jan Engelhardt
2007-08-07 22:49                 ` Chris Friesen
2007-08-07 22:32               ` Zan Lynx
2007-08-08  1:31                 ` Chris Snook
2007-08-08  4:50                   ` Chris Friesen
2007-08-08  6:47                     ` Chris Snook
2007-08-08  8:16                       ` Jerry Jiang
2007-08-08  8:27                       ` Jerry Jiang
2007-08-08 20:54                         ` Chris Snook
2007-08-09 12:37                           ` Robert P. J. Day
2007-08-09 12:52                             ` Chris Snook
2007-08-09 18:02                               ` Robert P. J. Day
2007-08-09 18:04                                 ` Robert P. J. Day
2007-08-08  2:27         ` Jerry Jiang
2007-08-08  5:39           ` Chris Snook

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=46B8F62C.6030607@nortel.com \
    --to=cfriesen@nortel.com \
    --cc=csnook@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rpjday@mindspring.com \
    --cc=wjiang@resilience.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