|
Jiri Wiesner |
e0ba10 |
From 92cc5d00a431e96e5a49c0b97e5ad4fa7536bd4b Mon Sep 17 00:00:00 2001
|
|
Jiri Wiesner |
e0ba10 |
From: John Stultz <jstultz@google.com>
|
|
Jiri Wiesner |
e0ba10 |
Date: Wed, 3 May 2023 02:33:51 +0000
|
|
Jiri Wiesner |
e0ba10 |
Subject: [PATCH] locking/rwsem: Add __always_inline annotation to
|
|
Jiri Wiesner |
e0ba10 |
__down_read_common() and inlined callers
|
|
Jiri Wiesner |
e0ba10 |
Git-commit: 92cc5d00a431e96e5a49c0b97e5ad4fa7536bd4b
|
|
Jiri Wiesner |
e0ba10 |
Patch-mainline: v6.4-rc2
|
|
Jiri Wiesner |
e0ba10 |
References: git-fixes
|
|
Jiri Wiesner |
e0ba10 |
|
|
Jiri Wiesner |
e0ba10 |
Apparently despite it being marked inline, the compiler
|
|
Jiri Wiesner |
e0ba10 |
may not inline __down_read_common() which makes it difficult
|
|
Jiri Wiesner |
e0ba10 |
to identify the cause of lock contention, as the blocked
|
|
Jiri Wiesner |
e0ba10 |
function in traceevents will always be listed as
|
|
Jiri Wiesner |
e0ba10 |
__down_read_common().
|
|
Jiri Wiesner |
e0ba10 |
|
|
Jiri Wiesner |
e0ba10 |
So this patch adds __always_inline annotation to the common
|
|
Jiri Wiesner |
e0ba10 |
function (as well as the inlined helper callers) to force it to
|
|
Jiri Wiesner |
e0ba10 |
be inlined so the blocking function will be listed (via Wchan)
|
|
Jiri Wiesner |
e0ba10 |
in traceevents.
|
|
Jiri Wiesner |
e0ba10 |
|
|
Jiri Wiesner |
e0ba10 |
Fixes: c995e638ccbb ("locking/rwsem: Fold __down_{read,write}*()")
|
|
Jiri Wiesner |
e0ba10 |
Reported-by: Tim Murray <timmurray@google.com>
|
|
Jiri Wiesner |
e0ba10 |
Signed-off-by: John Stultz <jstultz@google.com>
|
|
Jiri Wiesner |
e0ba10 |
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
|
|
Jiri Wiesner |
e0ba10 |
Reviewed-by: Waiman Long <longman@redhat.com>
|
|
Jiri Wiesner |
e0ba10 |
Cc: stable@vger.kernel.org
|
|
Jiri Wiesner |
e0ba10 |
Link: https://lkml.kernel.org/r/20230503023351.2832796-1-jstultz@google.com
|
|
Jiri Wiesner |
e0ba10 |
Signed-off-by: Jiri Wiesner <jwiesner@suse.de>
|
|
Jiri Wiesner |
e0ba10 |
---
|
|
Jiri Wiesner |
e0ba10 |
kernel/locking/rwsem.c | 8 ++++----
|
|
Jiri Wiesner |
e0ba10 |
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
Jiri Wiesner |
e0ba10 |
|
|
Jiri Wiesner |
e0ba10 |
diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
|
|
Jiri Wiesner |
e0ba10 |
index acb5a50309a1..9eabd585ce7a 100644
|
|
Jiri Wiesner |
e0ba10 |
--- a/kernel/locking/rwsem.c
|
|
Jiri Wiesner |
e0ba10 |
+++ b/kernel/locking/rwsem.c
|
|
Jiri Wiesner |
e0ba10 |
@@ -1240,7 +1240,7 @@ static struct rw_semaphore *rwsem_downgrade_wake(struct rw_semaphore *sem)
|
|
Jiri Wiesner |
e0ba10 |
/*
|
|
Jiri Wiesner |
e0ba10 |
* lock for reading
|
|
Jiri Wiesner |
e0ba10 |
*/
|
|
Jiri Wiesner |
e0ba10 |
-static inline int __down_read_common(struct rw_semaphore *sem, int state)
|
|
Jiri Wiesner |
e0ba10 |
+static __always_inline int __down_read_common(struct rw_semaphore *sem, int state)
|
|
Jiri Wiesner |
e0ba10 |
{
|
|
Jiri Wiesner |
e0ba10 |
int ret = 0;
|
|
Jiri Wiesner |
e0ba10 |
long count;
|
|
Jiri Wiesner |
e0ba10 |
@@ -1258,17 +1258,17 @@ static inline int __down_read_common(struct rw_semaphore *sem, int state)
|
|
Jiri Wiesner |
e0ba10 |
return ret;
|
|
Jiri Wiesner |
e0ba10 |
}
|
|
Jiri Wiesner |
e0ba10 |
|
|
Jiri Wiesner |
e0ba10 |
-static inline void __down_read(struct rw_semaphore *sem)
|
|
Jiri Wiesner |
e0ba10 |
+static __always_inline void __down_read(struct rw_semaphore *sem)
|
|
Jiri Wiesner |
e0ba10 |
{
|
|
Jiri Wiesner |
e0ba10 |
__down_read_common(sem, TASK_UNINTERRUPTIBLE);
|
|
Jiri Wiesner |
e0ba10 |
}
|
|
Jiri Wiesner |
e0ba10 |
|
|
Jiri Wiesner |
e0ba10 |
-static inline int __down_read_interruptible(struct rw_semaphore *sem)
|
|
Jiri Wiesner |
e0ba10 |
+static __always_inline int __down_read_interruptible(struct rw_semaphore *sem)
|
|
Jiri Wiesner |
e0ba10 |
{
|
|
Jiri Wiesner |
e0ba10 |
return __down_read_common(sem, TASK_INTERRUPTIBLE);
|
|
Jiri Wiesner |
e0ba10 |
}
|
|
Jiri Wiesner |
e0ba10 |
|
|
Jiri Wiesner |
e0ba10 |
-static inline int __down_read_killable(struct rw_semaphore *sem)
|
|
Jiri Wiesner |
e0ba10 |
+static __always_inline int __down_read_killable(struct rw_semaphore *sem)
|
|
Jiri Wiesner |
e0ba10 |
{
|
|
Jiri Wiesner |
e0ba10 |
return __down_read_common(sem, TASK_KILLABLE);
|
|
Jiri Wiesner |
e0ba10 |
}
|
|
Jiri Wiesner |
e0ba10 |
--
|
|
Jiri Wiesner |
e0ba10 |
2.35.3
|
|
Jiri Wiesner |
e0ba10 |
|