• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/xnu-2782.1.97/osfmk/ipc/

Lines Matching defs:task_imp

110 uint32_t ipc_importance_task_reference_internal(ipc_importance_task_t task_imp)
113 out = ipc_importance_reference_internal(&task_imp->iit_elem);
114 incr_ref_counter(task_imp->iit_elem.iie_task_refs_added);
119 uint32_t ipc_importance_task_release_internal(ipc_importance_task_t task_imp)
123 assert(1 < IIT_REFS(task_imp));
124 incr_ref_counter(task_imp->iit_elem.iie_task_refs_dropped);
125 out = ipc_importance_release_internal(&task_imp->iit_elem);
509 ipc_importance_task_t task_imp,
514 task_t target_task = task_imp->iit_task;
518 if (!ipc_importance_task_is_any_receiver_type(task_imp))
525 proc_selfpid(), target_pid, task_imp->iit_assertcnt, IIT_EXTERN(task_imp), 0);
529 before_boosted = (task_imp->iit_assertcnt > 0);
533 task_imp->iit_assertcnt += delta;
536 task_t, current_task(), int, proc_selfpid(), int, delta, int, task_imp->iit_assertcnt);
539 // assert(delta <= task_imp->iit_assertcnt);
540 if (delta > task_imp->iit_assertcnt - IIT_EXTERN(task_imp)) {
548 task_imp->iit_assertcnt,
549 IIT_EXTERN(task_imp));
551 task_imp->iit_assertcnt = IIT_EXTERN(task_imp);
553 task_imp->iit_assertcnt -= delta;
557 DTRACE_BOOST4(drop_boost, task_t, target_task, int, target_pid, int, delta, int, task_imp->iit_assertcnt);
563 proc_selfpid(), target_pid, task_imp->iit_assertcnt, IIT_EXTERN(task_imp), 0);
567 after_boosted = (task_imp->iit_assertcnt > 0);
583 assert(0 == task_imp->iit_updatepolicy);
584 if (NULL != task_imp->iit_updateq) {
585 if (&ipc_importance_delayed_drop_queue != task_imp->iit_updateq) {
586 queue_remove(task_imp->iit_updateq, task_imp, ipc_importance_task_t, iit_updates);
587 task_imp->iit_updateq = NULL;
588 ipc_importance_task_release_internal(task_imp); /* can't be last ref */
591 task_imp->iit_updatepolicy = 1;
614 ipc_importance_task_t task_imp,
627 queue_iterate(&task_imp->iit_kmsgs, temp_kmsg, ipc_kmsg_t, ikm_inheritance) {
669 incr_ref_counter(task_imp->iit_elem.iie_task_refs_added_transition);
683 queue_iterate(&task_imp->iit_inherits, temp_inherit, ipc_importance_inherit_t, iii_inheritance) {
734 incr_ref_counter(task_imp->iit_elem.iie_task_refs_added_transition);
756 ipc_importance_task_t task_imp;
773 task_imp = (ipc_importance_task_t)queue_first(queue);
774 assert(0 == task_imp->iit_updatepolicy);
775 assert(queue == task_imp->iit_updateq);
778 if (task_imp->iit_updatetime > max_timestamp) {
785 queue_remove(queue, task_imp, ipc_importance_task_t, iit_updates);
786 task_imp->iit_updateq = NULL;
788 target_task = task_imp->iit_task;
792 ipc_importance_task_release_locked(task_imp);
799 if (0 < task_imp->iit_assertcnt &&
801 ipc_importance_task_release_locked(task_imp);
813 task_imp->iit_updateq = &second_chance;
825 queue_enter_first(&second_chance, task_imp,
828 queue_enter(&second_chance, task_imp,
846 ipc_importance_task_release_locked(task_imp);
857 task_imp->iit_transitions++;
865 ipc_importance_task_release(task_imp);
908 ipc_importance_task_t task_imp;
912 task_imp = (ipc_importance_task_t)queue_first(&ipc_importance_delayed_drop_queue);
915 deadline += task_imp->iit_updatetime;
941 ipc_importance_task_delayed_drop(ipc_importance_task_t task_imp)
952 if (NULL != task_imp->iit_updateq) {
953 queue_remove(task_imp->iit_updateq, task_imp,
956 ipc_importance_task_reference_internal(task_imp);
959 task_imp->iit_updateq = &ipc_importance_delayed_drop_queue;
960 task_imp->iit_updatetime = timestamp;
962 queue_enter(&ipc_importance_delayed_drop_queue, task_imp,
971 deadline += task_imp->iit_updatetime;
998 ipc_importance_task_t task_imp,
1016 queue_enter(&propagate, task_imp, ipc_importance_task_t, iit_props);
1018 ipc_importance_task_propagate_helper(task_imp, type, &propagate);
1080 ipc_importance_task_hold_internal_assertion_locked(ipc_importance_task_t task_imp, uint32_t count)
1082 if (ipc_importance_task_check_transition(task_imp, IIT_UPDATE_HOLD, count)) {
1083 ipc_importance_task_propagate_assertion_locked(task_imp, IIT_UPDATE_HOLD, TRUE);
1102 ipc_importance_task_drop_internal_assertion_locked(ipc_importance_task_t task_imp, uint32_t count)
1104 if (ipc_importance_task_check_transition(task_imp, IIT_UPDATE_DROP, count)) {
1105 ipc_importance_task_propagate_assertion_locked(task_imp, IIT_UPDATE_DROP, TRUE);
1123 ipc_importance_task_hold_internal_assertion(ipc_importance_task_t task_imp, uint32_t count)
1127 if (ipc_importance_task_is_any_receiver_type(task_imp)) {
1129 ret = ipc_importance_task_hold_internal_assertion_locked(task_imp, count);
1148 ipc_importance_task_drop_internal_assertion(ipc_importance_task_t task_imp, uint32_t count)
1152 if (ipc_importance_task_is_any_receiver_type(task_imp)) {
1154 ret = ipc_importance_task_drop_internal_assertion_locked(task_imp, count);
1173 ipc_importance_task_hold_file_lock_assertion(ipc_importance_task_t task_imp, uint32_t count)
1177 if (ipc_importance_task_is_any_receiver_type(task_imp)) {
1179 ret = ipc_importance_task_hold_internal_assertion_locked(task_imp, count);
1181 task_imp->iit_filelocks += count;
1201 ipc_importance_task_drop_file_lock_assertion(ipc_importance_task_t task_imp, uint32_t count)
1205 if (ipc_importance_task_is_any_receiver_type(task_imp)) {
1207 if (count <= task_imp->iit_filelocks) {
1208 task_imp->iit_filelocks -= count;
1209 ret = ipc_importance_task_drop_internal_assertion_locked(task_imp, count);
1232 ipc_importance_task_hold_legacy_external_assertion(ipc_importance_task_t task_imp, uint32_t count)
1242 target_task = task_imp->iit_task;
1248 proc_selfpid(), target_pid, task_imp->iit_assertcnt, IIT_LEGACY_EXTERN(task_imp), 0);
1251 if (IIT_LEGACY_EXTERN(task_imp) == 0) {
1254 target_assertcnt = task_imp->iit_assertcnt;
1255 target_externcnt = IIT_EXTERN(task_imp);
1256 target_legacycnt = IIT_LEGACY_EXTERN(task_imp);
1260 assert(ipc_importance_task_is_any_receiver_type(task_imp));
1261 assert(0 < task_imp->iit_assertcnt);
1262 assert(0 < IIT_EXTERN(task_imp));
1263 task_imp->iit_assertcnt += count;
1264 task_imp->iit_externcnt += count;
1265 task_imp->iit_legacy_externcnt += count;
1272 proc_selfpid(), target_pid, task_imp->iit_assertcnt, IIT_LEGACY_EXTERN(task_imp), 0);
1274 DTRACE_BOOST5(receive_boost, task_t, target_task, int, target_pid, int, proc_selfpid(), int, count, int, task_imp->iit_assertcnt);
1303 ipc_importance_task_drop_legacy_external_assertion(ipc_importance_task_t task_imp, uint32_t count)
1316 target_task = task_imp->iit_task;
1322 proc_selfpid(), target_pid, task_imp->iit_assertcnt, IIT_LEGACY_EXTERN(task_imp), 0);
1325 if (count > IIT_LEGACY_EXTERN(task_imp)) {
1328 target_assertcnt = task_imp->iit_assertcnt;
1329 target_externcnt = IIT_EXTERN(task_imp);
1330 target_legacycnt = IIT_LEGACY_EXTERN(task_imp);
1337 assert(ipc_importance_task_is_any_receiver_type(task_imp));
1338 assert(IIT_EXTERN(task_imp) >= count);
1340 task_imp->iit_legacy_externdrop += count;
1341 task_imp->iit_externdrop += count;
1344 if (IIT_LEGACY_EXTERN(task_imp) == 0) {
1345 if (IIT_EXTERN(task_imp) != 0) {
1346 task_imp->iit_externcnt -= task_imp->iit_legacy_externcnt;
1347 task_imp->iit_externdrop -= task_imp->iit_legacy_externdrop;
1349 task_imp->iit_externcnt = 0;
1350 task_imp->iit_externdrop = 0;
1352 task_imp->iit_legacy_externcnt = 0;
1353 task_imp->iit_legacy_externdrop = 0;
1357 if (ipc_importance_task_check_transition(task_imp, IIT_UPDATE_DROP, count)) {
1358 ipc_importance_task_propagate_assertion_locked(task_imp, IIT_UPDATE_DROP, TRUE);
1365 proc_selfpid(), target_pid, task_imp->iit_assertcnt, IIT_LEGACY_EXTERN(task_imp), 0);
1384 ipc_importance_task_externalize_legacy_assertion(ipc_importance_task_t task_imp, uint32_t count, __unused int sender_pid)
1388 assert(IIT_NULL != task_imp);
1389 target_task = task_imp->iit_task;
1392 !ipc_importance_task_is_any_receiver_type(task_imp)) {
1400 proc_selfpid(), target_pid, task_imp->iit_assertcnt, IIT_EXTERN(task_imp), 0);
1404 /* assert(task_imp->iit_assertcnt >= IIT_EXTERN(task_imp) + count); */
1405 assert(IIT_EXTERN(task_imp) >= IIT_LEGACY_EXTERN(task_imp));
1406 task_imp->iit_legacy_externcnt += count;
1407 task_imp->iit_externcnt += count;
1412 proc_selfpid(), target_pid, task_imp->iit_assertcnt, IIT_LEGACY_EXTERN(task_imp), 0);
1414 DTRACE_BOOST5(receive_boost, task_t, target_task, int, target_pid, int, sender_pid, int, count, int, IIT_LEGACY_EXTERN(task_imp));
1430 ipc_importance_task_update_live_donor(ipc_importance_task_t task_imp)
1437 assert(task_imp != NULL);
1443 if (!ipc_importance_task_is_marked_live_donor(task_imp)) {
1450 target_task = task_imp->iit_task;
1455 before_donor = ipc_importance_task_is_marked_donor(task_imp);
1465 target_pid, task_imp->iit_donor, task_live_donor, before_donor, 0);
1469 task_imp->iit_donor = task_live_donor;
1471 after_donor = ipc_importance_task_is_marked_donor(task_imp);
1479 task_imp->iit_transitions++;
1484 ipc_importance_task_propagate_assertion_locked(task_imp, type, FALSE);
1490 target_pid, task_imp->iit_donor, task_live_donor, after_donor, 0);
1508 ipc_importance_task_mark_donor(ipc_importance_task_t task_imp, boolean_t donating)
1510 assert(task_imp != NULL);
1514 int old_donor = task_imp->iit_donor;
1516 task_imp->iit_donor = (donating ? 1 : 0);
1518 if (task_imp->iit_donor > 0 && old_donor == 0)
1519 task_imp->iit_transitions++;
1523 audit_token_pid_from_task(task_imp->iit_task), donating,
1524 old_donor, task_imp->iit_donor, 0);
1539 ipc_importance_task_is_marked_donor(ipc_importance_task_t task_imp)
1541 if (IIT_NULL == task_imp) {
1544 return (0 != task_imp->iit_donor);
1557 ipc_importance_task_mark_live_donor(ipc_importance_task_t task_imp, boolean_t live_donating)
1559 assert(task_imp != NULL);
1562 task_imp->iit_live_donor = (live_donating ? 1 : 0);
1576 ipc_importance_task_is_marked_live_donor(ipc_importance_task_t task_imp)
1578 if (IIT_NULL == task_imp) {
1581 return (0 != task_imp->iit_live_donor);
1594 ipc_importance_task_is_donor(ipc_importance_task_t task_imp)
1596 if (IIT_NULL == task_imp) {
1599 return (ipc_importance_task_is_marked_donor(task_imp) ||
1600 (ipc_importance_task_is_marked_receiver(task_imp) &&
1601 task_imp->iit_assertcnt > 0));
1613 ipc_importance_task_is_never_donor(ipc_importance_task_t task_imp)
1615 if (IIT_NULL == task_imp) {
1618 return (!ipc_importance_task_is_marked_donor(task_imp) &&
1619 !ipc_importance_task_is_marked_live_donor(task_imp) &&
1620 !ipc_importance_task_is_marked_receiver(task_imp));
1633 ipc_importance_task_mark_receiver(ipc_importance_task_t task_imp, boolean_t receiving)
1635 assert(task_imp != NULL);
1639 assert(task_imp->iit_assertcnt == 0);
1640 assert(task_imp->iit_externcnt == 0);
1641 assert(task_imp->iit_externdrop == 0);
1642 assert(task_imp->iit_denap == 0);
1643 task_imp->iit_receiver = 1; /* task can receive importance boost */
1644 } else if (task_imp->iit_receiver) {
1645 assert(task_imp->iit_denap == 0);
1646 if (task_imp->iit_assertcnt != 0 || IIT_EXTERN(task_imp) != 0) {
1649 task_imp->iit_receiver = 0;
1664 ipc_importance_task_is_marked_receiver(ipc_importance_task_t task_imp)
1666 return (IIT_NULL != task_imp && 0 != task_imp->iit_receiver);
1680 ipc_importance_task_mark_denap_receiver(ipc_importance_task_t task_imp, boolean_t denap)
1682 assert(task_imp != NULL);
1686 assert(task_imp->iit_assertcnt == 0);
1687 assert(task_imp->iit_externcnt == 0);
1688 assert(task_imp->iit_receiver == 0);
1689 task_imp->iit_denap = 1; /* task can receive de-nap boost */
1690 } else if (task_imp->iit_denap) {
1691 assert(task_imp->iit_receiver == 0);
1692 if (0 < task_imp->iit_assertcnt || 0 < IIT_EXTERN(task_imp)) {
1695 task_imp->iit_denap = 0;
1710 ipc_importance_task_is_marked_denap_receiver(ipc_importance_task_t task_imp)
1712 return (IIT_NULL != task_imp && 0 != task_imp->iit_denap);
1725 ipc_importance_task_is_denap_receiver(ipc_importance_task_t task_imp)
1727 return (ipc_importance_task_is_marked_denap_receiver(task_imp));
1741 ipc_importance_task_is_any_receiver_type(ipc_importance_task_t task_imp)
1743 return (ipc_importance_task_is_marked_receiver(task_imp) ||
1744 ipc_importance_task_is_marked_denap_receiver(task_imp));
1927 ipc_importance_reset_locked(ipc_importance_task_t task_imp, boolean_t donor)
1932 before_donor = ipc_importance_task_is_donor(task_imp);
1934 task_imp->iit_donor = 0;
1936 assert(IIT_LEGACY_EXTERN(task_imp) <= IIT_EXTERN(task_imp));
1937 assert(task_imp->iit_legacy_externcnt <= task_imp->iit_externcnt);
1938 assert(task_imp->iit_legacy_externdrop <= task_imp->iit_externdrop);
1939 task_imp->iit_externcnt -= task_imp->iit_legacy_externcnt;
1940 task_imp->iit_externdrop -= task_imp->iit_legacy_externdrop;
1942 /* assert(IIT_LEGACY_EXTERN(task_imp) <= task_imp->iit_assertcnt); */
1943 if (IIT_LEGACY_EXTERN(task_imp) < task_imp->iit_assertcnt) {
1944 task_imp->iit_assertcnt -= IIT_LEGACY_EXTERN(task_imp);
1946 assert(IIT_LEGACY_EXTERN(task_imp) == task_imp->iit_assertcnt);
1947 task_imp->iit_assertcnt = 0;
1949 task_imp->iit_legacy_externcnt = 0;
1950 task_imp->iit_legacy_externdrop = 0;
1951 after_donor = ipc_importance_task_is_donor(task_imp);
1954 if (task_imp->iit_assertcnt > 0 && task_imp->iit_live_donor) {
1956 task_imp->iit_procname, task_imp->iit_bsd_pid, task_imp->iit_assertcnt);
1962 ipc_importance_task_propagate_assertion_locked(task_imp, IIT_UPDATE_DROP, FALSE);
1978 ipc_importance_reset(ipc_importance_task_t task_imp, boolean_t donor)
1980 if (IIT_NULL == task_imp) {
1984 ipc_importance_reset_locked(task_imp, donor);
2007 ipc_importance_task_t task_imp;
2011 task_imp = task->task_imp_base;
2014 if (IIT_NULL == task_imp) {
2021 assert(task_imp->iit_task == task);
2022 task_imp->iit_task = TASK_NULL;
2027 ipc_importance_reset_locked(task_imp, TRUE);
2029 ipc_importance_task_release_locked(task_imp);
2055 ipc_importance_task_t task_imp;
2075 task_imp = task->task_imp_base;
2076 assert(IIT_NULL != task_imp);
2079 if (ipc_importance_task_is_never_donor(task_imp)) {
2087 ipc_importance_task_is_marked_receiver(task_imp)) {
2113 if (inherit->iii_to_task == task_imp) {
2116 } else if (check_elem == (ipc_importance_elem_t)task_imp) {
2124 elem = (ipc_importance_elem_t)task_imp;
2144 if (!ipc_importance_task_is_donor(task_imp)) {
2206 ipc_importance_task_t task_imp = IIT_NULL;
2235 task_imp = ipc_importance_for_task(task_self, FALSE);
2239 if (IIT_NULL == task_imp) {
2243 incr_ref_counter(task_imp->iit_elem.iie_task_refs_added_inherit_from);
2250 if (from_inherit->iii_to_task == task_imp) {
2292 if (from_elem == (ipc_importance_elem_t)task_imp) {
2303 ipc_importance_task_reference_internal(task_imp);
2304 from_elem = (ipc_importance_elem_t)task_imp;
2314 if (temp_inherit->iii_to_task == task_imp &&
2355 task_imp->iit_externcnt += inherit->iii_externcnt;
2356 task_imp->iit_externdrop += inherit->iii_externdrop;
2365 task_imp->iit_externcnt++;
2375 inherit->iii_to_task = task_imp;
2383 task_imp->iit_externcnt++;
2397 task_imp->iit_elem.iie_task_refs_inherited++;
2426 if (IIT_NULL != task_imp) {
2428 incr_ref_counter(task_imp->iit_elem.iie_task_refs_coalesced);
2430 ipc_importance_task_release(task_imp);
2436 /* from_elem and task_imp references transferred to new inherit */
2569 ipc_importance_task_t task_imp = task_self->task_imp_base;
2578 if (KERN_SUCCESS == ipc_importance_task_externalize_legacy_assertion(task_imp, 1, sender_pid)) {
2622 ipc_importance_task_t task_imp;
2625 task_imp = current_task()->task_imp_base;
2626 if (!IP_VALID(kmsg->ikm_voucher) && IIT_NULL != task_imp) {
2627 ipc_importance_task_drop_legacy_external_assertion(task_imp, 1);
2940 ipc_importance_task_t task_imp;
2945 task_imp = (ipc_importance_task_t)elem;
2946 task = task_imp->iit_task;
2952 task_imp = inherit->iii_to_task;
2953 task = task_imp->iit_task;
3199 ipc_importance_task_t task_imp = task->task_imp_base;
3205 queue_iterate(&task_imp->iit_inherits, temp_inherit, ipc_importance_inherit_t, iii_inheritance) {
3229 queue_iterate(&task_imp->iit_kmsgs, temp_kmsg, ipc_kmsg_t, ikm_inheritance) {