All of lore.kernel.org
 help / color / mirror / Atom feed
From: "marty fouts" <mf.danger@gmail.com>
To: "Pavel Machek" <pavel@suse.cz>
Cc: "Linus Torvalds" <torvalds@osdl.org>,
	"Albert Cahalan" <acahalan@gmail.com>,
	tglx@linutronix.de, joe.korty@ccur.com,
	linux-kernel@vger.kernel.org, linux-os@analogic.com,
	khc@pm.waw.pl, mingo@elte.hu, akpm@osdl.org, arjan@infradead.org
Subject: Re: [patch] spinlocks: remove 'volatile'
Date: Mon, 10 Jul 2006 09:25:15 -0700	[thread overview]
Message-ID: <9f7850090607100925k297fdb47v92a8fbbefef4bd96@mail.gmail.com> (raw)
In-Reply-To: <20060709211023.GC5759@ucw.cz>

On 7/9/06, Pavel Machek <pavel@suse.cz> wrote:
> Hi!
>
> > Btw, I think that the whole standard definition of "volatile" is pretty
> > weak and useless. The standard could be improved, and a way to improve the
> > definition of volatile would actually be to say something like
> >
> >       "volatile" implies that the access to that entity can alias with
> >       any other access.
> >
> > That's actually a lot simpler for a compiler writer (a C compiler already
> > has to know about the notion of data aliasing), and gives a lot more
> > useful (and strict) semantics to the whole concept.
> >
> > So to look at the previous example of
> >
> >       extern int a;
> >       extern int volatile b;
> >
> >       void testfn(void)
> >       {
> >               a++;
> >               b++;
> >       }
> >
> > _my_ definition of "volatile" is actually totally unambiguous, and not
> > just simpler than the current standard, it is also stronger. It would make
> > it clearly invalid to read the value of "b" until the value of "a" has
> > been written, because (by my definition), "b" may actually alias the value
> > of "a", so you clearly cannot read "b" until "a" has been updated.
> ...
> > In contrast, the current C standard definition of "volatile" is not only
> > cumbersome and inconvenient, it's also badly defined when it comes to
> > accesses to _other_ data, making it clearly less useful.
> >
> > I personally think that my simpler definition of volatile is actually a
> > perfectly valid implementation of the current definition of volatile, and
> > I suggested it to some gcc people as a better way to handle "volatile"
> > inside gcc while still being standards-conforming (ie the "can alias
> > anything" thing is not just clearer and simpler, it's strictly a subset of
> > what the C standard allows, meaning that I think you can adopt my
> > definition _without_ breaking any old programs or standards).
>
> Are you sure?
>
> volatile int a; a=1; a=2;
>
> ...under old definition, there's nothing to optimize but AFAICT, your
> definition allows optimizing out a=1.
>
>                                                Pavel
> --

You don't have to go that far.  "Alias with anything" is too vague,
because it basically means that all external variables are volatile if
any are.  In the original example, b shouldn't be allowed as an alias
for a, because a is not "volatile". Otherwise, once you've added any
volatile variables you've effectively said "all variables are
volatile".

Anyway, this approach is the opposite of the original intent of
volatile.  Originally, the idea was that volatile meant "anything
might have changed b since the last time you referenced it".  Here,
you're saying "changing b could change anything".

  parent reply	other threads:[~2006-07-10 16:25 UTC|newest]

Thread overview: 119+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-07-08  3:54 [patch] spinlocks: remove 'volatile' Albert Cahalan
2006-07-08  5:25 ` Linus Torvalds
2006-07-08  6:39   ` Nick Piggin
2006-07-08 18:53     ` Linus Torvalds
2006-07-08  9:45 ` Joe Korty
2006-07-08  9:52   ` Arjan van de Ven
2006-07-08  9:59   ` David Schwartz
2006-07-08 10:24   ` Thomas Gleixner
2006-07-08 15:49     ` Albert Cahalan
2006-07-08 18:31       ` Thomas Gleixner
2006-07-08 19:33         ` Albert Cahalan
2006-07-08 20:11           ` Linus Torvalds
2006-07-09 21:10             ` Pavel Machek
2006-07-09 22:18               ` Linus Torvalds
2006-07-10 16:25               ` marty fouts [this message]
2006-07-08 23:10           ` David Schwartz
2006-07-08 13:57   ` Andi Kleen
2006-07-08 19:13     ` Linus Torvalds
2006-07-08 10:45 ` Krzysztof Halasa
  -- strict thread matches above, loose matches on Subject: below --
