Messages in this thread | | | Date | Tue, 06 Apr 2010 19:20:34 +0300 | From | Avi Kivity <> | Subject | Re: [PATCH V2 0/6][RFC] futex: FUTEX_LOCK with optional adaptive spinning |
| |
On 04/06/2010 07:14 PM, Thomas Gleixner wrote: > >> IMO the best solution is to spin in userspace while the lock holder is >> running, fall into the kernel when it is scheduled out. >> > That's just not realistic as user space has no idea whether the lock > holder is running or not and when it's scheduled out without a syscall :) >
The kernel could easily expose this information by writing into the thread's TLS area.
So:
- the kernel maintains a current_cpu field in a thread's tls - lock() atomically writes a pointer to the current thread's current_cpu when acquiring - the kernel writes an invalid value to current_cpu when switching out - a contended lock() retrieves the current_cpu pointer, and spins as long as it is a valid cpu
-- error compiling committee.c: too many arguments to function
| |