From: Peter Zijlstra <peterz@infradead.org>
To: paulmck@linux.vnet.ibm.com
Cc: Nick Piggin <nickpiggin@yahoo.com.au>,
jmerkey@wolfmountaingroup.com,
Stefan Richter <stefanr@s5r6.in-berlin.de>,
linux-kernel@vger.kernel.org,
Linus Torvalds <torvalds@linux-foundation.org>,
David Howells <dhowells@redhat.com>
Subject: Re: [ANNOUNCE] mdb: Merkey's Linux Kernel Debugger 2.6.27-rc4 released
Date: Thu, 21 Aug 2008 16:48:05 +0200 [thread overview]
Message-ID: <1219330085.8651.144.camel@twins> (raw)
In-Reply-To: <20080821143024.GD6690@linux.vnet.ibm.com>
On Thu, 2008-08-21 at 07:30 -0700, Paul E. McKenney wrote:
> On Thu, Aug 21, 2008 at 04:09:59PM +0200, Peter Zijlstra wrote:
> > On Thu, 2008-08-21 at 23:37 +1000, Nick Piggin wrote:
> > > On Thursday 21 August 2008 22:26, jmerkey@wolfmountaingroup.com wrote:
> > >
> > > > I used the smp_wmb() functions. I noted a couple of things. a) some of
> > > > these macros just emit __asm__ __volatile__ into the code so why not just
> > > > say "volatile" to begin with
> > >
> > > It is not the same as volatile type. What it does is tell the compiler
> > > to clobber all registers or temporaries. This something pretty well
> > > defined and hard to get wrong compared to volatile type.
> >
> > Right, asm volatile () means that the asm may not be discarted. Very
> > different from the volatile type qualifier.
> >
> > > > b) smp_wmb() in some cases worked and in
> > > > other cases jut optimized away the global reference.
> > >
> > > Linux barriers aren't going to force a load to be emitted, if it can be
> > > optimized away. If it optimized away a store, then I'd like to see a
> > > test case.
> >
> > Not sure - I think all barrier clobber the full register and memory set.
> > So if you access a variable after a barrier it will have to issue a
> > load.
>
> Here is one example (which might or might not be what Nick had in mind):
>
> extern int v;
>
> void foo(void)
> {
> do_something_with(v);
> barrier();
> do_something_else_with(v - v);
> }
>
> The second set of loads from v can be optimized away unless v is
> declared volatile. In contrast:
>
> void bar(void)
> {
> do_something_with(v);
> barrier();
> do_something_else_with(v);
> }
>
> Here the compiler must refetch v after the barrier.
Ah, right. But in that case:
v-v := tmp1 = v; tmp2 = v; sub tmp1,tmp2;
Which you can of course write out more explicitly in C as well and
insert a barrier between the two reads of v, giving the same effect as
volatile.
Still, point taken.
next prev parent reply other threads:[~2008-08-21 14:51 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-21 2:50 [ANNOUNCE] mdb: Merkey's Linux Kernel Debugger 2.6.27-rc4 released jmerkey
2008-08-21 10:07 ` Peter Zijlstra
2008-08-21 10:57 ` Stefan Richter
2008-08-21 11:02 ` Peter Zijlstra
2008-08-21 11:47 ` Paul E. McKenney
2008-08-21 12:03 ` Peter Zijlstra
2008-08-21 14:53 ` Paul E. McKenney
2008-08-21 14:58 ` jmerkey
2008-08-21 12:05 ` Stefan Richter
2008-08-21 12:26 ` jmerkey
[not found] ` <43593.166.70.238.46.1219321595.squirrel@webmail.wolfmountaingroup.com >
2008-08-21 12:35 ` jmerkey
2008-08-21 13:37 ` Nick Piggin
2008-08-21 14:09 ` Stefan Richter
2008-08-22 1:40 ` Nick Piggin
2008-08-22 6:32 ` Stefan Richter
2008-08-22 11:54 ` jmerkey
2008-08-22 12:36 ` Stefan Richter
2008-08-21 14:09 ` Peter Zijlstra
2008-08-21 14:30 ` Paul E. McKenney
2008-08-21 14:14 ` jmerkey
2008-08-21 14:48 ` Peter Zijlstra [this message]
2008-08-21 16:21 ` Avi Kivity
2008-08-21 21:06 ` Jeremy Fitzhardinge
2008-08-21 21:18 ` Linus Torvalds
2008-08-21 21:21 ` Jeremy Fitzhardinge
2008-08-24 4:25 ` jmerkey
2008-08-26 8:26 ` Andi Kleen
2008-08-27 1:49 ` jmerkey
2008-08-22 1:37 ` Nick Piggin
2008-08-21 14:02 ` Stefan Richter
2008-08-21 14:08 ` jmerkey
2008-08-21 15:22 ` Stefan Richter
2008-08-21 15:02 ` jmerkey
2008-08-21 15:57 ` Linus Torvalds
2008-08-21 16:18 ` Linus Torvalds
2008-08-21 16:48 ` Paul E. McKenney
2008-09-24 0:01 ` Paul E. McKenney
2008-08-21 16:43 ` 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=1219330085.8651.144.camel@twins \
--to=peterz@infradead.org \
--cc=dhowells@redhat.com \
--cc=jmerkey@wolfmountaingroup.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nickpiggin@yahoo.com.au \
--cc=paulmck@linux.vnet.ibm.com \
--cc=stefanr@s5r6.in-berlin.de \
--cc=torvalds@linux-foundation.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.