From: Minchan Kim Date: Mon, 18 Feb 2019 08:11:45 +0000 (+0900) Subject: binder: reduce mmap_sem write-side lock X-Git-Tag: v5.1-rc1~147^2~48 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=3013bf62b67aef921bc2e9ba10e639a022002d02;p=uclinux-h8%2Flinux.git 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 Cc: Martijn Coenen Cc: Arve Hjønnevåg Signed-off-by: Minchan Kim Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c index 000dd4d145ba..6389467670a0 100644 --- a/drivers/android/binder_alloc.c +++ b/drivers/android/binder_alloc.c @@ -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); }