On Tue, May 31, 2016 at 11:41:37AM +0200, Peter Zijlstra wrote: [snip] > @@ -260,16 +260,6 @@ static void sem_rcu_free(struct rcu_head > } > > /* > - * spin_unlock_wait() and !spin_is_locked() are not memory barriers, they > - * are only control barriers. > - * The code must pair with spin_unlock(&sem->lock) or > - * spin_unlock(&sem_perm.lock), thus just the control barrier is insufficient. > - * > - * smp_rmb() is sufficient, as writes cannot pass the control barrier. > - */ > -#define ipc_smp_acquire__after_spin_is_unlocked() smp_rmb() > - > -/* > * Wait until all currently ongoing simple ops have completed. > * Caller must own sem_perm.lock. > * New simple ops cannot start, because simple ops first check > @@ -292,7 +282,7 @@ static void sem_wait_array(struct sem_ar > sem = sma->sem_base + i; > spin_unlock_wait(&sem->lock); > } > - ipc_smp_acquire__after_spin_is_unlocked(); > + smp_acquire__after_ctrl_dep(); I wonder whether we can kill this barrier after updating spin_unlock_wait() to ACQUIRE? Regards, Boqun > } > > /*
Attachment:
signature.asc
Description: PGP signature