dcache BUG()

Gabriel Paubert paubert at iram.es
Fri May 11 04:49:44 EST 2001


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.

Did it actually have any effect on Brian's system ?

	Gabriel.


** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/






More information about the Linuxppc-embedded mailing list