From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758209AbcK3VHx (ORCPT ); Wed, 30 Nov 2016 16:07:53 -0500 Received: from Galois.linutronix.de ([146.0.238.70]:55424 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754043AbcK3VHW (ORCPT ); Wed, 30 Nov 2016 16:07:22 -0500 Message-Id: <20161130210030.431379999@linutronix.de> User-Agent: quilt/0.63-1 Date: Wed, 30 Nov 2016 21:04:42 -0000 From: Thomas Gleixner To: LKML Cc: David Daney , Peter Zijlstra , Ingo Molnar , Steven Rostedt , Sebastian Siewior , Will Deacon , Mark Rutland Subject: [patch 2/4] rtmutex: Use READ_ONCE() in rt_mutex_owner() References: <20161130205431.629977871@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Disposition: inline; filename=rtmutex--Use-READ_ONCE---in-rt_mutex_owner--.patch Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org While debugging the rtmutex unlock vs. dequeue race Will suggested to use READ_ONCE() in rt_mutex_owner() as it might race against the cmpxchg_release() in unlock_rt_mutex_safe(). Will: "It's a minor thing which will most likely not matter in practice" Careful search did not unearth an actual problem in todays code, but it's better to be safe than surprised. Suggested-by: Will Deacon Signed-off-by: Thomas Gleixner --- kernel/locking/rtmutex_common.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) --- a/kernel/locking/rtmutex_common.h +++ b/kernel/locking/rtmutex_common.h @@ -75,8 +75,9 @@ task_top_pi_waiter(struct task_struct *p static inline struct task_struct *rt_mutex_owner(struct rt_mutex *lock) { - return (struct task_struct *) - ((unsigned long)lock->owner & ~RT_MUTEX_OWNER_MASKALL); + unsigned long owner = (unsigned long) READ_ONCE(lock->owner); + + return (struct task_struct *) (owner & ~RT_MUTEX_OWNER_MASKALL); } /*