On Thu, 5 Jul 2018, Andrea Parri wrote: > > At any rate, it looks like instead of strengthening the relation, I > > should write a patch that removes it entirely. I also will add new, > > stronger relations for use with locking, essentially making spin_lock > > and spin_unlock be RCsc. > > Thank you. > > Ah let me put this forward: please keep an eye on the (generic) > > queued_spin_lock() > queued_spin_unlock() > > (just to point out an example). Their implementation (in part., > the fast-path) suggests that if we will stick to RCsc lock then > we should also stick to RCsc acq. load from RMW and rel. store.
A very good point. The implementation of those routines uses atomic_cmpxchg_acquire() to acquire the lock. Unless this is implemented with an operation or fence that provides write-write ordering (in conjunction with a suitable release), qspinlocks won't have the ordering properties that we want. I'm going to assume that the release operations used for unlocking don't need to have any extra properties; only the lock-acquire operations need to be special (i.e., stronger than a normal smp_load_acquire). This suggests that atomic RMW functions with acquire semantics should also use this stronger form of acquire. Does anybody have a different suggestion? Alan