On Mon, Jul 18, 2016 at 04:39:26PM -0400, Waiman Long wrote: > As both an optimistic spinner and a waiter-spinner (a woken task from > the wait queue spinning) can be spinning on the lock at the same time, > we cannot ensure forward progress for the waiter-spinner. Therefore, > it is possible for the waiter-spinner to be starved of getting the > lock, though not likely.
Right; yet your previous two changelogs/comments implied otherwise. > This patch adds a flag to indicate that a waiter-spinner is > spinning and hence has priority over the acquisition of the lock. A > waiter-spinner sets this flag while spinning. An optimistic spinner > will check this flag and yield if set. This essentially makes the > waiter-spinner jump to the head of the optimistic spinning queue to > acquire the lock. > > There will be no increase in size for the mutex structure for 64-bit > architectures. For 32-bit architectures, there will be a size increase > of 4 bytes. Alternative might be to use the LSB of mutex::owner, but that's going to be somewhat icky too. I'm not sure the 32bit platforms are going to be excited about growing struct mutex...