mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 02:21:52 +09:00
FROMGIT: 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:c995e638cc("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 Bug: 277817995 (cherry picked from commit92cc5d00a4https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking/urgent) Signed-off-by: John Stultz <jstultz@google.com> (cherry picked from https://android-review.googlesource.com/q/commit:a6c75b2e64573cb9f49f6b89808207856fc0309b) Merged-In: Ifad7ed7fe9f2d5a9eb0cfe7c35e45c0e86bc3ad4 Change-Id: Ifad7ed7fe9f2d5a9eb0cfe7c35e45c0e86bc3ad4
This commit is contained in:
committed by
Treehugger Robot
parent
952048f512
commit
da126f8d02
@@ -1291,7 +1291,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;
|
||||
@@ -1309,17 +1309,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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user