2006-07-08  6:12 trajce nedev
2006-07-08  6:19 ` Chase Venters
2006-07-08  6:45   ` trajce nedev
2006-07-08  6:58     ` Arjan van de Ven
2006-07-08  7:02     ` Vadim Lobanov
2006-07-08 13:46     ` Chase Venters
2006-07-09  4:39       ` Benjamin Herrenschmidt
2006-07-14  3:30       ` Steven Rostedt
2006-07-08 18:23 ` Linus Torvalds
2006-07-07 10:21 Chuck Ebbert
2006-07-07 17:09 ` Linus Torvalds
2006-07-05 11:46 [patch] uninline init_waitqueue_*() functions Ingo Molnar
2006-07-05 17:10 ` Andrew Morton
2006-07-05 19:35   ` Ingo Molnar
2006-07-05 20:18     ` Andrew Morton
2006-07-05 20:36       ` Linus Torvalds
2006-07-05 20:47         ` Ingo Molnar
2006-07-05 21:21           ` Linus Torvalds
2006-07-05 21:45             ` Ingo Molnar
2006-07-05 22:09               ` Linus Torvalds
2006-07-05 23:11                 ` Linus Torvalds
2006-07-06  8:16                   ` [patch] spinlocks: remove 'volatile' Ingo Molnar
2006-07-06  8:23                     ` Ingo Molnar
2006-07-06  9:27                     ` Heiko Carstens
2006-07-06  9:34                       ` Arjan van de Ven
2006-07-06 11:59                     ` linux-os (Dick Johnson)
2006-07-06 12:01                       ` Arjan van de Ven
2006-07-06 12:29                         ` linux-os (Dick Johnson)
2006-07-06 12:39                           ` Arjan van de Ven
2006-07-06 13:39                             ` J.A. Magallón
2006-07-06 13:43                               ` Arjan van de Ven
2006-07-06 14:05                               ` Chase Venters
2006-07-06 14:26                               ` Andreas Schwab
2006-07-06 16:40                           ` Nick Piggin
2006-07-06 23:19                           ` David Schwartz
2006-07-06 18:15                         ` Mark Lord
2006-07-06 19:15                           ` Linus Torvalds
2006-07-06 19:33                             ` Chris Friesen
2006-07-06 19:37                               ` Mark Lord
2006-07-06 20:28                                 ` Chris Friesen
2006-07-06 20:32                                   ` Linus Torvalds
2006-07-06 19:38                               ` Arjan van de Ven
2006-07-06 19:41                               ` Måns Rullgård
2006-07-06 19:42                               ` Jeff Garzik
2006-07-06 19:58                               ` Linus Torvalds
2006-07-06 20:27                                 ` Mark Lord
2006-07-06 20:40                                 ` Chris Friesen
2006-07-06 21:00                                   ` Linus Torvalds
2006-07-08  8:40                             ` Avi Kivity
2006-07-08  8:51                               ` Arjan van de Ven
2006-07-08  9:20                                 ` Avi Kivity
2006-07-08  9:51                                   ` Arjan van de Ven
2006-07-08 10:18                                     ` Avi Kivity
2006-07-08 10:28                                       ` Thomas Gleixner
2006-07-09  4:19                                       ` Benjamin Herrenschmidt
2006-07-09 12:47                                         ` Avi Kivity
2006-07-09 19:16                                           ` David Schwartz
2006-07-09 19:51                                             ` Theodore Tso
2006-07-06 16:07                       ` Linus Torvalds
2006-07-06 16:13                         ` Linus Torvalds
2006-07-06 17:04                           ` Jeff Garzik
2006-07-06 17:52                           ` linux-os (Dick Johnson)
2006-07-06 18:00                             ` Linus Torvalds
2006-07-06 21:02                               ` J.A. Magallón
2006-07-06 21:12                                 ` Linus Torvalds
2006-07-06 18:10                             ` Michael Buesch
2006-07-06 18:16                             ` Chase Venters
2006-07-07 18:16                             ` Krzysztof Halasa
2006-07-07 19:51                               ` linux-os (Dick Johnson)
2006-07-07 20:25                                 ` Linus Torvalds
2006-07-07 21:22                                   ` linux-os (Dick Johnson)
2006-07-07 21:48                                     ` Chase Venters
2006-07-08 10:00                                       ` Krzysztof Halasa
2006-07-08 13:41                                         ` Chase Venters
2006-07-08 20:09                                           ` Krzysztof Halasa
2006-07-08 20:40                                             ` Chase Venters
2006-07-08 20:47                                               ` Chase Venters
2006-07-09 10:57                                               ` Krzysztof Halasa
2006-07-07 21:59                                     ` Linus Torvalds
2006-07-07 22:06                                       ` Linus Torvalds
2006-07-08 20:49                                       ` Pavel Machek
2006-07-08 21:43                                         ` Linus Torvalds
2006-07-07 22:05                                     ` J.A. Magallón
2006-07-07 22:22                                       ` Chase Venters
2006-07-07 22:37                                         ` J.A. Magallón
2006-07-08  9:33                                           ` David Schwartz
2006-07-07 22:49                                         ` J.A. Magallón
2006-07-07 22:59                                           ` Vadim Lobanov
2006-07-07 23:18                                           ` Chase Venters
2006-07-07 23:36                                       ` Davide Libenzi
2006-07-07 22:09                                     ` Ingo Molnar
2006-07-08  7:36                                       ` Ingo Molnar
2006-07-07 20:39                                 ` Krzysztof Halasa
2006-07-07 23:06                                 ` Björn Steinbrink
2006-07-08  8:36                                 ` Avi Kivity
2006-07-06 19:32                           ` Jan Engelhardt
2006-07-06 20:26                             ` Jeremy Fitzhardinge
2006-07-06 20:55                               ` Jan Engelhardt
2006-07-06 21:07                                 ` Linus Torvalds
2006-07-06 19:56                     ` Linus Torvalds
2006-07-06 20:34                       ` Linus Torvalds
2006-07-08 22:50                         ` Ralf Baechle
2006-07-09  3:09                           ` Linus Torvalds
2006-07-09  3:07                         ` Keith Owens
2006-07-09  3:29                           ` Linus Torvalds
2006-07-09  3:43                             ` Keith Owens
2006-07-09  3:58                           ` Linus Torvalds
2006-07-09  6:13                             ` David Miller
2006-07-09 14:28                             ` Roman Zippel
2006-07-09 15:27                               ` 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=9f7850090607100925k297fdb47v92a8fbbefef4bd96@mail.gmail.com \
    --to=mf.danger@gmail.com \
    --cc=acahalan@gmail.com \
    --cc=akpm@osdl.org \
    --cc=arjan@infradead.org \
    --cc=joe.korty@ccur.com \
    --cc=khc@pm.waw.pl \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-os@analogic.com \
    --cc=mingo@elte.hu \
    --cc=pavel@suse.cz \
    --cc=tglx@linutronix.de \
    --cc=torvalds@osdl.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 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.