Loading drivers/android/binder_alloc.c +10 −8 Original line number Diff line number Diff line Loading @@ -916,13 +916,14 @@ enum lru_status binder_alloc_free_page(struct list_head *item, index = page - alloc->pages; page_addr = (uintptr_t)alloc->buffer + index * PAGE_SIZE; mm = alloc->vma_vm_mm; if (!mmget_not_zero(mm)) vma = binder_alloc_get_vma(alloc); if (vma) { if (!mmget_not_zero(alloc->vma_vm_mm)) goto err_mmget; mm = alloc->vma_vm_mm; if (!down_write_trylock(&mm->mmap_sem)) goto err_down_write_mmap_sem_failed; vma = binder_alloc_get_vma(alloc); } list_lru_isolate(lru, item); spin_unlock(lock); Loading @@ -933,9 +934,10 @@ enum lru_status binder_alloc_free_page(struct list_head *item, zap_page_range(vma, page_addr, PAGE_SIZE); trace_binder_unmap_user_end(alloc, index); } up_write(&mm->mmap_sem); mmput(mm); } trace_binder_unmap_kernel_start(alloc, index); Loading Loading
drivers/android/binder_alloc.c +10 −8 Original line number Diff line number Diff line Loading @@ -916,13 +916,14 @@ enum lru_status binder_alloc_free_page(struct list_head *item, index = page - alloc->pages; page_addr = (uintptr_t)alloc->buffer + index * PAGE_SIZE; mm = alloc->vma_vm_mm; if (!mmget_not_zero(mm)) vma = binder_alloc_get_vma(alloc); if (vma) { if (!mmget_not_zero(alloc->vma_vm_mm)) goto err_mmget; mm = alloc->vma_vm_mm; if (!down_write_trylock(&mm->mmap_sem)) goto err_down_write_mmap_sem_failed; vma = binder_alloc_get_vma(alloc); } list_lru_isolate(lru, item); spin_unlock(lock); Loading @@ -933,9 +934,10 @@ enum lru_status binder_alloc_free_page(struct list_head *item, zap_page_range(vma, page_addr, PAGE_SIZE); trace_binder_unmap_user_end(alloc, index); } up_write(&mm->mmap_sem); mmput(mm); } trace_binder_unmap_kernel_start(alloc, index); Loading