mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	Several files under Documentation/*.txt describe some type of locking API. Move them to locking/ subdir and add to the locking/index.rst index file. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Link: https://lore.kernel.org/r/dd833a10bbd0b2c1461d78913f5ec28a7e27f00b.1588345503.git.mchehab+huawei@kernel.org Signed-off-by: Jonathan Corbet <corbet@lwn.net>
		
			
				
	
	
		
			28 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
====================
 | 
						|
Percpu rw semaphores
 | 
						|
====================
 | 
						|
 | 
						|
Percpu rw semaphores is a new read-write semaphore design that is
 | 
						|
optimized for locking for reading.
 | 
						|
 | 
						|
The problem with traditional read-write semaphores is that when multiple
 | 
						|
cores take the lock for reading, the cache line containing the semaphore
 | 
						|
is bouncing between L1 caches of the cores, causing performance
 | 
						|
degradation.
 | 
						|
 | 
						|
Locking for reading is very fast, it uses RCU and it avoids any atomic
 | 
						|
instruction in the lock and unlock path. On the other hand, locking for
 | 
						|
writing is very expensive, it calls synchronize_rcu() that can take
 | 
						|
hundreds of milliseconds.
 | 
						|
 | 
						|
The lock is declared with "struct percpu_rw_semaphore" type.
 | 
						|
The lock is initialized percpu_init_rwsem, it returns 0 on success and
 | 
						|
-ENOMEM on allocation failure.
 | 
						|
The lock must be freed with percpu_free_rwsem to avoid memory leak.
 | 
						|
 | 
						|
The lock is locked for read with percpu_down_read, percpu_up_read and
 | 
						|
for write with percpu_down_write, percpu_up_write.
 | 
						|
 | 
						|
The idea of using RCU for optimized rw-lock was introduced by
 | 
						|
Eric Dumazet <eric.dumazet@gmail.com>.
 | 
						|
The code was written by Mikulas Patocka <mpatocka@redhat.com>
 |