Lines Matching refs:ref
1031 struct binder_ref *ref; in binder_get_ref_olocked() local
1034 ref = rb_entry(n, struct binder_ref, rb_node_desc); in binder_get_ref_olocked()
1036 if (desc < ref->data.desc) { in binder_get_ref_olocked()
1038 } else if (desc > ref->data.desc) { in binder_get_ref_olocked()
1040 } else if (need_strong_ref && !ref->data.strong) { in binder_get_ref_olocked()
1044 return ref; in binder_get_ref_olocked()
1053 struct binder_ref *ref; in slow_desc_lookup_olocked() local
1059 ref = rb_entry(n, struct binder_ref, rb_node_desc); in slow_desc_lookup_olocked()
1060 if (ref->data.desc > desc) in slow_desc_lookup_olocked()
1062 desc = ref->data.desc + 1; in slow_desc_lookup_olocked()
1130 struct binder_ref *ref; in binder_get_ref_for_node_olocked() local
1140 ref = rb_entry(parent, struct binder_ref, rb_node_node); in binder_get_ref_for_node_olocked()
1142 if (node < ref->node) in binder_get_ref_for_node_olocked()
1144 else if (node > ref->node) in binder_get_ref_for_node_olocked()
1147 return ref; in binder_get_ref_for_node_olocked()
1167 ref = rb_entry(parent, struct binder_ref, rb_node_desc); in binder_get_ref_for_node_olocked()
1169 if (new_ref->data.desc < ref->data.desc) in binder_get_ref_for_node_olocked()
1171 else if (new_ref->data.desc > ref->data.desc) in binder_get_ref_for_node_olocked()
1190 static void binder_cleanup_ref_olocked(struct binder_ref *ref) in binder_cleanup_ref_olocked() argument
1192 struct dbitmap *dmap = &ref->proc->dmap; in binder_cleanup_ref_olocked()
1197 ref->proc->pid, ref->data.debug_id, ref->data.desc, in binder_cleanup_ref_olocked()
1198 ref->node->debug_id); in binder_cleanup_ref_olocked()
1201 dbitmap_clear_bit(dmap, ref->data.desc); in binder_cleanup_ref_olocked()
1202 rb_erase(&ref->rb_node_desc, &ref->proc->refs_by_desc); in binder_cleanup_ref_olocked()
1203 rb_erase(&ref->rb_node_node, &ref->proc->refs_by_node); in binder_cleanup_ref_olocked()
1205 binder_node_inner_lock(ref->node); in binder_cleanup_ref_olocked()
1206 if (ref->data.strong) in binder_cleanup_ref_olocked()
1207 binder_dec_node_nilocked(ref->node, 1, 1); in binder_cleanup_ref_olocked()
1209 hlist_del(&ref->node_entry); in binder_cleanup_ref_olocked()
1210 delete_node = binder_dec_node_nilocked(ref->node, 0, 1); in binder_cleanup_ref_olocked()
1211 binder_node_inner_unlock(ref->node); in binder_cleanup_ref_olocked()
1221 ref->node = NULL; in binder_cleanup_ref_olocked()
1224 if (ref->death) { in binder_cleanup_ref_olocked()
1227 ref->proc->pid, ref->data.debug_id, in binder_cleanup_ref_olocked()
1228 ref->data.desc); in binder_cleanup_ref_olocked()
1229 binder_dequeue_work(ref->proc, &ref->death->work); in binder_cleanup_ref_olocked()
1233 if (ref->freeze) { in binder_cleanup_ref_olocked()
1234 binder_dequeue_work(ref->proc, &ref->freeze->work); in binder_cleanup_ref_olocked()
1251 static int binder_inc_ref_olocked(struct binder_ref *ref, int strong, in binder_inc_ref_olocked() argument
1257 if (ref->data.strong == 0) { in binder_inc_ref_olocked()
1258 ret = binder_inc_node(ref->node, 1, 1, target_list); in binder_inc_ref_olocked()
1262 ref->data.strong++; in binder_inc_ref_olocked()
1264 if (ref->data.weak == 0) { in binder_inc_ref_olocked()
1265 ret = binder_inc_node(ref->node, 0, 1, target_list); in binder_inc_ref_olocked()
1269 ref->data.weak++; in binder_inc_ref_olocked()
1283 static bool binder_dec_ref_olocked(struct binder_ref *ref, int strong) in binder_dec_ref_olocked() argument
1286 if (ref->data.strong == 0) { in binder_dec_ref_olocked()
1288 ref->proc->pid, ref->data.debug_id, in binder_dec_ref_olocked()
1289 ref->data.desc, ref->data.strong, in binder_dec_ref_olocked()
1290 ref->data.weak); in binder_dec_ref_olocked()
1293 ref->data.strong--; in binder_dec_ref_olocked()
1294 if (ref->data.strong == 0) in binder_dec_ref_olocked()
1295 binder_dec_node(ref->node, strong, 1); in binder_dec_ref_olocked()
1297 if (ref->data.weak == 0) { in binder_dec_ref_olocked()
1299 ref->proc->pid, ref->data.debug_id, in binder_dec_ref_olocked()
1300 ref->data.desc, ref->data.strong, in binder_dec_ref_olocked()
1301 ref->data.weak); in binder_dec_ref_olocked()
1304 ref->data.weak--; in binder_dec_ref_olocked()
1306 if (ref->data.strong == 0 && ref->data.weak == 0) { in binder_dec_ref_olocked()
1307 binder_cleanup_ref_olocked(ref); in binder_dec_ref_olocked()
1330 struct binder_ref *ref; in binder_get_node_from_ref() local
1333 ref = binder_get_ref_olocked(proc, desc, need_strong_ref); in binder_get_node_from_ref()
1334 if (!ref) in binder_get_node_from_ref()
1336 node = ref->node; in binder_get_node_from_ref()
1343 *rdata = ref->data; in binder_get_node_from_ref()
1360 static void binder_free_ref(struct binder_ref *ref) in binder_free_ref() argument
1362 if (ref->node) in binder_free_ref()
1363 binder_free_node(ref->node); in binder_free_ref()
1364 kfree(ref->death); in binder_free_ref()
1365 kfree(ref->freeze); in binder_free_ref()
1366 kfree(ref); in binder_free_ref()
1406 struct binder_ref *ref; in binder_update_ref_for_handle() local
1410 ref = binder_get_ref_olocked(proc, desc, strong); in binder_update_ref_for_handle()
1411 if (!ref) { in binder_update_ref_for_handle()
1416 ret = binder_inc_ref_olocked(ref, strong, NULL); in binder_update_ref_for_handle()
1418 delete_ref = binder_dec_ref_olocked(ref, strong); in binder_update_ref_for_handle()
1421 *rdata = ref->data; in binder_update_ref_for_handle()
1425 binder_free_ref(ref); in binder_update_ref_for_handle()
1472 struct binder_ref *ref; in binder_inc_ref_for_node() local
1477 ref = binder_get_ref_for_node_olocked(proc, node, NULL); in binder_inc_ref_for_node()
1478 if (!ref) { in binder_inc_ref_for_node()
1480 new_ref = kzalloc(sizeof(*ref), GFP_KERNEL); in binder_inc_ref_for_node()
1484 ref = binder_get_ref_for_node_olocked(proc, node, new_ref); in binder_inc_ref_for_node()
1486 ret = binder_inc_ref_olocked(ref, strong, target_list); in binder_inc_ref_for_node()
1487 *rdata = ref->data; in binder_inc_ref_for_node()
1488 if (ret && ref == new_ref) { in binder_inc_ref_for_node()
1497 ref = NULL; in binder_inc_ref_for_node()
1501 if (new_ref && ref != new_ref) in binder_inc_ref_for_node()
3105 struct binder_ref *ref; in binder_transaction() local
3115 ref = binder_get_ref_olocked(proc, tr->target.handle, in binder_transaction()
3117 if (ref) { in binder_transaction()
3119 ref->node, &target_proc, in binder_transaction()
3854 struct binder_ref *ref; in binder_request_freeze_notification() local
3860 ref = binder_get_ref_olocked(proc, handle_cookie->handle, false); in binder_request_freeze_notification()
3861 if (!ref) { in binder_request_freeze_notification()
3869 binder_node_lock(ref->node); in binder_request_freeze_notification()
3870 if (ref->freeze) { in binder_request_freeze_notification()
3873 binder_node_unlock(ref->node); in binder_request_freeze_notification()
3883 ref->freeze = freeze; in binder_request_freeze_notification()
3885 if (ref->node->proc) { in binder_request_freeze_notification()
3886 binder_inner_proc_lock(ref->node->proc); in binder_request_freeze_notification()
3887 freeze->is_frozen = ref->node->proc->is_frozen; in binder_request_freeze_notification()
3888 binder_inner_proc_unlock(ref->node->proc); in binder_request_freeze_notification()
3896 binder_node_unlock(ref->node); in binder_request_freeze_notification()
3907 struct binder_ref *ref; in binder_clear_freeze_notification() local
3910 ref = binder_get_ref_olocked(proc, handle_cookie->handle, false); in binder_clear_freeze_notification()
3911 if (!ref) { in binder_clear_freeze_notification()
3918 binder_node_lock(ref->node); in binder_clear_freeze_notification()
3920 if (!ref->freeze) { in binder_clear_freeze_notification()
3923 binder_node_unlock(ref->node); in binder_clear_freeze_notification()
3927 freeze = ref->freeze; in binder_clear_freeze_notification()
3934 binder_node_unlock(ref->node); in binder_clear_freeze_notification()
3938 ref->freeze = NULL; in binder_clear_freeze_notification()
3955 binder_node_unlock(ref->node); in binder_clear_freeze_notification()
4309 struct binder_ref *ref; in binder_thread_write() local
4339 ref = binder_get_ref_olocked(proc, target, false); in binder_thread_write()
4340 if (ref == NULL) { in binder_thread_write()
4358 (u64)cookie, ref->data.debug_id, in binder_thread_write()
4359 ref->data.desc, ref->data.strong, in binder_thread_write()
4360 ref->data.weak, ref->node->debug_id); in binder_thread_write()
4362 binder_node_lock(ref->node); in binder_thread_write()
4364 if (ref->death) { in binder_thread_write()
4367 binder_node_unlock(ref->node); in binder_thread_write()
4375 ref->death = death; in binder_thread_write()
4376 if (ref->node->proc == NULL) { in binder_thread_write()
4377 ref->death->work.type = BINDER_WORK_DEAD_BINDER; in binder_thread_write()
4381 &ref->death->work, &proc->todo); in binder_thread_write()
4386 if (ref->death == NULL) { in binder_thread_write()
4389 binder_node_unlock(ref->node); in binder_thread_write()
4393 death = ref->death; in binder_thread_write()
4399 binder_node_unlock(ref->node); in binder_thread_write()
4403 ref->death = NULL; in binder_thread_write()
4426 binder_node_unlock(ref->node); in binder_thread_write()
5242 if (refcount_dec_and_test(&device->ref)) { in binder_free_proc()
5553 struct binder_ref *ref; in binder_add_freeze_work() local
5565 hlist_for_each_entry(ref, &node->refs, node_entry) { in binder_add_freeze_work()
5572 binder_inner_proc_lock(ref->proc); in binder_add_freeze_work()
5573 if (!ref->freeze) { in binder_add_freeze_work()
5574 binder_inner_proc_unlock(ref->proc); in binder_add_freeze_work()
5577 ref->freeze->work.type = BINDER_WORK_FROZEN_BINDER; in binder_add_freeze_work()
5578 if (list_empty(&ref->freeze->work.entry)) { in binder_add_freeze_work()
5579 ref->freeze->is_frozen = is_frozen; in binder_add_freeze_work()
5580 binder_enqueue_work_ilocked(&ref->freeze->work, &ref->proc->todo); in binder_add_freeze_work()
5581 binder_wakeup_proc_ilocked(ref->proc); in binder_add_freeze_work()
5583 if (ref->freeze->sent && ref->freeze->is_frozen != is_frozen) in binder_add_freeze_work()
5584 ref->freeze->resend = true; in binder_add_freeze_work()
5585 ref->freeze->is_frozen = is_frozen; in binder_add_freeze_work()
5587 binder_inner_proc_unlock(ref->proc); in binder_add_freeze_work()
6010 refcount_inc(&binder_dev->ref); in binder_open()
6123 struct binder_ref *ref; in binder_node_release() local
6153 hlist_for_each_entry(ref, &node->refs, node_entry) { in binder_node_release()
6161 binder_inner_proc_lock(ref->proc); in binder_node_release()
6162 if (!ref->death) { in binder_node_release()
6163 binder_inner_proc_unlock(ref->proc); in binder_node_release()
6169 BUG_ON(!list_empty(&ref->death->work.entry)); in binder_node_release()
6170 ref->death->work.type = BINDER_WORK_DEAD_BINDER; in binder_node_release()
6171 binder_enqueue_work_ilocked(&ref->death->work, in binder_node_release()
6172 &ref->proc->todo); in binder_node_release()
6173 binder_wakeup_proc_ilocked(ref->proc); in binder_node_release()
6174 binder_inner_proc_unlock(ref->proc); in binder_node_release()
6251 struct binder_ref *ref; in binder_deferred_release() local
6253 ref = rb_entry(n, struct binder_ref, rb_node_desc); in binder_deferred_release()
6255 binder_cleanup_ref_olocked(ref); in binder_deferred_release()
6257 binder_free_ref(ref); in binder_deferred_release()
6458 struct binder_ref *ref; in print_binder_node_nilocked() local
6476 hlist_for_each_entry(ref, &node->refs, node_entry) in print_binder_node_nilocked()
6477 seq_printf(m, " %d", ref->proc->pid); in print_binder_node_nilocked()
6489 struct binder_ref *ref) in print_binder_ref_olocked() argument
6491 binder_node_lock(ref->node); in print_binder_ref_olocked()
6493 ref->data.debug_id, ref->data.desc, in print_binder_ref_olocked()
6494 ref->node->proc ? "" : "dead ", in print_binder_ref_olocked()
6495 ref->node->debug_id, ref->data.strong, in print_binder_ref_olocked()
6496 ref->data.weak, ref->death); in print_binder_ref_olocked()
6497 binder_node_unlock(ref->node); in print_binder_ref_olocked()
6747 struct binder_ref *ref = rb_entry(n, struct binder_ref, in print_binder_proc_stats() local
6750 strong += ref->data.strong; in print_binder_proc_stats()
6751 weak += ref->data.weak; in print_binder_proc_stats()
7001 refcount_set(&binder_device->ref, 1); in init_binder_device()