> 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?