Lines Matching refs:strong
283 * @internal_strong_refs: used to take strong references when
290 * @local_strong_refs: strong user refs from local process
303 * @has_strong_ref: userspace notified of strong ref
306 * @pending_strong_ref: userspace has acked notification of strong ref
380 * @strong: strong ref count (debugging only if not locked)
391 int strong;
1226 static int binder_inc_node_nilocked(struct binder_node *node, int strong,
1235 if (strong) {
1242 pr_err("invalid inc strong node for %d\n",
1275 static int binder_inc_node(struct binder_node *node, int strong, int internal,
1281 ret = binder_inc_node_nilocked(node, strong, internal, target_list);
1288 int strong, int internal)
1295 if (strong) {
1347 static void binder_dec_node(struct binder_node *node, int strong, int internal)
1352 free_node = binder_dec_node_nilocked(node, strong, internal);
1419 * and cleanup is needed. Calling with strong=0 and internal=1
1447 } else if (need_strong_ref && !ref->data.strong) {
1448 binder_user_error("tried to use weak ref as strong ref\n");
1554 if (ref->data.strong)
1586 * @strong: if true, strong increment, else weak
1593 static int binder_inc_ref_olocked(struct binder_ref *ref, int strong,
1598 if (strong) {
1599 if (ref->data.strong == 0) {
1604 ref->data.strong++;
1619 * @strong: if true, strong decrement, else weak
1625 static bool binder_dec_ref_olocked(struct binder_ref *ref, int strong)
1627 if (strong) {
1628 if (ref->data.strong == 0) {
1629 binder_user_error("%d invalid dec strong, ref %d desc %d s %d w %d\n",
1631 ref->data.desc, ref->data.strong,
1635 ref->data.strong--;
1636 if (ref->data.strong == 0)
1637 binder_dec_node(ref->node, strong, 1);
1642 ref->data.desc, ref->data.strong,
1648 if (ref->data.strong == 0 && ref->data.weak == 0) {
1659 * @need_strong_ref: if true, only return node if ref is strong
1664 * Return: a binder_node or NULL if not found or not strong when strong required
1715 * @strong: true=strong reference, false=weak reference
1724 uint32_t desc, bool increment, bool strong,
1732 ref = binder_get_ref_olocked(proc, desc, strong);
1738 ret = binder_inc_ref_olocked(ref, strong, NULL);
1740 delete_ref = binder_dec_ref_olocked(ref, strong);
1759 * @strong: true=strong reference, false=weak reference
1767 uint32_t desc, bool strong, struct binder_ref_data *rdata)
1769 return binder_update_ref_for_handle(proc, desc, false, strong, rdata);
1777 * @strong: true=strong reference, false=weak reference
1788 bool strong,
1806 ret = binder_inc_ref_olocked(ref, strong, target_list);
1813 * with strong=0 and a tmp_refs will not decrement
3143 * since it has a reference to the target. The local strong ref keeps it
3146 * counting bug, relying on the local strong ref can fail.
3148 * Since user-space can cause the local strong ref to go away, we also take
3284 * There must already be a strong ref
3285 * on this node. If so, do a strong
4063 bool strong = cmd == BC_ACQUIRE || cmd == BC_RELEASE;
4085 strong, NULL, &rdata);
4091 proc, target, increment, strong,
4116 strong, target, ret);
4122 rdata.debug_id, rdata.desc, rdata.strong,
4349 ref->data.desc, ref->data.strong,
4737 int strong, weak;
4746 strong = node->internal_strong_refs ||
4750 node->tmp_refs || strong;
4759 if (strong && !has_strong_ref) {
4764 if (!strong && has_strong_ref)
4768 if (!weak && !strong) {
4797 if (!ret && strong && !has_strong_ref)
4802 if (!ret && !strong && has_strong_ref)
6229 ref->node->debug_id, ref->data.strong,
6403 int count, strong, weak, ready_threads;
6431 strong = 0;
6438 strong += ref->data.strong;
6442 seq_printf(m, " refs: %d s %d w %d\n", count, strong, weak);