Lines Matching refs:node

333 #define binder_node_lock(node) _binder_node_lock(node, __LINE__)  argument
335 _binder_node_lock(struct binder_node *node, int line) in _binder_node_lock() argument
336 __acquires(&node->lock) in _binder_node_lock()
340 spin_lock(&node->lock); in _binder_node_lock()
349 #define binder_node_unlock(node) _binder_node_unlock(node, __LINE__) argument
351 _binder_node_unlock(struct binder_node *node, int line) in _binder_node_unlock() argument
352 __releases(&node->lock) in _binder_node_unlock()
356 spin_unlock(&node->lock); in _binder_node_unlock()
366 #define binder_node_inner_lock(node) _binder_node_inner_lock(node, __LINE__) argument
368 _binder_node_inner_lock(struct binder_node *node, int line) in _binder_node_inner_lock() argument
369 __acquires(&node->lock) __acquires(&node->proc->inner_lock) in _binder_node_inner_lock()
373 spin_lock(&node->lock); in _binder_node_inner_lock()
374 if (node->proc) in _binder_node_inner_lock()
375 binder_inner_proc_lock(node->proc); in _binder_node_inner_lock()
378 __acquire(&node->proc->inner_lock); in _binder_node_inner_lock()
387 #define binder_node_inner_unlock(node) _binder_node_inner_unlock(node, __LINE__) argument
389 _binder_node_inner_unlock(struct binder_node *node, int line) in _binder_node_inner_unlock() argument
390 __releases(&node->lock) __releases(&node->proc->inner_lock) in _binder_node_inner_unlock()
392 struct binder_proc *proc = node->proc; in _binder_node_inner_unlock()
400 __release(&node->proc->inner_lock); in _binder_node_inner_unlock()
401 spin_unlock(&node->lock); in _binder_node_inner_unlock()
548 static void binder_inc_node_tmpref_ilocked(struct binder_node *node);
697 struct binder_node *node; in binder_get_node_ilocked() local
702 node = rb_entry(n, struct binder_node, rb_node); in binder_get_node_ilocked()
704 if (ptr < node->ptr) in binder_get_node_ilocked()
706 else if (ptr > node->ptr) in binder_get_node_ilocked()
714 binder_inc_node_tmpref_ilocked(node); in binder_get_node_ilocked()
715 return node; in binder_get_node_ilocked()
724 struct binder_node *node; in binder_get_node() local
727 node = binder_get_node_ilocked(proc, ptr); in binder_get_node()
729 return node; in binder_get_node()
739 struct binder_node *node; in binder_init_node_ilocked() local
749 node = rb_entry(parent, struct binder_node, rb_node); in binder_init_node_ilocked()
751 if (ptr < node->ptr) in binder_init_node_ilocked()
753 else if (ptr > node->ptr) in binder_init_node_ilocked()
761 binder_inc_node_tmpref_ilocked(node); in binder_init_node_ilocked()
762 return node; in binder_init_node_ilocked()
765 node = new_node; in binder_init_node_ilocked()
767 node->tmp_refs++; in binder_init_node_ilocked()
768 rb_link_node(&node->rb_node, parent, p); in binder_init_node_ilocked()
769 rb_insert_color(&node->rb_node, &proc->nodes); in binder_init_node_ilocked()
770 node->debug_id = atomic_inc_return(&binder_last_id); in binder_init_node_ilocked()
771 node->proc = proc; in binder_init_node_ilocked()
772 node->ptr = ptr; in binder_init_node_ilocked()
773 node->cookie = cookie; in binder_init_node_ilocked()
774 node->work.type = BINDER_WORK_NODE; in binder_init_node_ilocked()
775 node->min_priority = flags & FLAT_BINDER_FLAG_PRIORITY_MASK; in binder_init_node_ilocked()
776 node->accept_fds = !!(flags & FLAT_BINDER_FLAG_ACCEPTS_FDS); in binder_init_node_ilocked()
777 node->txn_security_ctx = !!(flags & FLAT_BINDER_FLAG_TXN_SECURITY_CTX); in binder_init_node_ilocked()
778 spin_lock_init(&node->lock); in binder_init_node_ilocked()
779 INIT_LIST_HEAD(&node->work.entry); in binder_init_node_ilocked()
780 INIT_LIST_HEAD(&node->async_todo); in binder_init_node_ilocked()
783 proc->pid, current->pid, node->debug_id, in binder_init_node_ilocked()
784 (u64)node->ptr, (u64)node->cookie); in binder_init_node_ilocked()
786 return node; in binder_init_node_ilocked()
792 struct binder_node *node; in binder_new_node() local
793 struct binder_node *new_node = kzalloc(sizeof(*node), GFP_KERNEL); in binder_new_node()
798 node = binder_init_node_ilocked(proc, new_node, fp); in binder_new_node()
800 if (node != new_node) in binder_new_node()
806 return node; in binder_new_node()
809 static void binder_free_node(struct binder_node *node) in binder_free_node() argument
811 kfree(node); in binder_free_node()
815 static int binder_inc_node_nilocked(struct binder_node *node, int strong, in binder_inc_node_nilocked() argument
819 struct binder_proc *proc = node->proc; in binder_inc_node_nilocked()
821 assert_spin_locked(&node->lock); in binder_inc_node_nilocked()
827 node->internal_strong_refs == 0 && in binder_inc_node_nilocked()
828 !(node->proc && in binder_inc_node_nilocked()
829 node == node->proc->context->binder_context_mgr_node && in binder_inc_node_nilocked()
830 node->has_strong_ref)) { in binder_inc_node_nilocked()
832 node->debug_id); in binder_inc_node_nilocked()
835 node->internal_strong_refs++; in binder_inc_node_nilocked()
837 node->local_strong_refs++; in binder_inc_node_nilocked()
838 if (!node->has_strong_ref && target_list) { in binder_inc_node_nilocked()
841 binder_dequeue_work_ilocked(&node->work); in binder_inc_node_nilocked()
844 &node->work); in binder_inc_node_nilocked()
848 node->local_weak_refs++; in binder_inc_node_nilocked()
849 if (!node->has_weak_ref && list_empty(&node->work.entry)) { in binder_inc_node_nilocked()
852 node->debug_id); in binder_inc_node_nilocked()
858 binder_enqueue_work_ilocked(&node->work, target_list); in binder_inc_node_nilocked()
864 static int binder_inc_node(struct binder_node *node, int strong, int internal, in binder_inc_node() argument
869 binder_node_inner_lock(node); in binder_inc_node()
870 ret = binder_inc_node_nilocked(node, strong, internal, target_list); in binder_inc_node()
871 binder_node_inner_unlock(node); in binder_inc_node()
876 static bool binder_dec_node_nilocked(struct binder_node *node, in binder_dec_node_nilocked() argument
879 struct binder_proc *proc = node->proc; in binder_dec_node_nilocked()
881 assert_spin_locked(&node->lock); in binder_dec_node_nilocked()
886 node->internal_strong_refs--; in binder_dec_node_nilocked()
888 node->local_strong_refs--; in binder_dec_node_nilocked()
889 if (node->local_strong_refs || node->internal_strong_refs) in binder_dec_node_nilocked()
893 node->local_weak_refs--; in binder_dec_node_nilocked()
894 if (node->local_weak_refs || node->tmp_refs || in binder_dec_node_nilocked()
895 !hlist_empty(&node->refs)) in binder_dec_node_nilocked()
899 if (proc && (node->has_strong_ref || node->has_weak_ref)) { in binder_dec_node_nilocked()
900 if (list_empty(&node->work.entry)) { in binder_dec_node_nilocked()
901 binder_enqueue_work_ilocked(&node->work, &proc->todo); in binder_dec_node_nilocked()
905 if (hlist_empty(&node->refs) && !node->local_strong_refs && in binder_dec_node_nilocked()
906 !node->local_weak_refs && !node->tmp_refs) { in binder_dec_node_nilocked()
908 binder_dequeue_work_ilocked(&node->work); in binder_dec_node_nilocked()
909 rb_erase(&node->rb_node, &proc->nodes); in binder_dec_node_nilocked()
912 node->debug_id); in binder_dec_node_nilocked()
914 BUG_ON(!list_empty(&node->work.entry)); in binder_dec_node_nilocked()
920 if (node->tmp_refs) { in binder_dec_node_nilocked()
924 hlist_del(&node->dead_node); in binder_dec_node_nilocked()
928 node->debug_id); in binder_dec_node_nilocked()
936 static void binder_dec_node(struct binder_node *node, int strong, int internal) in binder_dec_node() argument
940 binder_node_inner_lock(node); in binder_dec_node()
941 free_node = binder_dec_node_nilocked(node, strong, internal); in binder_dec_node()
942 binder_node_inner_unlock(node); in binder_dec_node()
944 binder_free_node(node); in binder_dec_node()
947 static void binder_inc_node_tmpref_ilocked(struct binder_node *node) in binder_inc_node_tmpref_ilocked() argument
954 node->tmp_refs++; in binder_inc_node_tmpref_ilocked()
970 static void binder_inc_node_tmpref(struct binder_node *node) in binder_inc_node_tmpref() argument
972 binder_node_lock(node); in binder_inc_node_tmpref()
973 if (node->proc) in binder_inc_node_tmpref()
974 binder_inner_proc_lock(node->proc); in binder_inc_node_tmpref()
977 binder_inc_node_tmpref_ilocked(node); in binder_inc_node_tmpref()
978 if (node->proc) in binder_inc_node_tmpref()
979 binder_inner_proc_unlock(node->proc); in binder_inc_node_tmpref()
982 binder_node_unlock(node); in binder_inc_node_tmpref()
991 static void binder_dec_node_tmpref(struct binder_node *node) in binder_dec_node_tmpref() argument
995 binder_node_inner_lock(node); in binder_dec_node_tmpref()
996 if (!node->proc) in binder_dec_node_tmpref()
1000 node->tmp_refs--; in binder_dec_node_tmpref()
1001 BUG_ON(node->tmp_refs < 0); in binder_dec_node_tmpref()
1002 if (!node->proc) in binder_dec_node_tmpref()
1012 free_node = binder_dec_node_nilocked(node, 0, 1); in binder_dec_node_tmpref()
1013 binder_node_inner_unlock(node); in binder_dec_node_tmpref()
1015 binder_free_node(node); in binder_dec_node_tmpref()
1018 static void binder_put_node(struct binder_node *node) in binder_put_node() argument
1020 binder_dec_node_tmpref(node); in binder_put_node()
1070 struct binder_node *node, in get_ref_desc_olocked() argument
1078 offset = (node == proc->context->binder_context_mgr_node) ? 0 : 1; in get_ref_desc_olocked()
1123 struct binder_node *node, in binder_get_ref_for_node_olocked() argument
1138 if (node < ref->node) in binder_get_ref_for_node_olocked()
1140 else if (node > ref->node) in binder_get_ref_for_node_olocked()
1149 if (get_ref_desc_olocked(proc, node, &desc) == -EAGAIN) in binder_get_ref_for_node_olocked()
1155 new_ref->node = node; in binder_get_ref_for_node_olocked()
1175 binder_node_lock(node); in binder_get_ref_for_node_olocked()
1176 hlist_add_head(&new_ref->node_entry, &node->refs); in binder_get_ref_for_node_olocked()
1181 node->debug_id); in binder_get_ref_for_node_olocked()
1182 binder_node_unlock(node); in binder_get_ref_for_node_olocked()
1194 ref->node->debug_id); in binder_cleanup_ref_olocked()
1201 binder_node_inner_lock(ref->node); in binder_cleanup_ref_olocked()
1203 binder_dec_node_nilocked(ref->node, 1, 1); in binder_cleanup_ref_olocked()
1206 delete_node = binder_dec_node_nilocked(ref->node, 0, 1); in binder_cleanup_ref_olocked()
1207 binder_node_inner_unlock(ref->node); in binder_cleanup_ref_olocked()
1217 ref->node = NULL; in binder_cleanup_ref_olocked()
1254 ret = binder_inc_node(ref->node, 1, 1, target_list); in binder_inc_ref_olocked()
1261 ret = binder_inc_node(ref->node, 0, 1, target_list); in binder_inc_ref_olocked()
1291 binder_dec_node(ref->node, strong, 1); in binder_dec_ref_olocked()
1325 struct binder_node *node; in binder_get_node_from_ref() local
1332 node = ref->node; in binder_get_node_from_ref()
1337 binder_inc_node_tmpref(node); in binder_get_node_from_ref()
1342 return node; in binder_get_node_from_ref()
1358 if (ref->node) in binder_free_ref()
1359 binder_free_node(ref->node); in binder_free_ref()
1463 struct binder_node *node, in binder_inc_ref_for_node() argument
1473 ref = binder_get_ref_for_node_olocked(proc, node, NULL); in binder_inc_ref_for_node()
1480 ref = binder_get_ref_for_node_olocked(proc, node, new_ref); in binder_inc_ref_for_node()
2074 struct binder_node *node; in binder_transaction_buffer_release() local
2077 node = binder_get_node(proc, fp->binder); in binder_transaction_buffer_release()
2078 if (node == NULL) { in binder_transaction_buffer_release()
2085 node->debug_id, (u64)node->ptr); in binder_transaction_buffer_release()
2086 binder_dec_node(node, hdr->type == BINDER_TYPE_BINDER, in binder_transaction_buffer_release()
2088 binder_put_node(node); in binder_transaction_buffer_release()
2229 struct binder_node *node; in binder_translate_binder() local
2235 node = binder_get_node(proc, fp->binder); in binder_translate_binder()
2236 if (!node) { in binder_translate_binder()
2237 node = binder_new_node(proc, fp); in binder_translate_binder()
2238 if (!node) in binder_translate_binder()
2241 if (fp->cookie != node->cookie) { in binder_translate_binder()
2244 node->debug_id, (u64)fp->cookie, in binder_translate_binder()
2245 (u64)node->cookie); in binder_translate_binder()
2254 ret = binder_inc_ref_for_node(target_proc, node, in binder_translate_binder()
2268 trace_binder_transaction_node_to_ref(t, node, &rdata); in binder_translate_binder()
2271 node->debug_id, (u64)node->ptr, in binder_translate_binder()
2274 binder_put_node(node); in binder_translate_binder()
2284 struct binder_node *node; in binder_translate_handle() local
2288 node = binder_get_node_from_ref(proc, fp->handle, in binder_translate_handle()
2290 if (!node) { in binder_translate_handle()
2300 binder_node_lock(node); in binder_translate_handle()
2301 if (node->proc == target_proc) { in binder_translate_handle()
2306 fp->binder = node->ptr; in binder_translate_handle()
2307 fp->cookie = node->cookie; in binder_translate_handle()
2308 if (node->proc) in binder_translate_handle()
2309 binder_inner_proc_lock(node->proc); in binder_translate_handle()
2311 __acquire(&node->proc->inner_lock); in binder_translate_handle()
2312 binder_inc_node_nilocked(node, in binder_translate_handle()
2315 if (node->proc) in binder_translate_handle()
2316 binder_inner_proc_unlock(node->proc); in binder_translate_handle()
2318 __release(&node->proc->inner_lock); in binder_translate_handle()
2319 trace_binder_transaction_ref_to_node(t, node, &src_rdata); in binder_translate_handle()
2322 src_rdata.debug_id, src_rdata.desc, node->debug_id, in binder_translate_handle()
2323 (u64)node->ptr); in binder_translate_handle()
2324 binder_node_unlock(node); in binder_translate_handle()
2328 binder_node_unlock(node); in binder_translate_handle()
2329 ret = binder_inc_ref_for_node(target_proc, node, in binder_translate_handle()
2338 trace_binder_transaction_ref_to_ref(t, node, &src_rdata, in binder_translate_handle()
2344 node->debug_id); in binder_translate_handle()
2347 binder_put_node(node); in binder_translate_handle()
2432 struct list_head node; member
2452 struct list_head node; member
2480 node); in binder_do_deferred_txn_copies()
2482 list_for_each_entry_safe(sgc, tmpsgc, sgc_head, node) { in binder_do_deferred_txn_copies()
2523 list_del(&pf->node); in binder_do_deferred_txn_copies()
2526 struct binder_ptr_fixup, node); in binder_do_deferred_txn_copies()
2529 list_del(&sgc->node); in binder_do_deferred_txn_copies()
2532 list_for_each_entry_safe(pf, tmppf, pf_head, node) { in binder_do_deferred_txn_copies()
2534 list_del(&pf->node); in binder_do_deferred_txn_copies()
2556 list_for_each_entry_safe(sgc, tmpsgc, sgc_head, node) { in binder_cleanup_deferred_txn_lists()
2557 list_del(&sgc->node); in binder_cleanup_deferred_txn_lists()
2560 list_for_each_entry_safe(pf, tmppf, pf_head, node) { in binder_cleanup_deferred_txn_lists()
2561 list_del(&pf->node); in binder_cleanup_deferred_txn_lists()
2595 INIT_LIST_HEAD(&bc->node); in binder_defer_copy()
2601 list_add_tail(&bc->node, sgc_head); in binder_defer_copy()
2639 INIT_LIST_HEAD(&pf->node); in binder_add_fixup()
2644 list_for_each_entry_reverse(tmppf, pf_head, node) { in binder_add_fixup()
2646 list_add(&pf->node, &tmppf->node); in binder_add_fixup()
2654 list_add(&pf->node, pf_head); in binder_add_fixup()
2852 struct binder_node *node = t->buffer->target_node; in binder_proc_transaction() local
2858 BUG_ON(!node); in binder_proc_transaction()
2859 binder_node_lock(node); in binder_proc_transaction()
2862 if (node->has_async_transaction) in binder_proc_transaction()
2865 node->has_async_transaction = true; in binder_proc_transaction()
2878 binder_node_unlock(node); in binder_proc_transaction()
2892 &node->async_todo); in binder_proc_transaction()
2901 binder_enqueue_work_ilocked(&t->work, &node->async_todo); in binder_proc_transaction()
2909 binder_node_unlock(node); in binder_proc_transaction()
2955 struct binder_node *node, in binder_get_node_refs_for_txn() argument
2961 binder_node_inner_lock(node); in binder_get_node_refs_for_txn()
2962 if (node->proc) { in binder_get_node_refs_for_txn()
2963 target_node = node; in binder_get_node_refs_for_txn()
2964 binder_inc_node_nilocked(node, 1, 0, NULL); in binder_get_node_refs_for_txn()
2965 binder_inc_node_tmpref_ilocked(node); in binder_get_node_refs_for_txn()
2966 node->proc->tmp_ref++; in binder_get_node_refs_for_txn()
2967 *procp = node->proc; in binder_get_node_refs_for_txn()
2970 binder_node_inner_unlock(node); in binder_get_node_refs_for_txn()
3116 ref->node, &target_proc, in binder_transaction()
3872 binder_node_lock(ref->node); in binder_request_freeze_notification()
3876 binder_node_unlock(ref->node); in binder_request_freeze_notification()
3888 if (ref->node->proc) { in binder_request_freeze_notification()
3889 binder_inner_proc_lock(ref->node->proc); in binder_request_freeze_notification()
3890 freeze->is_frozen = ref->node->proc->is_frozen; in binder_request_freeze_notification()
3891 binder_inner_proc_unlock(ref->node->proc); in binder_request_freeze_notification()
3899 binder_node_unlock(ref->node); in binder_request_freeze_notification()
3921 binder_node_lock(ref->node); in binder_clear_freeze_notification()
3926 binder_node_unlock(ref->node); in binder_clear_freeze_notification()
3937 binder_node_unlock(ref->node); in binder_clear_freeze_notification()
3958 binder_node_unlock(ref->node); in binder_clear_freeze_notification()
4142 struct binder_node *node; in binder_thread_write() local
4151 node = binder_get_node(proc, node_ptr); in binder_thread_write()
4152 if (node == NULL) { in binder_thread_write()
4161 if (cookie != node->cookie) { in binder_thread_write()
4166 (u64)node_ptr, node->debug_id, in binder_thread_write()
4167 (u64)cookie, (u64)node->cookie); in binder_thread_write()
4168 binder_put_node(node); in binder_thread_write()
4171 binder_node_inner_lock(node); in binder_thread_write()
4173 if (node->pending_strong_ref == 0) { in binder_thread_write()
4176 node->debug_id); in binder_thread_write()
4177 binder_node_inner_unlock(node); in binder_thread_write()
4178 binder_put_node(node); in binder_thread_write()
4181 node->pending_strong_ref = 0; in binder_thread_write()
4183 if (node->pending_weak_ref == 0) { in binder_thread_write()
4186 node->debug_id); in binder_thread_write()
4187 binder_node_inner_unlock(node); in binder_thread_write()
4188 binder_put_node(node); in binder_thread_write()
4191 node->pending_weak_ref = 0; in binder_thread_write()
4193 free_node = binder_dec_node_nilocked(node, in binder_thread_write()
4200 node->debug_id, node->local_strong_refs, in binder_thread_write()
4201 node->local_weak_refs, node->tmp_refs); in binder_thread_write()
4202 binder_node_inner_unlock(node); in binder_thread_write()
4203 binder_put_node(node); in binder_thread_write()
4362 ref->data.weak, ref->node->debug_id); in binder_thread_write()
4364 binder_node_lock(ref->node); in binder_thread_write()
4369 binder_node_unlock(ref->node); in binder_thread_write()
4378 if (ref->node->proc == NULL) { in binder_thread_write()
4391 binder_node_unlock(ref->node); in binder_thread_write()
4401 binder_node_unlock(ref->node); in binder_thread_write()
4428 binder_node_unlock(ref->node); in binder_thread_write()
4781 struct binder_node *node = container_of(w, struct binder_node, work); in binder_thread_read() local
4783 binder_uintptr_t node_ptr = node->ptr; in binder_thread_read()
4784 binder_uintptr_t node_cookie = node->cookie; in binder_thread_read()
4785 int node_debug_id = node->debug_id; in binder_thread_read()
4790 BUG_ON(proc != node->proc); in binder_thread_read()
4791 strong = node->internal_strong_refs || in binder_thread_read()
4792 node->local_strong_refs; in binder_thread_read()
4793 weak = !hlist_empty(&node->refs) || in binder_thread_read()
4794 node->local_weak_refs || in binder_thread_read()
4795 node->tmp_refs || strong; in binder_thread_read()
4796 has_strong_ref = node->has_strong_ref; in binder_thread_read()
4797 has_weak_ref = node->has_weak_ref; in binder_thread_read()
4800 node->has_weak_ref = 1; in binder_thread_read()
4801 node->pending_weak_ref = 1; in binder_thread_read()
4802 node->local_weak_refs++; in binder_thread_read()
4805 node->has_strong_ref = 1; in binder_thread_read()
4806 node->pending_strong_ref = 1; in binder_thread_read()
4807 node->local_strong_refs++; in binder_thread_read()
4810 node->has_strong_ref = 0; in binder_thread_read()
4812 node->has_weak_ref = 0; in binder_thread_read()
4820 rb_erase(&node->rb_node, &proc->nodes); in binder_thread_read()
4822 binder_node_lock(node); in binder_thread_read()
4832 binder_node_unlock(node); in binder_thread_read()
4833 binder_free_node(node); in binder_thread_read()
5492 struct binder_node *node; in binder_ioctl_get_node_info_for_ref() local
5512 node = binder_get_node_from_ref(proc, handle, true, NULL); in binder_ioctl_get_node_info_for_ref()
5513 if (!node) in binder_ioctl_get_node_info_for_ref()
5516 info->strong_count = node->local_strong_refs + in binder_ioctl_get_node_info_for_ref()
5517 node->internal_strong_refs; in binder_ioctl_get_node_info_for_ref()
5518 info->weak_count = node->local_weak_refs; in binder_ioctl_get_node_info_for_ref()
5520 binder_put_node(node); in binder_ioctl_get_node_info_for_ref()
5535 struct binder_node *node = rb_entry(n, struct binder_node, in binder_ioctl_get_node_debug_info() local
5537 if (node->ptr > ptr) { in binder_ioctl_get_node_debug_info()
5538 info->ptr = node->ptr; in binder_ioctl_get_node_debug_info()
5539 info->cookie = node->cookie; in binder_ioctl_get_node_debug_info()
5540 info->has_strong_ref = node->has_strong_ref; in binder_ioctl_get_node_debug_info()
5541 info->has_weak_ref = node->has_weak_ref; in binder_ioctl_get_node_debug_info()
5574 struct binder_node *node; in binder_add_freeze_work() local
5576 node = rb_entry(n, struct binder_node, rb_node); in binder_add_freeze_work()
5577 binder_inc_node_tmpref_ilocked(node); in binder_add_freeze_work()
5581 binder_node_lock(node); in binder_add_freeze_work()
5582 hlist_for_each_entry(ref, &node->refs, node_entry) { in binder_add_freeze_work()
5606 prev = node; in binder_add_freeze_work()
5607 binder_node_unlock(node); in binder_add_freeze_work()
6142 static int binder_node_release(struct binder_node *node, int refs) in binder_node_release() argument
6146 struct binder_proc *proc = node->proc; in binder_node_release()
6148 binder_release_work(proc, &node->async_todo); in binder_node_release()
6150 binder_node_lock(node); in binder_node_release()
6152 binder_dequeue_work_ilocked(&node->work); in binder_node_release()
6156 BUG_ON(!node->tmp_refs); in binder_node_release()
6157 if (hlist_empty(&node->refs) && node->tmp_refs == 1) { in binder_node_release()
6159 binder_node_unlock(node); in binder_node_release()
6160 binder_free_node(node); in binder_node_release()
6165 node->proc = NULL; in binder_node_release()
6166 node->local_strong_refs = 0; in binder_node_release()
6167 node->local_weak_refs = 0; in binder_node_release()
6171 hlist_add_head(&node->dead_node, &binder_dead_nodes); in binder_node_release()
6174 hlist_for_each_entry(ref, &node->refs, node_entry) { in binder_node_release()
6200 node->debug_id, refs, death); in binder_node_release()
6201 binder_node_unlock(node); in binder_node_release()
6202 binder_put_node(node); in binder_node_release()
6252 struct binder_node *node; in binder_deferred_release() local
6254 node = rb_entry(n, struct binder_node, rb_node); in binder_deferred_release()
6261 binder_inc_node_tmpref_ilocked(node); in binder_deferred_release()
6262 rb_erase(&node->rb_node, &proc->nodes); in binder_deferred_release()
6264 incoming_refs = binder_node_release(node, incoming_refs); in binder_deferred_release()
6385 struct binder_node *node; in print_binder_work_ilocked() local
6405 node = container_of(w, struct binder_node, work); in print_binder_work_ilocked()
6407 prefix, node->debug_id, in print_binder_work_ilocked()
6408 (u64)node->ptr, (u64)node->cookie); in print_binder_work_ilocked()
6470 struct binder_node *node) in print_binder_node_nilocked() argument
6476 count = hlist_count_nodes(&node->refs); in print_binder_node_nilocked()
6479 node->debug_id, (u64)node->ptr, (u64)node->cookie, in print_binder_node_nilocked()
6480 node->has_strong_ref, node->has_weak_ref, in print_binder_node_nilocked()
6481 node->local_strong_refs, node->local_weak_refs, in print_binder_node_nilocked()
6482 node->internal_strong_refs, count, node->tmp_refs); in print_binder_node_nilocked()
6485 hlist_for_each_entry(ref, &node->refs, node_entry) in print_binder_node_nilocked()
6489 if (node->proc) { in print_binder_node_nilocked()
6490 list_for_each_entry(w, &node->async_todo, entry) in print_binder_node_nilocked()
6491 print_binder_work_ilocked(m, node->proc, " ", in print_binder_node_nilocked()
6499 binder_node_lock(ref->node); in print_binder_ref_olocked()
6502 ref->node->proc ? "" : "dead ", in print_binder_ref_olocked()
6503 ref->node->debug_id, ref->data.strong, in print_binder_ref_olocked()
6505 binder_node_unlock(ref->node); in print_binder_ref_olocked()
6527 struct binder_node *node = rb_entry(n, struct binder_node, in print_binder_proc() local
6529 if (!print_all && !node->has_async_transaction) in print_binder_proc()
6537 binder_inc_node_tmpref_ilocked(node); in print_binder_proc()
6542 binder_node_inner_lock(node); in print_binder_proc()
6543 print_binder_node_nilocked(m, node); in print_binder_proc()
6544 binder_node_inner_unlock(node); in print_binder_proc()
6545 last_node = node; in print_binder_proc()
6751 struct binder_node *node; in state_show() local
6759 hlist_for_each_entry(node, &binder_dead_nodes, dead_node) { in state_show()
6765 node->tmp_refs++; in state_show()
6769 binder_node_lock(node); in state_show()
6770 print_binder_node_nilocked(m, node); in state_show()
6771 binder_node_unlock(node); in state_show()
6772 last_node = node; in state_show()