> On August 2, 2019 at 6:38 AM Michael Ellerman <m...@ellerman.id.au> wrote:
> 
> 
> "Christopher M. Riedl" <c...@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?

Reply via email to