Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3013bf62 authored by Minchan Kim's avatar Minchan Kim Committed by Greg Kroah-Hartman
Browse files

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: default avatarMinchan Kim <minchan@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 7c11df42
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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);
	}