From: Frank Rowand <frank_rowand@mvista.com>
To: Gabriel Paubert <paubert@iram.es>
Cc: frowand@mvista.com, Brian Kuschak <brian.kuschak@skystream.com>,
"'Dan Malek'" <dan@mvista.com>, Eli Chen <eli@routefree.com>,
linuxppc-embedded@lists.linuxppc.org
Subject: Re: dcache BUG()
Date: Thu, 10 May 2001 12:10:24 -0700 [thread overview]
Message-ID: <3AFAE7A0.AE936C64@mvista.com> (raw)
In-Reply-To: Pine.HPX.4.10.10105102042500.29518-100000@gra-ux1.iram.es
Gabriel Paubert wrote:
>
> On Thu, 10 May 2001, Frank Rowand wrote:
>
> > Gabriel Paubert wrote:
> > >
> > > On Wed, 9 May 2001, Brian Kuschak wrote:
> >
> >
> > > >
> > > > static __inline__ void atomic_set(atomic_t *v, int a)
> > > > {
> > > > c004f9e8: 38 00 00 01 li r0,1
> > > > int t;
> > > >
> > > > __asm__ __volatile__("\n\
> > > > c004f9ec: 7d 60 f8 28 lwarx r11,r0,r31
> > > > c004f9f0: 60 0b 00 00 ori r11,r0,0
> > > > c004f9f4: 7d 60 f9 2d stwcx. r11,r0,r31
> > > > c004f9f8: 40 a2 ff f4 bne- c004f9ec <d_alloc+0x90>
> > > >
> > > > atomic_set(&dentry->d_count, 1);
> > >
> > > Is there any reason for atomic_set to use this sequence. I believe that a
> > > simple store (stw in this case) would be ok. This looks like a very
> > > convoluted and bloated way to set a variable. An aligned stw is guaranteed
> > > to set the variable atomically wrt all other processors.
> >
> > Sorry I wasn't around for the beginning of this discussion (I was off with
> > visiting family...), but I'll jump in now.
> >
> > I put this version of atomic_set() into Brian's source. It is one of the
> > things that helped reduce the severity of the dcache symptoms. You can't
> > just use a stw in atomic_set(), because the other atomic operations depend
> > upon the stwcx.
>
> Why not ? I'd like to find an explanation of a possible failure mode.
> All PPC systems have always used a simple store for atomic_set. If it does
> not work, there is something seriously wrong, perhaps even a hardware bug.
>
> This is especially true on a UP system. Whatever value is stored by a stw
> should be seen by any following lwarx/stwcx., on SMP you may need an
> eieio. But on UP I can't see how it can affect anything.
>From the "PowerPC 405GP Embedded Processor User's Manual", in the "Instruction
Set" chapter (which describes each instruction), the Programming Note for lwarx
says:
lwarx and the stwcx. instruction should be paired in a loop, as shown in the
following example, to create the effect of an atomic operation to a memory
area used as a semaphore between asynchronous processes. Only lwarx can set
the reservation bit to 1. stwcx. sets the reservation bit to 0 upon its
completion, whether or not stwcx. sent (RS) to memory. CR[CR0]EQ must be
examined to determine whether (RS) was sent to memory.
loop: lwarx # read the semaphore from memory; set reservation
"alter" # change the semaphore bits in register as required
stwcx. # attempt to store semaphore; reset reservation
bne loop # an asynchronous process has intervened; try again
If the asynchronous process in the code example had paired lwarx with a
store other than stwcx., the reservation bit would not have been cleared
in the asynchronous process, and the code example would have overwritten
the semaphore.
So if the lwarx occurs,
then an interrupt alters the flow of execution,
and the interrupt handler uses a stw to implement atomic_set(),
then the interrupt handler returns to the original flow of execution,
then the stwcx. succeeds, even though the value of the semaphore was
altered by the atomic_set().
> Did it actually have any effect on Brian's system ?
Changing atomic_set() to use lwarx / stwcx. instead of stw had an
effect on my 405GP systems here (including the Walnut and also
the same custom board that Brian is using).
-Frank
--
Frank Rowand <frank_rowand@mvista.com>
MontaVista Software, Inc
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
next prev parent reply other threads:[~2001-05-10 19:10 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-05-09 16:40 dcache BUG() Brian Kuschak
2001-05-09 18:31 ` Dan Malek
2001-05-09 19:18 ` Gabriel Paubert
2001-05-10 18:39 ` Frank Rowand
2001-05-10 18:49 ` Gabriel Paubert
2001-05-10 19:10 ` Frank Rowand [this message]
2001-05-11 4:23 ` Paul Mielke
2001-05-11 10:09 ` Gabriel Paubert
2001-05-10 20:56 ` Dan Malek
2001-05-10 23:14 ` Cort Dougan
2001-05-11 11:01 ` Gabriel Paubert
2001-05-11 10:57 ` Gabriel Paubert
2001-05-11 18:49 ` Dan Malek
-- strict thread matches above, loose matches on Subject: below --
2001-05-12 0:44 Brian Kuschak
2001-05-12 0:57 ` Eli Chen
2001-05-14 9:28 ` Gabriel Paubert
2001-05-10 21:20 Brian Kuschak
2001-05-10 21:26 ` Dan Malek
2001-05-08 17:43 Brian Kuschak
2001-05-09 11:06 ` Gabriel Paubert
2001-05-08 15:43 Brian Kuschak
2001-05-08 3:36 Brian Kuschak
2001-05-08 1:53 Brian Kuschak
2001-05-08 2:03 ` Dan Malek
2001-05-08 11:59 ` Gabriel Paubert
2001-05-08 0:40 Brian Kuschak
2001-05-07 23:01 Brian Kuschak
2001-05-07 22:19 Brian Kuschak
2001-05-07 22:35 ` Cort Dougan
2001-05-07 22:43 ` Eli Chen
2001-05-07 19:04 Eli Chen
2001-05-07 21:04 ` Dan Malek
2001-05-07 21:17 ` Dan Malek
2001-05-07 21:30 ` Tom Rini
2001-05-07 23:03 ` Dan Malek
2001-05-07 21:47 ` Eli Chen
2001-05-07 23:01 ` Dan Malek
2001-05-07 23:06 ` Gabriel Paubert
2001-05-07 23:15 ` Dan Malek
2001-05-07 23:28 ` Gabriel Paubert
2001-05-07 23:35 ` Eli Chen
2001-05-07 23:36 ` Dan Malek
2001-05-08 0:16 ` Eli Chen
2001-05-08 0:41 ` Dan Malek
2001-05-08 1:14 ` Eli Chen
2001-05-08 1:11 ` Dan Malek
2001-05-08 18:01 ` David Blythe
2001-05-08 20:27 ` Dan Malek
2001-05-08 21:34 ` David Blythe
2001-05-08 21:49 ` Dan Malek
2001-05-08 22:34 ` Ira Weiny
2001-05-08 22:53 ` Dan Malek
2001-05-08 1:37 ` Gabriel Paubert
2001-05-08 1:44 ` Dan Malek
2001-05-07 23:40 ` Gabriel Paubert
2001-05-07 17:21 Brian Kuschak
2001-05-07 20:58 ` Dan Malek
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=3AFAE7A0.AE936C64@mvista.com \
--to=frank_rowand@mvista.com \
--cc=brian.kuschak@skystream.com \
--cc=dan@mvista.com \
--cc=eli@routefree.com \
--cc=frowand@mvista.com \
--cc=linuxppc-embedded@lists.linuxppc.org \
--cc=paubert@iram.es \
/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;
as well as URLs for NNTP newsgroup(s).