From: James Bottomley <James.Bottomley@SteelEye.com>
To: Grant Grundler <grundler@parisc-linux.org>
Cc: John David Anglin <dave@hiauly1.hia.nrc.ca>,
parisc-linux@parisc-linux.org
Subject: Re: [parisc-linux] coherent ops and mb() revisited
Date: 07 Sep 2004 11:30:17 -0400 [thread overview]
Message-ID: <1094571019.2068.101.camel@mulgrave> (raw)
In-Reply-To: <20040907151722.GC18849@colo.lackof.org>
On Tue, 2004-09-07 at 11:17, Grant Grundler wrote:
> Maybe I'm just confused again. I was thinking gcc could move instructions
> between the asm("ldcw") and mb(). And the same thing between
> mb() and "lock = 1".
It can, in a restricted fashion (the asm volatile ensures this
restriction). But that's OK. What we want is that when we complete the
spin_lock code, the spin is locked and memory clobbered. That's why the
only necessary mb() is at the end.
> In other words, I'm worried about the "distance" bewteen lock/unlock
> ops is greater than the "distance" between two mb() that contain
> the critical section of code.
Well, the point about using an optimising compiler is that you're
supposed to give it the information necessary to do its job. In this
case, the correct information is that a is volatile. And further, after
it's finished the spin lock code we prevent no reordering leaks and
clobber memory.
> > You probably get slightly more confinement by using mb() instead of the
> > "memory" clobber in __ldcw().
>
> Erm, how?
> Our mb() definition uses asm(:::"memory").
> Is that different from using "memory" in the actual bit of assembly?
Because in your implementation you have the barrier in the middle of a
loop; that means it's crossed many times in the contended case. In mine
it's only crossed once.
James
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux
next prev parent reply other threads:[~2004-09-07 15:30 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-09-05 1:38 [parisc-linux] coherent ops and mb() revisited Grant Grundler
2004-09-05 2:56 ` James Bottomley
2004-09-05 6:27 ` John David Anglin
2004-09-05 14:36 ` James Bottomley
2004-09-06 4:19 ` Grant Grundler
2004-09-06 9:24 ` John David Anglin
2004-09-06 14:15 ` James Bottomley
2004-09-07 15:17 ` Grant Grundler
2004-09-07 15:30 ` James Bottomley [this message]
2004-09-08 16:52 ` Grant Grundler
2004-09-08 17:11 ` James Bottomley
2004-09-10 16:11 ` Grant Grundler
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=1094571019.2068.101.camel@mulgrave \
--to=james.bottomley@steeleye.com \
--cc=dave@hiauly1.hia.nrc.ca \
--cc=grundler@parisc-linux.org \
--cc=parisc-linux@parisc-linux.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.