All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] locking/rwsem: Add __always_inline annotation to __down_read_common() and inlined callers
@ 2023-05-03  2:33 John Stultz
  2023-05-08  8:23 ` Peter Zijlstra
  2023-05-10 13:25 ` [tip: locking/urgent] " tip-bot2 for John Stultz
  0 siblings, 2 replies; 3+ messages in thread
From: John Stultz @ 2023-05-03  2:33 UTC (permalink / raw)
  To: LKML
  Cc: John Stultz, Minchan Kim, Tim Murray, Peter Zijlstra,
	Ingo Molnar, Will Deacon, Waiman Long, Boqun Feng, kernel-team,
	stable

Apparently despite it being marked inline, the compiler
may not inline __down_read_common() which makes it difficult
to identify the cause of lock contention, as the blocked
function in traceevents will always be listed as
__down_read_common().

So this patch adds __always_inline annotation to the common
function (as well as the inlined helper callers) to force it to
be inlined so the blocking function will be listed (via Wchan)
in traceevents.

Cc: Minchan Kim <minchan@kernel.org>
Cc: Tim Murray <timmurray@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Will Deacon <will@kernel.org>
Cc: Waiman Long <longman@redhat.com>
Cc: Boqun Feng <boqun.feng@gmail.com>
Cc: kernel-team@android.com
Cc: stable@vger.kernel.org
Fixes: c995e638ccbb ("locking/rwsem: Fold __down_{read,write}*()")
Reviewed-by: Waiman Long <longman@redhat.com>
Reported-by: Tim Murray <timmurray@google.com>
Signed-off-by: John Stultz <jstultz@google.com>
---
v2: Reworked to use __always_inline instead of __sched as
    suggested by Waiman Long

v3: Add __always_inline annotations to currently inlined users
    of __down_read_common() to avoid the compiler later doing the
    same thing there. (Suggested by Peter).
---
 kernel/locking/rwsem.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
index acb5a50309a1..9eabd585ce7a 100644
--- a/kernel/locking/rwsem.c
+++ b/kernel/locking/rwsem.c
@@ -1240,7 +1240,7 @@ static struct rw_semaphore *rwsem_downgrade_wake(struct rw_semaphore *sem)
 /*
  * lock for reading
  */
-static inline int __down_read_common(struct rw_semaphore *sem, int state)
+static __always_inline int __down_read_common(struct rw_semaphore *sem, int state)
 {
 	int ret = 0;
 	long count;
@@ -1258,17 +1258,17 @@ static inline int __down_read_common(struct rw_semaphore *sem, int state)
 	return ret;
 }
 
-static inline void __down_read(struct rw_semaphore *sem)
+static __always_inline void __down_read(struct rw_semaphore *sem)
 {
 	__down_read_common(sem, TASK_UNINTERRUPTIBLE);
 }
 
-static inline int __down_read_interruptible(struct rw_semaphore *sem)
+static __always_inline int __down_read_interruptible(struct rw_semaphore *sem)
 {
 	return __down_read_common(sem, TASK_INTERRUPTIBLE);
 }
 
-static inline int __down_read_killable(struct rw_semaphore *sem)
+static __always_inline int __down_read_killable(struct rw_semaphore *sem)
 {
 	return __down_read_common(sem, TASK_KILLABLE);
 }
-- 
2.40.1.495.gc816e09b53d-goog


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] locking/rwsem: Add __always_inline annotation to __down_read_common() and inlined callers
  2023-05-03  2:33 [PATCH v3] locking/rwsem: Add __always_inline annotation to __down_read_common() and inlined callers John Stultz
@ 2023-05-08  8:23 ` Peter Zijlstra
  2023-05-10 13:25 ` [tip: locking/urgent] " tip-bot2 for John Stultz
  1 sibling, 0 replies; 3+ messages in thread
From: Peter Zijlstra @ 2023-05-08  8:23 UTC (permalink / raw)
  To: John Stultz
  Cc: LKML, Minchan Kim, Tim Murray, Ingo Molnar, Will Deacon,
	Waiman Long, Boqun Feng, kernel-team, stable

