On 08/23/2016 08:46 AM, Peter Zijlstra wrote:
/* * Simple, straightforward mutexes with strict semantics: @@ -48,13 +49,9 @@ * locks and tasks (and only those tasks) */ struct mutex { - /* 1: unlocked, 0: locked, negative: locked, possible waiters */ - atomic_t count; + atomic_long_t owner; spinlock_t wait_lock; struct list_head wait_list; -#if defined(CONFIG_DEBUG_MUTEXES) || defined(CONFIG_MUTEX_SPIN_ON_OWNER) - struct task_struct *owner; -#endif #ifdef CONFIG_MUTEX_SPIN_ON_OWNER struct optimistic_spin_queue osq; /* Spinner MCS lock */ #endif
I think you should put the wait_lock and osq next to each other to save 8 bytes in space on 64-bit machines.
Cheers, Longman