diff --git a/patches.suse/locking-rwsem-Add-__always_inline-annotation-to-__do.patch b/patches.suse/locking-rwsem-Add-__always_inline-annotation-to-__do.patch new file mode 100644 index 0000000..c4aaebe --- /dev/null +++ b/patches.suse/locking-rwsem-Add-__always_inline-annotation-to-__do.patch @@ -0,0 +1,69 @@ +From 92cc5d00a431e96e5a49c0b97e5ad4fa7536bd4b Mon Sep 17 00:00:00 2001 +From: John Stultz +Date: Wed, 3 May 2023 02:33:51 +0000 +Subject: [PATCH] locking/rwsem: Add __always_inline annotation to + __down_read_common() and inlined callers +Git-commit: 92cc5d00a431e96e5a49c0b97e5ad4fa7536bd4b +Patch-mainline: v6.4-rc2 +References: git-fixes + +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 +Signed-off-by: John Stultz +Signed-off-by: Peter Zijlstra (Intel) +Reviewed-by: Waiman Long +Cc: stable@vger.kernel.org +Link: https://lkml.kernel.org/r/20230503023351.2832796-1-jstultz@google.com +Signed-off-by: Jiri Wiesner +--- + 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.35.3 + diff --git a/series.conf b/series.conf index ab45b54..16f1555 100644 --- a/series.conf +++ b/series.conf @@ -20108,6 +20108,7 @@ patches.suse/drm-amdgpu-disable-sdma-ecc-irq-only-when-sdma-RAS-i.patch patches.suse/drm-amdgpu-gfx-disable-gfx9-cp_ecc_error_irq-only-wh.patch patches.suse/fbdev-arcfb-Fix-error-handling-in-arcfb_probe.patch + patches.suse/locking-rwsem-Add-__always_inline-annotation-to-__do.patch patches.suse/ARM-9296-1-HP-Jornada-7XX-fix-kernel-doc-warnings.patch patches.suse/tpm-tpm_tis-Disable-interrupts-for-more-Lenovo-devic.patch patches.suse/selftests-sgx-Add-test_encl.elf-to-TEST_FILES.patch