On Tue, Jun 04, 2019 at 01:06:11PM -0400, Waiman Long wrote: > On 6/4/19 1:02 PM, Peter Zijlstra wrote: > > On Tue, Jun 04, 2019 at 11:47:21AM -0400, Waiman Long wrote: > >> On 6/4/19 5:45 AM, Peter Zijlstra wrote: > >>> On Mon, May 20, 2019 at 04:59:16PM -0400, Waiman Long wrote: > >>>> With separate count and owner, there are timing windows where the two > >>>> values are inconsistent. That can cause problem when trying to figure > >>>> out the exact state of the rwsem. For instance, a RT task will stop > >>>> optimistic spinning if the lock is acquired by a writer but the owner > >>>> field isn't set yet. That can be solved by combining the count and > >>>> owner together in a single atomic value. > >>> I just realized we can use cmpxchg_double() here (where available of > >>> course). > >> Does the 2 doubles need to be 128-bit aligned to use cmpxchg_double()? I > >> don't think we can guarantee that unless we explicitly set this alignment. > > It does :/ and yes, we'd need to play games with __align(2*sizeof(long)) > > and such. > > So do you want this as an option now as it will be x86 specific? Or we > can do that as a follow-up if we want to.
x86, s390 and arm64 have cmpxchg_double(). I was going to have a look (but like I wrote, I'm pretty useless today so i didn't actually get anywhere) at the exact race that's a problem here and see if there's not another solution too.

