Messages in this thread | | | Date | Tue, 9 Aug 2016 14:00:00 -0400 | From | Waiman Long <> | Subject | Re: [PATCH v4 3/3] locking/mutex: Ensure forward progress of waiter-spinner |
| |
On 08/08/2016 01:37 PM, Peter Zijlstra wrote: > 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 was thinking about doing that. However, the owner field is used in quite a number of places. It may be a bit risky to change all of them.
> I'm not sure the 32bit platforms are going to be excited about growing > struct mutex...
Or we can make this a 64-bit architecture specific change if the increase in mutex size is a real concern. Actually, we don't need to use a list_head structure for wait_list. It can be just a pointer to mutex_waiter that has the list_head structure. This can save a pointer from the structure.
Cheers, Longman
| |