On Fri, 2016-05-20 at 16:27 -0400, Waiman Long wrote: > On 05/19/2016 06:23 PM, Jason Low wrote: > > The mutex owner can get read and written to without the wait_lock. > > Use WRITE_ONCE when setting and clearing the owner field in order > > to avoid optimizations such as store tearing. This avoids > > situations where the owner field gets written to with multiple > > stores and another thread could concurrently read and use a > > partially written owner value. > > > > Signed-off-by: Jason Low<jason.l...@hpe.com> > > --- > > kernel/locking/mutex.h | 10 ++++++++-- > > 1 file changed, 8 insertions(+), 2 deletions(-) > > > > diff --git a/kernel/locking/mutex.h b/kernel/locking/mutex.h > > index 5cda397..469b61e 100644 > > --- a/kernel/locking/mutex.h > > +++ b/kernel/locking/mutex.h > > @@ -17,14 +17,20 @@ > > __list_del((waiter)->list.prev, (waiter)->list.next) > > > > #ifdef CONFIG_MUTEX_SPIN_ON_OWNER > > +/* > > + * The mutex owner can get read and written to locklessly. > > + * We should use WRITE_ONCE() when writing the owner value to > > + * avoid store tearing, otherwise, a thread could potentially > > + * read a partially written and incomplete owner value. > > + */ > > static inline void mutex_set_owner(struct mutex *lock) > > { > > - lock->owner = current; > > + WRITE_ONCE(lock->owner, current); > > } > > > > static inline void mutex_clear_owner(struct mutex *lock) > > { > > - lock->owner = NULL; > > + WRITE_ONCE(lock->owner, NULL); > > } > > #else > > static inline void mutex_set_owner(struct mutex *lock) > > I think mutex-debug.h also needs similar changes for completeness.
Good point, I will add the changes to those functions in the debug case to this patch. Thanks, Jason