[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <1581693439-33092-2-git-send-email-alex.shi@linux.alibaba.com>
Date: Fri, 14 Feb 2020 23:17:19 +0800
From: Alex Shi <alex.shi@...ux.alibaba.com>
To: unlisted-recipients:; (no To-header on input)
Cc: Thomas Gleixner <tglx@...utronix.de>,
Davidlohr Bueso <dave@...olabs.net>,
Ingo Molnar <mingo@...hat.com>, Will Deacon <will@...nel.org>,
linux-kernel@...r.kernel.org
Subject: [PATCH 2/2] locking/rtmutex: optimize rt_mutex_cmpxchgs
Checking l->owner first to skip time cost cmpxchgs.
Suggested-by: Davidlohr Bueso <dave@...olabs.net>
Signed-off-by: Alex Shi <alex.shi@...ux.alibaba.com>
Cc: Thomas Gleixner <tglx@...utronix.de>
Cc: Davidlohr Bueso <dave@...olabs.net>
Cc: Ingo Molnar <mingo@...hat.com>
Cc: Will Deacon <will@...nel.org>
Cc: linux-kernel@...r.kernel.org
---
kernel/locking/rtmutex.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c
index 7ad22eade1cc..e8df466af8ab 100644
--- a/kernel/locking/rtmutex.c
+++ b/kernel/locking/rtmutex.c
@@ -141,8 +141,10 @@ static void fixup_rt_mutex_waiters(struct rt_mutex *lock)
* set up.
*/
#ifndef CONFIG_DEBUG_RT_MUTEXES
-# define rt_mutex_cmpxchg_acquire(l,c,n) (cmpxchg_acquire(&l->owner, c, n) == c)
-# define rt_mutex_cmpxchg_release(l,c,n) (cmpxchg_release(&l->owner, c, n) == c)
+# define rt_mutex_cmpxchg_acquire(l, c, n) \
+ (l->owner == c && cmpxchg_acquire(&l->owner, c, n) == c)
+# define rt_mutex_cmpxchg_release(l, c, n) \
+ (l->owner == c && cmpxchg_release(&l->owner, c, n) == c)
/*
* Callers must hold the ->wait_lock -- which is the whole purpose as we force
--
1.8.3.1
Powered by blists - more mailing lists