forked from mirrors/linux
		
	binder: reduce mmap_sem write-side lock
binder has used write-side mmap_sem semaphore to release memory mapped at address space of the process. However, right lock to release pages is down_read, not down_write because page table lock already protects the race for parallel freeing. Please do not use mmap_sem write-side lock which is well known contented lock. Cc: Todd Kjos <tkjos@google.com> Cc: Martijn Coenen <maco@android.com> Cc: Arve Hjønnevåg <arve@android.com> Signed-off-by: Minchan Kim <minchan@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									7c11df42d0
								
							
						
					
					
						commit
						3013bf62b6
					
				
					 1 changed files with 2 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -932,7 +932,7 @@ enum lru_status binder_alloc_free_page(struct list_head *item,
 | 
			
		|||
		if (!mmget_not_zero(alloc->vma_vm_mm))
 | 
			
		||||
			goto err_mmget;
 | 
			
		||||
		mm = alloc->vma_vm_mm;
 | 
			
		||||
		if (!down_write_trylock(&mm->mmap_sem))
 | 
			
		||||
		if (!down_read_trylock(&mm->mmap_sem))
 | 
			
		||||
			goto err_down_write_mmap_sem_failed;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -946,7 +946,7 @@ enum lru_status binder_alloc_free_page(struct list_head *item,
 | 
			
		|||
 | 
			
		||||
		trace_binder_unmap_user_end(alloc, index);
 | 
			
		||||
 | 
			
		||||
		up_write(&mm->mmap_sem);
 | 
			
		||||
		up_read(&mm->mmap_sem);
 | 
			
		||||
		mmput(mm);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue