[PATCH v2 3/3] powerpc/spinlocks: Fix oops in shared-processor spinlocks
Christopher M Riedl
cmr at informatik.wtf
Sat Aug 3 01:12:04 AEST 2019
> On August 2, 2019 at 6:38 AM Michael Ellerman <mpe at ellerman.id.au> wrote:
>
>
> "Christopher M. Riedl" <cmr at informatik.wtf> writes:
> > diff --git a/arch/powerpc/include/asm/spinlock.h b/arch/powerpc/include/asm/spinlock.h
> > index 0a8270183770..6aed8a83b180 100644
> > --- a/arch/powerpc/include/asm/spinlock.h
> > +++ b/arch/powerpc/include/asm/spinlock.h
> > @@ -124,6 +122,22 @@ static inline bool is_shared_processor(void)
> > #endif
> > }
> >
> > +static inline void spin_yield(arch_spinlock_t *lock)
> > +{
> > + if (is_shared_processor())
> > + splpar_spin_yield(lock);
> > + else
> > + barrier();
> > +}
> ...
> > static inline void arch_spin_lock(arch_spinlock_t *lock)
> > {
> > while (1) {
> > @@ -132,7 +146,7 @@ static inline void arch_spin_lock(arch_spinlock_t *lock)
> > do {
> > HMT_low();
> > if (is_shared_processor())
> > - __spin_yield(lock);
> > + spin_yield(lock);
>
> This leaves us with a double test of is_shared_processor() doesn't it?
Yep, and that's no good. Hmm, executing the barrier() in the non-shared-processor
case probably hurts performance here?
More information about the Linuxppc-dev
mailing list