[PATCH v2 3/3] powerpc/spinlocks: Fix oops in shared-processor spinlocks

Michael Ellerman mpe at ellerman.id.au
Fri Aug 2 21:38:43 AEST 2019


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

cheers


More information about the Linuxppc-dev mailing list