[PATCH 01/17] powerpc/qspinlock: powerpc qspinlock implementation

Nicholas Piggin npiggin at gmail.com
Thu Nov 10 22:44:36 AEDT 2022


On Thu Nov 10, 2022 at 4:37 PM AEST, Christophe Leroy wrote:
>
>
> Le 10/11/2022 à 01:35, Jordan Niethe a écrit :
> > On Thu, 2022-07-28 at 16:31 +1000, Nicholas Piggin wrote:
> > <snip>
> >> -#define queued_spin_lock queued_spin_lock
> >>   
> >> -static inline void queued_spin_unlock(struct qspinlock *lock)
> >> +static __always_inline int queued_spin_trylock(struct qspinlock *lock)
> >>   {
> >> -	if (!IS_ENABLED(CONFIG_PARAVIRT_SPINLOCKS) || !is_shared_processor())
> >> -		smp_store_release(&lock->locked, 0);
> >> -	else
> >> -		__pv_queued_spin_unlock(lock);
> >> +	if (atomic_cmpxchg_acquire(&lock->val, 0, 1) == 0)
> >> +		return 1;
> >> +	return 0;
> > 
> > optional style nit: return (atomic_cmpxchg_acquire(&lock->val, 0, 1) == 0);
>
> No parenthesis.
> No == 0
>
> Should be :
>
> 	return !atomic_cmpxchg_acquire(&lock->val, 0, 1);

In this case I prefer the == 0 because we're testing against the 0 old
parameter being passed in. This is the recognisable cmpxchg pattern.

The other style of cmpxchg returns true if it succeeded, so it's less
clear we're not using that version if using !.

Thanks,
Nick


More information about the Linuxppc-dev mailing list