On Wed, May 03, 2023 at 02:33:51AM +0000, John Stultz wrote:
> Apparently despite it being marked inline, the compiler
> may not inline __down_read_common() which makes it difficult
> to identify the cause of lock contention, as the blocked
> function in traceevents will always be listed as
> __down_read_common().
> 
> So this patch adds __always_inline annotation to the common
> function (as well as the inlined helper callers) to force it to
> be inlined so the blocking function will be listed (via Wchan)
> in traceevents.
> 
> Cc: Minchan Kim <minchan@kernel.org>
> Cc: Tim Murray <timmurray@google.com>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: Will Deacon <will@kernel.org>
> Cc: Waiman Long <longman@redhat.com>
> Cc: Boqun Feng <boqun.feng@gmail.com>
> Cc: kernel-team@android.com
> Cc: stable@vger.kernel.org
> Fixes: c995e638ccbb ("locking/rwsem: Fold __down_{read,write}*()")
> Reviewed-by: Waiman Long <longman@redhat.com>
> Reported-by: Tim Murray <timmurray@google.com>
> Signed-off-by: John Stultz <jstultz@google.com>

Thanks!

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [tip: locking/urgent] locking/rwsem: Add __always_inline annotation to __down_read_common() and inlined callers
  2023-05-03  2:33 [PATCH v3] locking/rwsem: Add __always_inline annotation to __down_read_common() and inlined callers John Stultz
  2023-05-08  8:23 ` Peter Zijlstra
@ 2023-05-10 13:25 ` tip-bot2 for John Stultz
  1 sibling, 0 replies; 3+ messages in thread
From: tip-bot2 for John Stultz @ 2023-05-10 13:25 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Tim Murray, John Stultz, Peter Zijlstra (Intel),
	Waiman Long, stable, x86, linux-kernel

The following commit has been merged into the locking/urgent branch of tip:

Commit-ID:     92cc5d00a431e96e5a49c0b97e5ad4fa7536bd4b
Gitweb:        https://git.kernel.org/tip/92cc5d00a431e96e5a49c0b97e5ad4fa7536bd4b
Author:        John Stultz <jstultz@google.com>
AuthorDate:    Wed, 03 May 2023 02:33:51 
Committer:     Peter Zijlstra <peterz@infradead.org>
CommitterDate: Mon, 08 May 2023 10:58:24 +02:00

locking/rwsem: Add __always_inline annotation to __down_read_common() and inlined callers

Apparently despite it being marked inline, the compiler
may not inline __down_read_common() which makes it difficult
to identify the cause of lock contention, as the blocked
function in traceevents will always be listed as
__down_read_common().

So this patch adds __always_inline annotation to the common
function (as well as the inlined helper callers) to force it to
be inlined so the blocking function will be listed (via Wchan)
in traceevents.

Fixes: c995e638ccbb ("locking/rwsem: Fold __down_{read,write}*()")
Reported-by: Tim Murray <timmurray@google.com>
Signed-off-by: John Stultz <jstultz@google.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Waiman Long <longman@redhat.com>
Cc: stable@vger.kernel.org
Link: https://lkml.kernel.org/r/20230503023351.2832796-1-jstultz@google.com
---
 kernel/locking/rwsem.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
index acb5a50..9eabd58 100644
--- a/kernel/locking/rwsem.c
+++ b/kernel/locking/rwsem.c
@@ -1240,7 +1240,7 @@ static struct rw_semaphore *rwsem_downgrade_wake(struct rw_semaphore *sem)
 /*
  * lock for reading
  */
-static inline int __down_read_common(struct rw_semaphore *sem, int state)
+static __always_inline int __down_read_common(struct rw_semaphore *sem, int state)
 {
 	int ret = 0;
 	long count;
@@ -1258,17 +1258,17 @@ out:
 	return ret;
 }
 
-static inline void __down_read(struct rw_semaphore *sem)
+static __always_inline void __down_read(struct rw_semaphore *sem)
 {
 	__down_read_common(sem, TASK_UNINTERRUPTIBLE);
 }
 
-static inline int __down_read_interruptible(struct rw_semaphore *sem)
+static __always_inline int __down_read_interruptible(struct rw_semaphore *sem)
 {
 	return __down_read_common(sem, TASK_INTERRUPTIBLE);
 }
 
-static inline int __down_read_killable(struct rw_semaphore *sem)
+static __always_inline int __down_read_killable(struct rw_semaphore *sem)
 {
 	return __down_read_common(sem, TASK_KILLABLE);
 }

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-05-10 13:26 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-03  2:33 [PATCH v3] locking/rwsem: Add __always_inline annotation to __down_read_common() and inlined callers John Stultz
2023-05-08  8:23 ` Peter Zijlstra
2023-05-10 13:25 ` [tip: locking/urgent] " tip-bot2 for John Stultz

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.