diff options
| author | Dmitry Ilvokhin <d@ilvokhin.com> | 2026-06-04 07:15:06 +0000 |
|---|---|---|
| committer | Peter Zijlstra <peterz@infradead.org> | 2026-06-11 13:41:25 +0200 |
| commit | 7cfa62cf9432df67b1c95a59984a03a3bc023f98 (patch) | |
| tree | 7f6f150ec067fdd24a812f7ee88682d69fb0ecf7 /kernel | |
| parent | 76080d81e511f66eeb094b204e1e217bff674922 (diff) | |
| download | linux-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.c | 18 |
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); |
