summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorDmitry Ilvokhin <d@ilvokhin.com>2026-06-04 07:15:06 +0000
committerPeter Zijlstra <peterz@infradead.org>2026-06-11 13:41:25 +0200
commit7cfa62cf9432df67b1c95a59984a03a3bc023f98 (patch)
tree7f6f150ec067fdd24a812f7ee88682d69fb0ecf7 /kernel
parent76080d81e511f66eeb094b204e1e217bff674922 (diff)
downloadlinux-next-7cfa62cf9432df67b1c95a59984a03a3bc023f98.tar.gz
linux-next-7cfa62cf9432df67b1c95a59984a03a3bc023f98.zip
locking/percpu-rwsem: Extract __percpu_up_read()
Move the percpu_up_read() slowpath out of the inline function into a new __percpu_up_read() to avoid binary size increase from adding a tracepoint to an inlined function. Signed-off-by: Dmitry Ilvokhin <d@ilvokhin.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Usama Arif <usama.arif@linux.dev> Link: https://patch.msgid.link/3dd2a1b9ab4f469e1892766cb63f41d6b0f53d29.1780506267.git.d@ilvokhin.com
Diffstat (limited to 'kernel')
-rw-r--r--kernel/locking/percpu-rwsem.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/kernel/locking/percpu-rwsem.c b/kernel/locking/percpu-rwsem.c
index ef234469baac..f3ee7a0d6047 100644
--- a/kernel/locking/percpu-rwsem.c
+++ b/kernel/locking/percpu-rwsem.c
@@ -288,3 +288,21 @@ void percpu_up_write(struct percpu_rw_semaphore *sem)
rcu_sync_exit(&sem->rss);
}
EXPORT_SYMBOL_GPL(percpu_up_write);
+
+void __percpu_up_read(struct percpu_rw_semaphore *sem)
+{
+ lockdep_assert_preemption_disabled();
+ /*
+ * slowpath; reader will only ever wake a single blocked
+ * writer.
+ */
+ smp_mb(); /* B matches C */
+ /*
+ * In other words, if they see our decrement (presumably to
+ * aggregate zero, as that is the only time it matters) they
+ * will also see our critical section.
+ */
+ this_cpu_dec(*sem->read_count);
+ rcuwait_wake_up(&sem->writer);
+}
+EXPORT_SYMBOL_GPL(__percpu_up_read);