On Fri, Mar 4, 2016 at 1:05 AM, Darren Hart <dvh...@infradead.org> wrote: > I thought I provided a corrected comment block.... maybe I didn't. We have > been > working on improving the futex documentation, so we're paying close attention > to > terminology as well as grammar. This one needs a couple minor tweaks. I > suggest: > > /* > * Use READ_ONCE to forbid the compiler from reloading q->lock_ptr and > * optimizing lock_ptr out of the logic below. > */ > > The bit about q->lock_ptr possibly changing is already covered by the large > comment block below the spin_lock(lock_ptr) call.
The large comment block is explaining the why the retry logic is required. To achieve this semantic requirement, the READ_ONCE is needed to prevent compiler optimizing it by doing double loads. So I think the comment above should explain this tricky part. > /* Use READ_ONCE to forbid the compiler from reloading q->lock_ptr in > spin_lock() */ And as for preventing from optimizing the lock_ptr out of the retry code block, I have consult Paul Mckenney, he suggests one more READ_ONCE should be added here: if (unlikely(lock_ptr != READ_ONCE(q->lock_ptr))) { <------------------------------ spin_unlock(lock_ptr); goto retry; } And I think this are two problem, and should be separated into two patches? Regards, Jianyu Zhan