Lines Matching refs:task
207 const size_t task_alignment = _Alignof(struct task);
226 static bool task_should_panic_on_exit_due_to_conclave_taint(task_t task);
227 static bool task_is_conclave_tainted(task_t task);
228 static void task_set_conclave_taint(task_t task);
229 kern_return_t task_crash_info_conclave_upcall(task_t task,
395 static inline void task_process_crossed_limit_no_diag(task_t task, ledger_amount_t ledger_limit_siz…
407 …) SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_FILE_DESCRIPTORS(task_t task, int current_size, …
409 …line)) SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_KQWORKLOOPS(task_t task, int current_size, …
414 static kern_return_t task_start_halt_locked(task_t task, boolean_t should_mark_corpse);
416 extern kern_return_t iokit_task_terminate(task_t task, int phase);
417 extern void iokit_task_app_suspended_changed(task_t task);
473 static diagthreshold_check_return task_check_memorythreshold_is_valid(task_t task, uint64_t new_lim…
507 extern boolean_t memorystatus_allowed_vm_map_fork(task_t task, bool *is_large);
576 static bool task_hold_locked(task_t task);
577 static void task_wait_locked(task_t task, boolean_t until_not_runnable);
578 static void task_release_locked(task_t task);
580 extern void task_ref_hold_proc_task_struct(task_t task);
581 extern void task_release_proc_task_struct(task_t task, proc_ro_t proc_ro);
583 static void task_synchronizer_destroy_all(task_t task);
586 task_t task,
594 task_t task,
600 task_t task,
610 task_t task, in task_set_64bit() argument
618 task_lock(task); in task_set_64bit()
624 if (!task_has_64Bit_addr(task)) { in task_set_64bit()
625 task_set_64Bit_addr(task); in task_set_64bit()
628 if (task_has_64Bit_addr(task)) { in task_set_64bit()
629 task_clear_64Bit_addr(task); in task_set_64bit()
637 if (task_has_64Bit_data(task)) { in task_set_64bit()
641 task_set_64Bit_data(task); in task_set_64bit()
643 if (!task_has_64Bit_data(task)) { in task_set_64bit()
647 task_clear_64Bit_data(task); in task_set_64bit()
658 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_set_64bit()
666 task_unlock(task); in task_set_64bit()
670 task_get_64bit_addr(task_t task) in task_get_64bit_addr() argument
672 return task_has_64Bit_addr(task); in task_get_64bit_addr()
676 task_get_64bit_data(task_t task) in task_get_64bit_data() argument
678 return task_has_64Bit_data(task); in task_get_64bit_data()
683 task_t task, in task_set_platform_binary() argument
687 task_ro_flags_set(task, TFRO_PLATFORM); in task_set_platform_binary()
689 task_ro_flags_clear(task, TFRO_PLATFORM); in task_set_platform_binary()
699 task_disable_mach_hardening(task_t task) in task_disable_mach_hardening() argument
701 task_ro_flags_set(task, TFRO_MACH_HARDENING_OPT_OUT); in task_disable_mach_hardening()
705 task_opted_out_mach_hardening(task_t task) in task_opted_out_mach_hardening() argument
707 return task_ro_flags_get(task) & TFRO_MACH_HARDENING_OPT_OUT; in task_opted_out_mach_hardening()
720 task_get_platform_binary(task_t task) in task_get_platform_binary() argument
722 return (task_ro_flags_get(task) & TFRO_PLATFORM) != 0; in task_get_platform_binary()
726 task_get_hardened_runtime(task_t task) in task_get_hardened_runtime() argument
728 return (task_ro_flags_get(task) & TFRO_HARDENED) != 0; in task_get_hardened_runtime()
732 task_is_hardened_binary(task_t task) in task_is_hardened_binary() argument
734 return task_get_platform_binary(task) || in task_is_hardened_binary()
735 task_get_hardened_runtime(task); in task_is_hardened_binary()
740 task_t task, in task_set_hardened_runtime() argument
744 task_ro_flags_set(task, TFRO_HARDENED); in task_set_hardened_runtime()
746 task_ro_flags_clear(task, TFRO_HARDENED); in task_set_hardened_runtime()
751 task_is_a_corpse(task_t task) in task_is_a_corpse() argument
753 return (task_ro_flags_get(task) & TFRO_CORPSE) != 0; in task_is_a_corpse()
757 task_is_ipc_active(task_t task) in task_is_ipc_active() argument
759 return task->ipc_active; in task_is_ipc_active()
763 task_set_corpse(task_t task) in task_set_corpse() argument
765 return task_ro_flags_set(task, TFRO_CORPSE); in task_set_corpse()
769 task_set_immovable_pinned(task_t task) in task_set_immovable_pinned() argument
771 ipc_task_set_immovable_pinned(task); in task_set_immovable_pinned()
780 task_t task, in task_set_ca_client_wi() argument
784 task_lock(task); in task_set_ca_client_wi()
787 if (task->t_flags & TF_CA_CLIENT_WI) { in task_set_ca_client_wi()
790 task->t_flags |= TF_CA_CLIENT_WI; in task_set_ca_client_wi()
793 task->t_flags &= ~TF_CA_CLIENT_WI; in task_set_ca_client_wi()
795 task_unlock(task); in task_set_ca_client_wi()
808 task_t task, in task_set_dyld_info() argument
818 task_lock(task); in task_set_dyld_info()
820 if ((task->t_flags & TF_DYLD_ALL_IMAGE_FINAL) == 0) { in task_set_dyld_info()
822 bool currentNonZero = ((task->all_image_info_addr != 0) || (task->all_image_info_size != 0)); in task_set_dyld_info()
823 task->all_image_info_addr = addr; in task_set_dyld_info()
824 task->all_image_info_size = size; in task_set_dyld_info()
827 task->t_flags |= TF_DYLD_ALL_IMAGE_FINAL; in task_set_dyld_info()
829 task_unlock(task); in task_set_dyld_info()
832 task_unlock(task); in task_set_dyld_info()
839 task_t task) in task_donates_own_pages() argument
841 return task->donates_own_pages; in task_donates_own_pages()
846 task_t task, in task_set_mach_header_address() argument
849 task_lock(task); in task_set_mach_header_address()
850 task->mach_header_vm_address = addr; in task_set_mach_header_address()
851 task_unlock(task); in task_set_mach_header_address()
855 task_bank_reset(__unused task_t task) in task_bank_reset() argument
857 if (task->bank_context != NULL) { in task_bank_reset()
858 bank_task_destroy(task); in task_bank_reset()
868 task_bank_init(__unused task_t task) in task_bank_init() argument
870 if (task->bank_context != NULL) { in task_bank_init()
871 …it called with non null bank context for task: %p and bank_context: %p", task, task->bank_context); in task_bank_init()
873 bank_task_initialize(task); in task_bank_init()
877 task_set_did_exec_flag(task_t task) in task_set_did_exec_flag() argument
879 task->t_procflags |= TPF_DID_EXEC; in task_set_did_exec_flag()
883 task_clear_exec_copy_flag(task_t task) in task_clear_exec_copy_flag() argument
885 task->t_procflags &= ~TPF_EXEC_COPY; in task_clear_exec_copy_flag()
889 task_get_return_wait_event(task_t task) in task_get_return_wait_event() argument
891 return (event_t)&task->returnwait_inheritor; in task_get_return_wait_event()
895 task_clear_return_wait(task_t task, uint32_t flags) in task_clear_return_wait() argument
898 thread_wakeup(task_get_return_wait_event(task)); in task_clear_return_wait()
902 is_write_lock(task->itk_space); in task_clear_return_wait()
904 task->t_returnwaitflags &= ~TRW_LRETURNWAIT; in task_clear_return_wait()
905 task->returnwait_inheritor = NULL; in task_clear_return_wait()
908 task->t_returnwaitflags &= ~TRW_LEXEC_COMPLETE; in task_clear_return_wait()
911 if (task->t_returnwaitflags & TRW_LRETURNWAITER) { in task_clear_return_wait()
912 … struct turnstile *turnstile = turnstile_prepare_hash((uintptr_t) task_get_return_wait_event(task), in task_clear_return_wait()
916 CAST_EVENT64_T(task_get_return_wait_event(task)), in task_clear_return_wait()
921 turnstile_complete_hash((uintptr_t) task_get_return_wait_event(task), TURNSTILE_ULOCK); in task_clear_return_wait()
923 task->t_returnwaitflags &= ~TRW_LRETURNWAITER; in task_clear_return_wait()
925 is_write_unlock(task->itk_space); in task_clear_return_wait()
932 task_t task = current_task(); in task_wait_to_return() local
935 is_write_lock(task->itk_space); in task_wait_to_return()
937 if (task->t_returnwaitflags & TRW_LRETURNWAIT) { in task_wait_to_return()
938 struct turnstile *turnstile = turnstile_prepare_hash((uintptr_t) task_get_return_wait_event(task), in task_wait_to_return()
942 task->t_returnwaitflags |= TRW_LRETURNWAITER; in task_wait_to_return()
943 turnstile_update_inheritor(turnstile, task->returnwait_inheritor, in task_wait_to_return()
947 CAST_EVENT64_T(task_get_return_wait_event(task)), in task_wait_to_return()
950 is_write_unlock(task->itk_space); in task_wait_to_return()
956 is_write_lock(task->itk_space); in task_wait_to_return()
957 } while (task->t_returnwaitflags & TRW_LRETURNWAIT); in task_wait_to_return()
959 turnstile_complete_hash((uintptr_t) task_get_return_wait_event(task), TURNSTILE_ULOCK); in task_wait_to_return()
962 returnwaitflags = task->t_returnwaitflags; in task_wait_to_return()
963 is_write_unlock(task->itk_space); in task_wait_to_return()
971 task_post_signature_processing_hook(task); in task_wait_to_return()
996 task_post_signature_processing_hook(task_t task) in task_post_signature_processing_hook() argument
998 ml_task_post_signature_processing_hook(task); in task_post_signature_processing_hook()
1002 task_is_exec_copy(task_t task) in task_is_exec_copy() argument
1004 return task_is_exec_copy_internal(task); in task_is_exec_copy()
1008 task_did_exec(task_t task) in task_did_exec() argument
1010 return task_did_exec_internal(task); in task_did_exec()
1014 task_is_active(task_t task) in task_is_active() argument
1016 return task->active; in task_is_active()
1020 task_is_halting(task_t task) in task_is_halting() argument
1022 return task->halting; in task_is_halting()
1167 task_struct_size = roundup(sizeof(struct task), proc_alignment); in task_zone_init()
2052 extern void task_deallocate_internal(task_t task, os_ref_count_t refs);
2055 task_t task, in task_deallocate_internal() argument
2060 if (task == TASK_NULL) { in task_deallocate_internal()
2073 if (IIT_NULL != task->task_imp_base) { in task_deallocate_internal()
2074 ipc_importance_disconnect_task(task); in task_deallocate_internal()
2088 assert(queue_empty(&task->threads)); in task_deallocate_internal()
2089 assert(get_bsdtask_info(task) == NULL); in task_deallocate_internal()
2090 assert(!is_active(task->itk_space)); in task_deallocate_internal()
2091 assert(!task->active); in task_deallocate_internal()
2092 assert(task->active_thread_count == 0); in task_deallocate_internal()
2093 assert(!task_get_game_mode(task)); in task_deallocate_internal()
2094 assert(!task_get_carplay_mode(task)); in task_deallocate_internal()
2098 queue_remove(&terminated_tasks, task, task_t, tasks); in task_deallocate_internal()
2105 task_bank_reset(task); in task_deallocate_internal()
2107 kfree_data(task->task_io_stats, sizeof(struct io_stat_info)); in task_deallocate_internal()
2114 machine_task_terminate(task); in task_deallocate_internal()
2116 ipc_task_terminate(task); in task_deallocate_internal()
2119 iokit_task_terminate(task, 2); in task_deallocate_internal()
2122 kern_unregister_userspace_coredump(task); in task_deallocate_internal()
2124 if (task->affinity_space) { in task_deallocate_internal()
2125 task_affinity_deallocate(task); in task_deallocate_internal()
2129 if (task->ledger != NULL && in task_deallocate_internal()
2130 task->map != NULL && in task_deallocate_internal()
2131 task->map->pmap != NULL && in task_deallocate_internal()
2132 task->map->pmap->ledger != NULL) { in task_deallocate_internal()
2133 assert(task->ledger == task->map->pmap->ledger); in task_deallocate_internal()
2137 vm_owned_objects_disown(task); in task_deallocate_internal()
2138 assert(task->task_objects_disowned); in task_deallocate_internal()
2139 if (task->task_owned_objects != 0) { in task_deallocate_internal()
2142 task, in task_deallocate_internal()
2143 task->task_volatile_objects, in task_deallocate_internal()
2144 task->task_nonvolatile_objects, in task_deallocate_internal()
2145 task->task_owned_objects); in task_deallocate_internal()
2149 if (task->deferred_reclamation_metadata != NULL) { in task_deallocate_internal()
2150 vm_deferred_reclamation_buffer_deallocate(task->deferred_reclamation_metadata); in task_deallocate_internal()
2151 task->deferred_reclamation_metadata = NULL; in task_deallocate_internal()
2155 vm_map_deallocate(task->map); in task_deallocate_internal()
2156 if (task->is_large_corpse) { in task_deallocate_internal()
2159 task->is_large_corpse = false; in task_deallocate_internal()
2161 is_release(task->itk_space); in task_deallocate_internal()
2163 if (task->t_rr_ranges) { in task_deallocate_internal()
2164 restartable_ranges_release(task->t_rr_ranges); in task_deallocate_internal()
2167 ledger_get_entries(task->ledger, task_ledgers.interrupt_wakeups, in task_deallocate_internal()
2169 ledger_get_entries(task->ledger, task_ledgers.platform_idle_wakeups, in task_deallocate_internal()
2174 recount_task_times_perf_only(task, &sum, &p_only); in task_deallocate_internal()
2176 uint64_t energy = recount_task_energy_nj(task); in task_deallocate_internal()
2178 recount_task_deinit(&task->tk_recount); in task_deallocate_internal()
2188 dead_task_statistics.task_timer_wakeups_bin_1 += task->task_timer_wakeups_bin_1; in task_deallocate_internal()
2189 dead_task_statistics.task_timer_wakeups_bin_2 += task->task_timer_wakeups_bin_2; in task_deallocate_internal()
2191 dead_task_statistics.total_pset_switches += task->ps_switch; in task_deallocate_internal()
2192 dead_task_statistics.task_gpu_ns += task->task_gpu_ns; in task_deallocate_internal()
2198 lck_mtx_destroy(&task->lock, &task_lck_grp); in task_deallocate_internal()
2200 if (!ledger_get_entries(task->ledger, task_ledgers.tkm_private, &credit, in task_deallocate_internal()
2205 if (!ledger_get_entries(task->ledger, task_ledgers.tkm_shared, &credit, in task_deallocate_internal()
2210 ledger_dereference(task->ledger); in task_deallocate_internal()
2212 counter_free(&task->faults); in task_deallocate_internal()
2213 counter_free(&task->pageins); in task_deallocate_internal()
2214 counter_free(&task->cow_faults); in task_deallocate_internal()
2215 counter_free(&task->messages_sent); in task_deallocate_internal()
2216 counter_free(&task->messages_received); in task_deallocate_internal()
2219 task_release_coalitions(task); in task_deallocate_internal()
2222 bzero(task->coalition, sizeof(task->coalition)); in task_deallocate_internal()
2226 if (task->corpse_info) { in task_deallocate_internal()
2227 void *corpse_info_kernel = kcdata_memory_get_begin_addr(task->corpse_info); in task_deallocate_internal()
2228 task_crashinfo_destroy(task->corpse_info); in task_deallocate_internal()
2229 task->corpse_info = NULL; in task_deallocate_internal()
2235 if (get_task_crash_label(task)) { in task_deallocate_internal()
2236 mac_exc_free_label(get_task_crash_label(task)); in task_deallocate_internal()
2237 set_task_crash_label(task, NULL); in task_deallocate_internal()
2241 assert(queue_empty(&task->task_objq)); in task_deallocate_internal()
2242 task_objq_lock_destroy(task); in task_deallocate_internal()
2244 if (task->corpse_vmobject_list) { in task_deallocate_internal()
2245 kfree_data(task->corpse_vmobject_list, in task_deallocate_internal()
2246 (vm_size_t)task->corpse_vmobject_list_size); in task_deallocate_internal()
2249 task_ref_count_fini(task); in task_deallocate_internal()
2250 proc_ro_erase_task(task->bsd_info_ro); in task_deallocate_internal()
2251 task_release_proc_task_struct(task, task->bsd_info_ro); in task_deallocate_internal()
2339 task_t task, in task_collect_crash_info() argument
2365 task_lock(task); in task_collect_crash_info()
2367 assert(is_corpse_fork || get_bsdtask_info(task) != NULL); in task_collect_crash_info()
2368 if (task->corpse_info == NULL && (is_corpse_fork || get_bsdtask_info(task) != NULL)) { in task_collect_crash_info()
2371 free_label = get_task_crash_label(task); // Most likely NULL. in task_collect_crash_info()
2372 set_task_crash_label(task, label); in task_collect_crash_info()
2373 mac_exc_update_task_crash_label(task, crash_label); in task_collect_crash_info()
2375 task_unlock(task); in task_collect_crash_info()
2390 task_lock(task); in task_collect_crash_info()
2391 crash_data_release = task->corpse_info; in task_collect_crash_info()
2393 task->corpse_info = crash_data; in task_collect_crash_info()
2395 task_unlock(task); in task_collect_crash_info()
2408 task_unlock(task); in task_collect_crash_info()
2491 task_t task) in task_terminate() argument
2493 if (task == TASK_NULL) { in task_terminate()
2497 if (get_bsdtask_info(task)) { in task_terminate()
2501 return task_terminate_internal(task); in task_terminate()
2510 __unused task_partial_reap(task_t task, __unused int pid) in task_partial_reap() argument
2516 task_page_count = (get_task_phys_footprint(task) / PAGE_SIZE_64); in task_partial_reap()
2521 vm_map_partial_reap(task->map, &reclaimed_resident, &reclaimed_compressed); in task_partial_reap()
2533 task_mark_corpse(task_t task) in task_mark_corpse() argument
2543 assert(task != kernel_task); in task_mark_corpse()
2544 assert(task == current_task()); in task_mark_corpse()
2545 assert(!task_is_a_corpse(task)); in task_mark_corpse()
2548 crash_label = mac_exc_create_label_for_proc((struct proc*)get_bsdtask_info(task)); in task_mark_corpse()
2551 kr = task_collect_crash_info(task, in task_mark_corpse()
2563 task_lock(task); in task_mark_corpse()
2570 if (!task->active) { in task_mark_corpse()
2571 kcdata_descriptor_t crash_data_release = task->corpse_info;; in task_mark_corpse()
2574 task->corpse_info = NULL; in task_mark_corpse()
2575 task_unlock(task); in task_mark_corpse()
2584 task_set_corpse_pending_report(task); in task_mark_corpse()
2585 task_set_corpse(task); in task_mark_corpse()
2586 task->crashed_thread_id = thread_tid(self_thread); in task_mark_corpse()
2588 kr = task_start_halt_locked(task, TRUE); in task_mark_corpse()
2591 task_set_uniqueid(task); in task_mark_corpse()
2593 task_unlock(task); in task_mark_corpse()
2602 ipc_task_disable(task); in task_mark_corpse()
2605 iokit_task_terminate(task, 1); in task_mark_corpse()
2608 ipc_space_terminate(task->itk_space); in task_mark_corpse()
2611 task_add_to_corpse_task_list(task); in task_mark_corpse()
2616 assert(task->halting == TRUE); in task_mark_corpse()
2631 task_set_uniqueid(task_t task) in task_set_uniqueid() argument
2633 task->task_uniqueid = OSIncrementAtomic64(&next_taskuniqueid); in task_set_uniqueid()
2643 task_clear_corpse(task_t task) in task_clear_corpse() argument
2647 task_lock(task); in task_clear_corpse()
2648 queue_iterate(&task->threads, th_iter, thread_t, task_threads) in task_clear_corpse()
2658 task_clear_corpse_pending_report(task); in task_clear_corpse()
2660 task_unlock(task); in task_clear_corpse()
2673 task_t task = ipc_kobject_get_locked(port, IKOT_TASK_CONTROL); in task_port_no_senders() local
2675 assert(task != TASK_NULL); in task_port_no_senders()
2676 assert(task_is_a_corpse(task)); in task_port_no_senders()
2679 task_remove_from_corpse_task_list(task); in task_port_no_senders()
2681 task_clear_corpse(task); in task_port_no_senders()
2682 vm_map_unset_corpse_source(task->map); in task_port_no_senders()
2683 task_terminate_internal(task); in task_port_no_senders()
2698 task_t task; in task_port_with_flavor_no_senders() local
2709 task = ipc_kobject_get_locked(port, kotype); in task_port_with_flavor_no_senders()
2710 if (task != TASK_NULL) { in task_port_with_flavor_no_senders()
2711 task_reference(task); in task_port_with_flavor_no_senders()
2715 if (task == TASK_NULL) { in task_port_with_flavor_no_senders()
2726 itk_lock(task); in task_port_with_flavor_no_senders()
2743 task->itk_task_ports[flavor] != port || in task_port_with_flavor_no_senders()
2746 itk_unlock(task); in task_port_with_flavor_no_senders()
2747 task_deallocate(task); in task_port_with_flavor_no_senders()
2751 assert(task->itk_task_ports[flavor] == port); in task_port_with_flavor_no_senders()
2752 task->itk_task_ports[flavor] = IP_NULL; in task_port_with_flavor_no_senders()
2753 itk_unlock(task); in task_port_with_flavor_no_senders()
2757 task_deallocate(task); in task_port_with_flavor_no_senders()
2767 task_wait_till_threads_terminate_locked(task_t task) in task_wait_till_threads_terminate_locked() argument
2770 while (task->active_thread_count != 0) { in task_wait_till_threads_terminate_locked()
2771 assert_wait((event_t)&task->active_thread_count, THREAD_UNINT); in task_wait_till_threads_terminate_locked()
2772 task_unlock(task); in task_wait_till_threads_terminate_locked()
2775 task_lock(task); in task_wait_till_threads_terminate_locked()
2788 task_t task, in task_duplicate_map_and_threads() argument
2815 kr = task_suspend_internal(task); in task_duplicate_map_and_threads()
2820 if (task->map->disable_vmentry_reuse == TRUE) { in task_duplicate_map_and_threads()
2830 memorystatus_abort_vm_map_fork(task); in task_duplicate_map_and_threads()
2833 task_resume_internal(task); in task_duplicate_map_and_threads()
2839 if (memorystatus_allowed_vm_map_fork(task, &is_large)) { in task_duplicate_map_and_threads()
2843 task->map, in task_duplicate_map_and_threads()
2853 vm_map_copy_footprint_ledgers(task, new_task); in task_duplicate_map_and_threads()
2872 memorystatus_abort_vm_map_fork(task); in task_duplicate_map_and_threads()
2874 task_resume_internal(task); in task_duplicate_map_and_threads()
2879 memorystatus_abort_vm_map_fork(task); in task_duplicate_map_and_threads()
2881 task_resume_internal(task); in task_duplicate_map_and_threads()
2885 active_thread_count = task->active_thread_count; in task_duplicate_map_and_threads()
2888 task_resume_internal(task); in task_duplicate_map_and_threads()
2895 task_lock(task); in task_duplicate_map_and_threads()
2896 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_duplicate_map_and_threads()
2910 task_unlock(task); in task_duplicate_map_and_threads()
2953 task_resume_internal(task); in task_duplicate_map_and_threads()
2977 task_t task,
2986 task_t task) in task_terminate_internal() argument
2993 assert(task != kernel_task); in task_terminate_internal()
3002 if (task == self_task) { in task_terminate_internal()
3003 task_lock(task); in task_terminate_internal()
3004 } else if (task < self_task) { in task_terminate_internal()
3005 task_lock(task); in task_terminate_internal()
3009 task_lock(task); in task_terminate_internal()
3013 if (task->task_can_use_secluded_mem) { in task_terminate_internal()
3014 task_set_can_use_secluded_mem_locked(task, FALSE); in task_terminate_internal()
3016 task->task_could_use_secluded_mem = FALSE; in task_terminate_internal()
3017 task->task_could_also_use_secluded_mem = FALSE; in task_terminate_internal()
3019 if (task->task_suppressed_secluded) { in task_terminate_internal()
3020 stop_secluded_suppression(task); in task_terminate_internal()
3024 if (!task->active) { in task_terminate_internal()
3031 task_unlock(task); in task_terminate_internal()
3032 if (self_task != task) { in task_terminate_internal()
3039 if (task_corpse_pending_report(task)) { in task_terminate_internal()
3046 task_unlock(task); in task_terminate_internal()
3047 if (self_task != task) { in task_terminate_internal()
3054 if (self_task != task) { in task_terminate_internal()
3075 bool first_suspension __unused = task_hold_locked(task); in task_terminate_internal()
3076 task->active = FALSE; in task_terminate_internal()
3077 ipc_task_disable(task); in task_terminate_internal()
3083 task_unlock(task); in task_terminate_internal()
3084 task_suspend_conclave(task); in task_terminate_internal()
3085 task_lock(task); in task_terminate_internal()
3093 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_terminate_internal()
3098 void *bsd_info = get_bsdtask_info(task); in task_terminate_internal()
3104 task_unlock(task); in task_terminate_internal()
3107 task_stop_conclave(task, false); in task_terminate_internal()
3110 proc_set_task_policy(task, TASK_POLICY_ATTRIBUTE, in task_terminate_internal()
3122 task_removewatchers(task); in task_terminate_internal()
3129 task_synchronizer_destroy_all(task); in task_terminate_internal()
3134 task_remove_turnstile_watchports(task); in task_terminate_internal()
3137 iokit_task_terminate(task, 1); in task_terminate_internal()
3142 ipc_space_terminate(task->itk_space); in task_terminate_internal()
3146 ledger_disable_panic_on_negative(task->map->pmap->ledger, in task_terminate_internal()
3148 ledger_disable_panic_on_negative(task->map->pmap->ledger, in task_terminate_internal()
3150 ledger_disable_panic_on_negative(task->map->pmap->ledger, in task_terminate_internal()
3152 ledger_disable_panic_on_negative(task->map->pmap->ledger, in task_terminate_internal()
3154 ledger_disable_panic_on_negative(task->map->pmap->ledger, in task_terminate_internal()
3162 if (task->deferred_reclamation_metadata != NULL) { in task_terminate_internal()
3163 vm_deferred_reclamation_buffer_uninstall(task->deferred_reclamation_metadata); in task_terminate_internal()
3182 void *proc = get_bsdtask_info(task); in task_terminate_internal()
3190 pmap_set_process(task->map->pmap, pid, procname); in task_terminate_internal()
3191 if (vm_map_page_shift(task->map) < (int)PAGE_SHIFT) { in task_terminate_internal()
3192 DEBUG4K_LIFE("map %p procname: %s\n", task->map, procname); in task_terminate_internal()
3194 panic("DEBUG4K: %s:%d %d[%s] map %p", __FUNCTION__, __LINE__, pid, procname, task->map); in task_terminate_internal()
3199 vm_map_terminate(task->map); in task_terminate_internal()
3202 vm_shared_region_set(task, NULL); in task_terminate_internal()
3205 task_set_shared_region_id(task, NULL); in task_terminate_internal()
3209 queue_remove(&tasks, task, task_t, tasks); in task_terminate_internal()
3210 queue_enter(&terminated_tasks, task, task_t, tasks); in task_terminate_internal()
3223 if (task->t_kpc & TASK_KPC_FORCED_ALL_CTRS) { in task_terminate_internal()
3224 kpc_force_all_ctrs(task, 0); in task_terminate_internal()
3235 if (task->active_thread_count == 0) { in task_terminate_internal()
3236 coalitions_remove_task(task); in task_terminate_internal()
3243 task_disown_frozen_csegs(task); in task_terminate_internal()
3244 assert(queue_empty(&task->task_frozen_cseg_q)); in task_terminate_internal()
3252 task_deallocate_grp(task, TASK_GRP_INTERNAL); in task_terminate_internal()
3260 task_t task; in tasks_system_suspend() local
3268 queue_iterate(&tasks, task, task_t, tasks) { in tasks_system_suspend()
3269 if (task == kernel_task) { in tasks_system_suspend()
3272 suspend ? task_suspend_internal(task) : task_resume_internal(task); in tasks_system_suspend()
3286 task_start_halt(task_t task) in task_start_halt() argument
3289 task_lock(task); in task_start_halt()
3290 kr = task_start_halt_locked(task, FALSE); in task_start_halt()
3291 task_unlock(task); in task_start_halt()
3296 task_start_halt_locked(task_t task, boolean_t should_mark_corpse) in task_start_halt_locked() argument
3301 assert(task != kernel_task); in task_start_halt_locked()
3305 if (task != get_threadtask(self) && !task_is_a_corpse_fork(task)) { in task_start_halt_locked()
3310 (task->halting || !task->active || !self->active)) { in task_start_halt_locked()
3327 task->halting = TRUE; in task_start_halt_locked()
3335 bool first_suspension __unused = task_hold_locked(task); in task_start_halt_locked()
3339 void *crash_info_ptr = task_get_corpseinfo(task); in task_start_halt_locked()
3340 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_start_halt_locked()
3357 task_unlock(task); in task_start_halt_locked()
3359 task_suspend_conclave(task); in task_start_halt_locked()
3363 task_stop_conclave(task, true); in task_start_halt_locked()
3365 task_lock(task); in task_start_halt_locked()
3369 dispatchqueue_offset = get_dispatchqueue_offset_from_proc(get_bsdtask_info(task)); in task_start_halt_locked()
3373 queue_iterate(&task->threads, thread, thread_t, task_threads) in task_start_halt_locked()
3386 if (task_is_a_corpse(task)) { in task_start_halt_locked()
3400 task->dispatchqueue_offset = dispatchqueue_offset; in task_start_halt_locked()
3402 task_release_locked(task); in task_start_halt_locked()
3419 task_complete_halt(task_t task) in task_complete_halt() argument
3421 task_lock(task); in task_complete_halt()
3422 assert(task->halting); in task_complete_halt()
3423 assert(task == current_task()); in task_complete_halt()
3430 if (task->thread_count > 1) { in task_complete_halt()
3431 assert_wait((event_t)&task->halting, THREAD_UNINT); in task_complete_halt()
3432 task_unlock(task); in task_complete_halt()
3435 task_unlock(task); in task_complete_halt()
3439 if (task->deferred_reclamation_metadata) { in task_complete_halt()
3441 task->deferred_reclamation_metadata); in task_complete_halt()
3443 task->deferred_reclamation_metadata); in task_complete_halt()
3444 task->deferred_reclamation_metadata = NULL; in task_complete_halt()
3454 machine_task_terminate(task); in task_complete_halt()
3459 task_synchronizer_destroy_all(task); in task_complete_halt()
3462 iokit_task_terminate(task, 1); in task_complete_halt()
3472 ipc_space_terminate(task->itk_space); in task_complete_halt()
3478 vm_map_terminate(task->map); in task_complete_halt()
3485 iokit_task_terminate(task, 2); in task_complete_halt()
3491 _task_mark_suspend_source(task_t task) in _task_mark_suspend_source() argument
3496 task_lock_assert_owned(task); in _task_mark_suspend_source()
3497 stats = &task->t_suspend_stats; in _task_mark_suspend_source()
3500 source = &task->t_suspend_sources[idx]; in _task_mark_suspend_source()
3513 _task_mark_suspend_start(task_t task) in _task_mark_suspend_start() argument
3515 task_lock_assert_owned(task); in _task_mark_suspend_start()
3516 task->t_suspend_stats.tss_last_start = mach_absolute_time(); in _task_mark_suspend_start()
3520 _task_mark_suspend_end(task_t task) in _task_mark_suspend_end() argument
3522 task_lock_assert_owned(task); in _task_mark_suspend_end()
3523 task->t_suspend_stats.tss_last_end = mach_absolute_time(); in _task_mark_suspend_end()
3524 task->t_suspend_stats.tss_duration += (task->t_suspend_stats.tss_last_end - in _task_mark_suspend_end()
3525 task->t_suspend_stats.tss_last_start); in _task_mark_suspend_end()
3529 _task_get_suspend_stats_locked(task_t task, task_suspend_stats_t stats) in _task_get_suspend_stats_locked() argument
3531 if (task == TASK_NULL || stats == NULL) { in _task_get_suspend_stats_locked()
3534 task_lock_assert_owned(task); in _task_get_suspend_stats_locked()
3535 memcpy(stats, &task->t_suspend_stats, sizeof(task->t_suspend_stats)); in _task_get_suspend_stats_locked()
3540 _task_get_suspend_sources_locked(task_t task, task_suspend_source_t sources) in _task_get_suspend_sources_locked() argument
3542 if (task == TASK_NULL || sources == NULL) { in _task_get_suspend_sources_locked()
3545 task_lock_assert_owned(task); in _task_get_suspend_sources_locked()
3546 memcpy(sources, task->t_suspend_sources, in _task_get_suspend_sources_locked()
3554 task_get_suspend_stats(task_t task, task_suspend_stats_t stats) in task_get_suspend_stats() argument
3558 if (task == TASK_NULL || stats == NULL) { in task_get_suspend_stats()
3561 task_lock(task); in task_get_suspend_stats()
3562 kr = _task_get_suspend_stats_locked(task, stats); in task_get_suspend_stats()
3563 task_unlock(task); in task_get_suspend_stats()
3566 (void)task; in task_get_suspend_stats()
3573 task_get_suspend_stats_kdp(task_t task, task_suspend_stats_t stats) in task_get_suspend_stats_kdp() argument
3576 if (task == TASK_NULL || stats == NULL) { in task_get_suspend_stats_kdp()
3579 memcpy(stats, &task->t_suspend_stats, sizeof(task->t_suspend_stats)); in task_get_suspend_stats_kdp()
3582 #pragma unused(task, stats) in task_get_suspend_stats_kdp()
3588 task_get_suspend_sources(task_t task, task_suspend_source_array_t sources) in task_get_suspend_sources() argument
3592 if (task == TASK_NULL || sources == NULL) { in task_get_suspend_sources()
3595 task_lock(task); in task_get_suspend_sources()
3596 kr = _task_get_suspend_sources_locked(task, sources); in task_get_suspend_sources()
3597 task_unlock(task); in task_get_suspend_sources()
3600 (void)task; in task_get_suspend_sources()
3607 task_get_suspend_sources_kdp(task_t task, task_suspend_source_array_t sources) in task_get_suspend_sources_kdp() argument
3610 if (task == TASK_NULL || sources == NULL) { in task_get_suspend_sources_kdp()
3613 memcpy(sources, task->t_suspend_sources, in task_get_suspend_sources_kdp()
3617 #pragma unused(task, sources) in task_get_suspend_sources_kdp()
3634 task_t task) in task_hold_locked() argument
3637 void *bsd_info = get_bsdtask_info(task); in task_hold_locked()
3639 assert(task->active); in task_hold_locked()
3641 if (task->suspend_count++ > 0) { in task_hold_locked()
3646 task_pid(task), task->user_stop_count, task->pidsuspended); in task_hold_locked()
3655 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_hold_locked()
3662 _task_mark_suspend_start(task); in task_hold_locked()
3680 task_t task, in task_hold_and_wait() argument
3683 if (task == TASK_NULL) { in task_hold_and_wait()
3687 task_lock(task); in task_hold_and_wait()
3688 if (!task->active) { in task_hold_and_wait()
3689 task_unlock(task); in task_hold_and_wait()
3694 _task_mark_suspend_source(task); in task_hold_and_wait()
3697 bool first_suspension __unused = task_hold_locked(task); in task_hold_and_wait()
3703 task_unlock(task); in task_hold_and_wait()
3704 task_suspend_conclave(task); in task_hold_and_wait()
3705 task_lock(task); in task_hold_and_wait()
3711 if (!task->active || task->suspend_count <= 0) { in task_hold_and_wait()
3712 task_unlock(task); in task_hold_and_wait()
3718 task_wait_locked(task, FALSE); in task_hold_and_wait()
3719 task_unlock(task); in task_hold_and_wait()
3734 task_t task, in task_wait_locked() argument
3739 assert(task->active); in task_wait_locked()
3740 assert(task->suspend_count > 0); in task_wait_locked()
3749 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_wait_locked()
3757 task_is_app_suspended(task_t task) in task_is_app_suspended() argument
3759 return task->pidsuspended; in task_is_app_suspended()
3771 task_t task) in task_release_locked() argument
3774 void *bsd_info = get_bsdtask_info(task); in task_release_locked()
3776 assert(task->active); in task_release_locked()
3777 assert(task->suspend_count > 0); in task_release_locked()
3779 if (--task->suspend_count > 0) { in task_release_locked()
3787 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_release_locked()
3793 KDBG_RELEASE(MACHDBG_CODE(DBG_MACH_SUSPENSION, MACH_TASK_RESUME) | DBG_FUNC_NONE, task_pid(task)); in task_release_locked()
3796 _task_mark_suspend_end(task); in task_release_locked()
3802 task_unlock(task); in task_release_locked()
3803 task_resume_conclave(task); in task_release_locked()
3804 task_lock(task); in task_release_locked()
3819 task_t task) in task_release() argument
3821 if (task == TASK_NULL) { in task_release()
3825 task_lock(task); in task_release()
3827 if (!task->active) { in task_release()
3828 task_unlock(task); in task_release()
3833 task_release_locked(task); in task_release()
3834 task_unlock(task); in task_release()
3841 task_t task, in task_threads_internal() argument
3854 if (task == TASK_NULL) { in task_threads_internal()
3861 task_lock(task); in task_threads_internal()
3862 if (!task->active) { in task_threads_internal()
3863 task_unlock(task); in task_threads_internal()
3869 count_needed = actual = task->thread_count; in task_threads_internal()
3875 task_unlock(task); in task_threads_internal()
3887 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_threads_internal()
3896 task_unlock(task); in task_threads_internal()
3944 task_t task = convert_port_to_task_inspect_no_eval(port); in task_threads_from_user() local
3946 if (task == TASK_NULL) { in task_threads_from_user()
3954 kr = task_threads_internal(task, threads_out, count, THREAD_FLAVOR_CONTROL); in task_threads_from_user()
3957 kr = task_threads_internal(task, threads_out, count, THREAD_FLAVOR_READ); in task_threads_from_user()
3960 kr = task_threads_internal(task, threads_out, count, THREAD_FLAVOR_INSPECT); in task_threads_from_user()
3967 task_deallocate(task); in task_threads_from_user()
3978 task_t task, in place_task_hold() argument
3981 if (!task->active && !task_is_a_corpse(task)) { in place_task_hold()
3986 if (task_is_a_corpse(task)) { in place_task_hold()
3995 task->legacy_stop_count++; in place_task_hold()
3999 _task_mark_suspend_source(task); in place_task_hold()
4002 if (task->user_stop_count++ > 0) { in place_task_hold()
4016 bool first_suspension __unused = task_hold_locked(task); in place_task_hold()
4022 task_unlock(task); in place_task_hold()
4023 task_suspend_conclave(task); in place_task_hold()
4030 task_lock(task); in place_task_hold()
4031 if (!task->active || task->suspend_count <= 0) { in place_task_hold()
4038 task_wait_locked(task, FALSE); in place_task_hold()
4045 task_t task, in release_task_hold() argument
4050 if (!task->active && !task_is_a_corpse(task)) { in release_task_hold()
4055 if (task_is_a_corpse(task)) { in release_task_hold()
4060 if (task->pidsuspended == FALSE) { in release_task_hold()
4063 task->pidsuspended = FALSE; in release_task_hold()
4066 if (task->user_stop_count > (task->pidsuspended ? 1 : 0)) { in release_task_hold()
4077 if (task->legacy_stop_count >= task->user_stop_count) { in release_task_hold()
4078 task->user_stop_count = 0; in release_task_hold()
4081 task->user_stop_count -= task->legacy_stop_count; in release_task_hold()
4083 task->legacy_stop_count = 0; in release_task_hold()
4085 if (mode == TASK_HOLD_LEGACY && task->legacy_stop_count > 0) { in release_task_hold()
4086 task->legacy_stop_count--; in release_task_hold()
4088 if (--task->user_stop_count == 0) { in release_task_hold()
4100 task_release_locked(task); in release_task_hold()
4107 get_task_suspended(task_t task) in get_task_suspended() argument
4109 return 0 != task->user_stop_count; in get_task_suspended()
4129 task_t task) in task_suspend() argument
4135 if (task == TASK_NULL || task == kernel_task) { in task_suspend()
4142 task_lock(task); in task_suspend()
4143 kr = place_task_hold(task, TASK_HOLD_LEGACY); in task_suspend()
4144 task_unlock(task); in task_suspend()
4154 itk_lock(task); in task_suspend()
4155 port = task->itk_resume; in task_suspend()
4157 port = ipc_kobject_alloc_port(task, IKOT_TASK_RESUME, in task_suspend()
4159 task->itk_resume = port; in task_suspend()
4161 (void)ipc_kobject_make_send_nsrequest(port, task, IKOT_TASK_RESUME); in task_suspend()
4163 itk_unlock(task); in task_suspend()
4182 task_pid(task), kr); in task_suspend()
4197 task_t task) in task_resume() argument
4204 if (task == TASK_NULL || task == kernel_task) { in task_resume()
4209 task_lock(task); in task_resume()
4210 kr = release_task_hold(task, TASK_HOLD_LEGACY); in task_resume()
4211 task_unlock(task); in task_resume()
4213 itk_lock(task); /* for itk_resume */ in task_resume()
4215 if (is_active(space) && IP_VALID(task->itk_resume) && in task_resume()
4216 …ipc_hash_lookup(space, ip_to_object(task->itk_resume), &resume_port_name, &resume_port_entry) == T… in task_resume()
4223 itk_unlock(task); in task_resume()
4231 itk_unlock(task); in task_resume()
4236 task_pid(task)); in task_resume()
4248 task_suspend_internal(task_t task) in task_suspend_internal() argument
4252 if (task == TASK_NULL || task == kernel_task) { in task_suspend_internal()
4256 task_lock(task); in task_suspend_internal()
4257 kr = place_task_hold(task, TASK_HOLD_NORMAL); in task_suspend_internal()
4258 task_unlock(task); in task_suspend_internal()
4268 task_t task, in task_suspend2_grp() argument
4274 kr = task_suspend_internal(task); in task_suspend2_grp()
4285 task_reference_grp(task, grp); in task_suspend2_grp()
4286 *suspend_token = task; in task_suspend2_grp()
4293 task_t task, in task_suspend2_mig() argument
4296 return task_suspend2_grp(task, suspend_token, TASK_GRP_MIG); in task_suspend2_mig()
4301 task_t task, in task_suspend2_external() argument
4304 return task_suspend2_grp(task, suspend_token, TASK_GRP_EXTERNAL); in task_suspend2_external()
4313 task_suspension_token_t task) in task_resume_internal() argument
4317 if (task == TASK_NULL || task == kernel_task) { in task_resume_internal()
4321 task_lock(task); in task_resume_internal()
4322 kr = release_task_hold(task, TASK_HOLD_NORMAL); in task_resume_internal()
4323 task_unlock(task); in task_resume_internal()
4332 task_suspension_token_t task, in task_resume2_grp() argument
4337 kr = task_resume_internal(task); in task_resume2_grp()
4338 task_suspension_token_deallocate_grp(task, grp); in task_resume2_grp()
4345 task_suspension_token_t task) in task_resume2_mig() argument
4347 return task_resume2_grp(task, TASK_GRP_MIG); in task_resume2_mig()
4352 task_suspension_token_t task) in task_resume2_external() argument
4354 return task_resume2_grp(task, TASK_GRP_EXTERNAL); in task_resume2_external()
4360 task_t task = convert_port_to_task_suspension_token(port); in task_suspension_no_senders() local
4363 if (task == TASK_NULL) { in task_suspension_no_senders()
4367 if (task == kernel_task) { in task_suspension_no_senders()
4368 task_suspension_token_deallocate(task); in task_suspension_no_senders()
4372 task_lock(task); in task_suspension_no_senders()
4377 release_task_hold(task, TASK_HOLD_LEGACY_ALL); in task_suspension_no_senders()
4380 task_unlock(task); in task_suspension_no_senders()
4382 task_suspension_token_deallocate(task); /* drop token reference */ in task_suspension_no_senders()
4392 task_t task = convert_port_to_task_suspension_token(port); in task_suspension_send_once() local
4394 if (task == TASK_NULL || task == kernel_task) { in task_suspension_send_once()
4399 task_lock(task); in task_suspension_send_once()
4400 release_task_hold(task, TASK_HOLD_NORMAL); in task_suspension_send_once()
4401 task_unlock(task); in task_suspension_send_once()
4403 task_suspension_token_deallocate(task); /* drop token reference */ in task_suspension_send_once()
4407 task_pidsuspend_locked(task_t task) in task_pidsuspend_locked() argument
4411 if (task->pidsuspended) { in task_pidsuspend_locked()
4416 task->pidsuspended = TRUE; in task_pidsuspend_locked()
4418 kr = place_task_hold(task, TASK_HOLD_PIDSUSPEND); in task_pidsuspend_locked()
4420 task->pidsuspended = FALSE; in task_pidsuspend_locked()
4437 task_t task) in task_pidsuspend() argument
4441 if (task == TASK_NULL || task == kernel_task) { in task_pidsuspend()
4445 task_lock(task); in task_pidsuspend()
4447 kr = task_pidsuspend_locked(task); in task_pidsuspend()
4449 task_unlock(task); in task_pidsuspend()
4451 if ((KERN_SUCCESS == kr) && task->message_app_suspended) { in task_pidsuspend()
4452 iokit_task_app_suspended_changed(task); in task_pidsuspend()
4467 task_t task) in task_pidresume() argument
4471 if (task == TASK_NULL || task == kernel_task) { in task_pidresume()
4475 task_lock(task); in task_pidresume()
4479 while (task->changing_freeze_state) { in task_pidresume()
4480 assert_wait((event_t)&task->changing_freeze_state, THREAD_UNINT); in task_pidresume()
4481 task_unlock(task); in task_pidresume()
4484 task_lock(task); in task_pidresume()
4486 task->changing_freeze_state = TRUE; in task_pidresume()
4489 kr = release_task_hold(task, TASK_HOLD_PIDSUSPEND); in task_pidresume()
4491 task_unlock(task); in task_pidresume()
4493 if ((KERN_SUCCESS == kr) && task->message_app_suspended) { in task_pidresume()
4494 iokit_task_app_suspended_changed(task); in task_pidresume()
4499 task_lock(task); in task_pidresume()
4502 task->frozen = FALSE; in task_pidresume()
4504 task->changing_freeze_state = FALSE; in task_pidresume()
4505 thread_wakeup(&task->changing_freeze_state); in task_pidresume()
4507 task_unlock(task); in task_pidresume()
4530 task_t task, in task_add_turnstile_watchports() argument
4540 if (!task->active) { in task_add_turnstile_watchports()
4546 watchports = task_watchports_alloc_init(task, thread, portwatch_count); in task_add_turnstile_watchports()
4549 is_write_lock(task->itk_space); in task_add_turnstile_watchports()
4552 refs = task_add_turnstile_watchports_locked(task, in task_add_turnstile_watchports()
4557 is_write_unlock(task->itk_space); in task_add_turnstile_watchports()
4581 task_t task) in task_remove_turnstile_watchports() argument
4589 is_write_lock(task->itk_space); in task_remove_turnstile_watchports()
4592 if (task->watchports == NULL) { in task_remove_turnstile_watchports()
4593 is_write_unlock(task->itk_space); in task_remove_turnstile_watchports()
4596 watchports = task->watchports; in task_remove_turnstile_watchports()
4599 refs = task_remove_turnstile_watchports_locked(task, watchports, in task_remove_turnstile_watchports()
4602 is_write_unlock(task->itk_space); in task_remove_turnstile_watchports()
4743 task_t task, in task_add_turnstile_watchports_locked() argument
4752 if (!task->active) { in task_add_turnstile_watchports_locked()
4757 assert(task->watchports == NULL); in task_add_turnstile_watchports_locked()
4758 task->watchports = watchports; in task_add_turnstile_watchports_locked()
4763 task_watchport_elem_init(&watchports->tw_elem[i], task, port); in task_add_turnstile_watchports_locked()
4789 task->watchports = NULL; in task_add_turnstile_watchports_locked()
4811 task_t task, in task_remove_turnstile_watchports_locked() argument
4833 task->watchports = NULL; in task_remove_turnstile_watchports_locked()
4851 task_t task, in task_watchports_alloc_init() argument
4858 task_reference(task); in task_watchports_alloc_init()
4860 watchports->tw_task = task; in task_watchports_alloc_init()
4899 task_t task = watchport_elem->twe_task; in task_watchport_elem_deallocate() local
4903 assert(task != NULL); in task_watchport_elem_deallocate()
4906 is_write_lock(task->itk_space); in task_watchport_elem_deallocate()
4908 watchports = task->watchports; in task_watchport_elem_deallocate()
4918 task->watchports = NULL; in task_watchport_elem_deallocate()
4921 is_write_unlock(task->itk_space); in task_watchport_elem_deallocate()
4937 task_has_watchports(task_t task) in task_has_watchports() argument
4939 return task->watchports != NULL; in task_has_watchports()
4947 task_disconnect_page_mappings(task_t task) in task_disconnect_page_mappings() argument
4951 if (task == TASK_NULL || task == kernel_task) { in task_disconnect_page_mappings()
4980 task_lock(task); in task_disconnect_page_mappings()
4982 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_disconnect_page_mappings()
4989 task->task_disconnected_count++; in task_disconnect_page_mappings()
4992 if (task->task_unnested == FALSE) { in task_disconnect_page_mappings()
4994 task->task_unnested = TRUE; in task_disconnect_page_mappings()
4998 task_unlock(task); in task_disconnect_page_mappings()
5005 task, do_unnest, task->task_disconnected_count); in task_disconnect_page_mappings()
5007 page_count = vm_map_disconnect_page_mappings(task->map, do_unnest); in task_disconnect_page_mappings()
5010 task, page_count); in task_disconnect_page_mappings()
5036 task_t task, in task_freeze() argument
5048 if (task == TASK_NULL || task == kernel_task) { in task_freeze()
5052 task_lock(task); in task_freeze()
5054 while (task->changing_freeze_state) { in task_freeze()
5055 assert_wait((event_t)&task->changing_freeze_state, THREAD_UNINT); in task_freeze()
5056 task_unlock(task); in task_freeze()
5059 task_lock(task); in task_freeze()
5061 if (task->frozen) { in task_freeze()
5062 task_unlock(task); in task_freeze()
5065 task->changing_freeze_state = TRUE; in task_freeze()
5067 freezer_context_global.freezer_ctx_task = task; in task_freeze()
5069 task_unlock(task); in task_freeze()
5071 kr = vm_map_freeze(task, in task_freeze()
5081 task_lock(task); in task_freeze()
5084 task->frozen = TRUE; in task_freeze()
5101 task->changing_freeze_state = FALSE; in task_freeze()
5102 thread_wakeup(&task->changing_freeze_state); in task_freeze()
5104 task_unlock(task); in task_freeze()
5133 task_t task) in task_thaw() argument
5135 if (task == TASK_NULL || task == kernel_task) { in task_thaw()
5139 task_lock(task); in task_thaw()
5141 while (task->changing_freeze_state) { in task_thaw()
5142 assert_wait((event_t)&task->changing_freeze_state, THREAD_UNINT); in task_thaw()
5143 task_unlock(task); in task_thaw()
5146 task_lock(task); in task_thaw()
5148 if (!task->frozen) { in task_thaw()
5149 task_unlock(task); in task_thaw()
5152 task->frozen = FALSE; in task_thaw()
5154 task_unlock(task); in task_thaw()
5160 task_update_frozen_to_swap_acct(task_t task, int64_t amount, freezer_acct_op_t op) in task_update_frozen_to_swap_acct() argument
5172 assert(task); in task_update_frozen_to_swap_acct()
5178 ledger_credit_nocheck(task->ledger, task_ledgers.frozen_to_swap, amount); in task_update_frozen_to_swap_acct()
5180 ledger_debit_nocheck(task->ledger, task_ledgers.frozen_to_swap, amount); in task_update_frozen_to_swap_acct()
5189 task_t task, in task_set_security_tokens() argument
5197 if (task == TASK_NULL) { in task_set_security_tokens()
5201 task_lock(task); in task_set_security_tokens()
5202 task_set_tokens(task, &sec_token, &audit_token); in task_set_security_tokens()
5203 task_unlock(task); in task_set_security_tokens()
5212 kr = task_set_special_port_internal(task, TASK_HOST_PORT, host_port); in task_set_security_tokens()
5235 task_t task, in task_set_info() argument
5240 if (task == TASK_NULL) { in task_set_info()
5254 _task_fill_times(task_t task, time_value_t *user_time, time_value_t *sys_time) in _task_fill_times() argument
5259 struct recount_times_mach times = recount_task_terminated_times(task); in _task_fill_times()
5271 task_t task, in task_info() argument
5278 bool is_kernel_task = (task == kernel_task); in task_info()
5280 if (task == TASK_NULL) { in task_info()
5285 task_lock(task); in task_info()
5287 if (task != current_task() && !task->active) { in task_info()
5288 task_unlock(task); in task_info()
5311 vm_map_adjusted_size(is_kernel_task ? kernel_map : task->map); in task_info()
5317 ledger_get_lifetime_max(task->ledger, task_ledgers.phys_mem, &tmp); in task_info()
5319 ledger_get_balance(task->ledger, task_ledgers.phys_mem, &tmp); in task_info()
5323 _task_fill_times(task, &basic_info->user_time, in task_info()
5327 basic_info->suspend_count = task->user_stop_count; in task_info()
5346 kernel_map : task->map); in task_info()
5347 ledger_get_balance(task->ledger, task_ledgers.phys_mem, in task_info()
5350 basic_info->suspend_count = task->user_stop_count; in task_info()
5351 _task_fill_times(task, &basic_info->user_time, in task_info()
5371 kernel_map : task->map); in task_info()
5372 …ledger_get_balance(task->ledger, task_ledgers.phys_mem, (ledger_amount_t *)&basic_info->resident_s… in task_info()
5374 basic_info->suspend_count = task->user_stop_count; in task_info()
5375 _task_fill_times(task, &basic_info->user_time, in task_info()
5395 kernel_map : task->map); in task_info()
5396 …ledger_get_balance(task->ledger, task_ledgers.phys_mem, (ledger_amount_t *) &basic_info->resident_… in task_info()
5397 …ledger_get_lifetime_max(task->ledger, task_ledgers.phys_mem, (ledger_amount_t *) &basic_info->resi… in task_info()
5399 basic_info->suspend_count = task->user_stop_count; in task_info()
5400 _task_fill_times(task, &basic_info->user_time, in task_info()
5421 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_info()
5447 recount_task_terminated_times(task); in task_info()
5448 struct recount_times_mach total_times = recount_task_times(task); in task_info()
5478 info->all_image_info_addr = task->all_image_info_addr; in task_info()
5479 info->all_image_info_size = task->all_image_info_size; in task_info()
5483 info->all_image_info_format = task_has_64Bit_addr(task) ? in task_info()
5505 p = get_bsdtask_info(task); in task_info()
5511 info->extmod_statistics = task->extmod_statistics; in task_info()
5533 if (task == kernel_task) { in task_info()
5539 task_unlock(task); in task_info()
5549 queue_iterate(&tasks, task, task_t, tasks) { in task_info()
5550 if (task == kernel_task) { in task_info()
5551 if (ledger_get_entries(task->ledger, in task_info()
5558 if (!ledger_get_entries(task->ledger, in task_info()
5566 if (!ledger_get_entries(task->ledger, in task_info()
5571 if (!ledger_get_entries(task->ledger, in task_info()
5576 task_unlock(task); in task_info()
5609 if (task != kernel_task) { in task_info()
5614 rr_base->base_priority = task->priority; in task_info()
5637 if (task == kernel_task) { in task_info()
5642 ts_base->base_priority = task->priority; in task_info()
5659 *sec_token_p = *task_get_sec_token(task); in task_info()
5676 *audit_token_p = *task_get_audit_token(task); in task_info()
5700 events_info->faults = (int32_t) MIN(counter_load(&task->faults), INT32_MAX); in task_info()
5701 events_info->pageins = (int32_t) MIN(counter_load(&task->pageins), INT32_MAX); in task_info()
5702 events_info->cow_faults = (int32_t) MIN(counter_load(&task->cow_faults), INT32_MAX); in task_info()
5703 events_info->messages_sent = (int32_t) MIN(counter_load(&task->messages_sent), INT32_MAX); in task_info()
5704 events_info->messages_received = (int32_t) MIN(counter_load(&task->messages_received), INT32_MAX); in task_info()
5706 n_syscalls_mach = task->syscalls_mach; in task_info()
5707 n_syscalls_unix = task->syscalls_unix; in task_info()
5708 n_csw = task->c_switch; in task_info()
5710 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_info()
5730 error = task_affinity_info(task, task_info_out, task_info_count); in task_info()
5740 task_power_info_locked(task, (task_power_info_t)task_info_out, NULL, NULL, NULL); in task_info()
5751 task_power_info_locked(task, &tpiv2->cpu_energy, &tpiv2->gpu_energy, tpiv2, NULL); in task_info()
5897 task_unlock(task); in task_info()
5900 map = task->map; in task_info()
5902 task_unlock(task); in task_info()
5910 …ledger_get_balance(task->ledger, task_ledgers.phys_mem, (ledger_amount_t *) &vm_info->resident_siz… in task_info()
5911 …ledger_get_lifetime_max(task->ledger, task_ledgers.phys_mem, (ledger_amount_t *) &vm_info->residen… in task_info()
5915 ledger_get_balance(task->ledger, task_ledgers.external, (ledger_amount_t *) &vm_info->external); in task_info()
5916 …ledger_get_lifetime_max(task->ledger, task_ledgers.external, (ledger_amount_t *) &vm_info->externa… in task_info()
5917 ledger_get_balance(task->ledger, task_ledgers.internal, (ledger_amount_t *) &vm_info->internal); in task_info()
5918 …ledger_get_lifetime_max(task->ledger, task_ledgers.internal, (ledger_amount_t *) &vm_info->interna… in task_info()
5919 ledger_get_balance(task->ledger, task_ledgers.reusable, (ledger_amount_t *) &vm_info->reusable); in task_info()
5920 …ledger_get_lifetime_max(task->ledger, task_ledgers.reusable, (ledger_amount_t *) &vm_info->reusabl… in task_info()
5921 …ledger_get_balance(task->ledger, task_ledgers.internal_compressed, (ledger_amount_t*) &vm_info->co… in task_info()
5922 …ledger_get_lifetime_max(task->ledger, task_ledgers.internal_compressed, (ledger_amount_t*) &vm_inf… in task_info()
5923 …ledger_get_entries(task->ledger, task_ledgers.internal_compressed, (ledger_amount_t*) &vm_info->co… in task_info()
5924 …ledger_get_balance(task->ledger, task_ledgers.neural_nofootprint_total, (ledger_amount_t *) &vm_in… in task_info()
5925 …ledger_get_lifetime_max(task->ledger, task_ledgers.neural_nofootprint_total, (ledger_amount_t *) &… in task_info()
5998 task_lock(task); in task_info()
6000 if ((task != current_task()) && (!task->active)) { in task_info()
6007 (mach_vm_size_t) get_task_phys_footprint(task); in task_info()
6016 ledger_get_lifetime_max(task->ledger, in task_info()
6019 ledger_get_balance(task->ledger, in task_info()
6022 ledger_get_balance(task->ledger, in task_info()
6025 ledger_get_balance(task->ledger, in task_info()
6028 ledger_get_balance(task->ledger, in task_info()
6031 ledger_get_balance(task->ledger, in task_info()
6034 ledger_get_balance(task->ledger, in task_info()
6037 ledger_get_balance(task->ledger, in task_info()
6040 ledger_get_balance(task->ledger, in task_info()
6043 ledger_get_balance(task->ledger, in task_info()
6046 ledger_get_balance(task->ledger, in task_info()
6049 ledger_get_balance(task->ledger, in task_info()
6052 ledger_get_balance(task->ledger, in task_info()
6055 ledger_get_balance(task->ledger, in task_info()
6058 ledger_get_balance(task->ledger, in task_info()
6061 ledger_get_balance(task->ledger, in task_info()
6064 ledger_get_balance(task->ledger, in task_info()
6067 ledger_get_balance(task->ledger, in task_info()
6070 ledger_get_balance(task->ledger, in task_info()
6073 ledger_get_balance(task->ledger, in task_info()
6076 ledger_get_balance(task->ledger, in task_info()
6082 if (get_bsdtask_info(task)) { in task_info()
6084 memorystatus_available_memory_internal(get_bsdtask_info(task)); in task_info()
6092 uint64_t total = task->decompressions; in task_info()
6093 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_info()
6100 ledger_get_balance(task->ledger, task_ledgers.swapins, in task_info()
6105 ledger_get_balance(task->ledger, in task_info()
6108 ledger_get_lifetime_max(task->ledger, in task_info()
6148 KERN_SUCCESS == ledger_get_entries(task->ledger, in task_info()
6178 error = vm_purgeable_account(task, acnt_info); in task_info()
6200 flags_info->flags = task->t_flags & (TF_64B_ADDR | TF_64B_DATA); in task_info()
6210 ipc_space_t space = task->itk_space; in task_info()
6233 dbg_info->suspend_count = task->suspend_count; in task_info()
6250 error = _task_get_suspend_stats_locked(task, (task_suspend_stats_t)task_info_out); in task_info()
6265 error = _task_get_suspend_sources_locked(task, (task_suspend_source_t)task_info_out); in task_info()
6277 task_unlock(task); in task_info()
6301 task_t task; in task_info_from_user() local
6305 task = convert_port_to_task_read(task_port); in task_info_from_user()
6307 task = convert_port_to_task_name(task_port); in task_info_from_user()
6310 ret = task_info(task, flavor, task_info_out, task_info_count); in task_info_from_user()
6312 task_deallocate(task); in task_info_from_user()
6331 task_t task, in task_dyld_process_info_update_helper() argument
6342 assert(task->itk_dyld_notify != NULL); in task_dyld_process_info_update_helper()
6343 notifiers_ptr = task->itk_dyld_notify; in task_dyld_process_info_update_helper()
6344 task->itk_dyld_notify = NULL; in task_dyld_process_info_update_helper()
6345 itk_unlock(task); in task_dyld_process_info_update_helper()
6348 (void)copyoutmap_atomic32(task->map, MACH_PORT_NULL, magic_addr); /* unset magic */ in task_dyld_process_info_update_helper()
6350 itk_unlock(task); in task_dyld_process_info_update_helper()
6351 (void)copyoutmap_atomic32(task->map, (mach_port_name_t)DYLD_PROCESS_INFO_NOTIFY_MAGIC, in task_dyld_process_info_update_helper()
6391 task_t task, in task_dyld_process_info_notify_register() argument
6404 if (task == TASK_NULL || task == kernel_task) { in task_dyld_process_info_notify_register()
6418 kr = task_info(task, TASK_DYLD_INFO, (task_info_t)&dyld_info, &info_count); in task_dyld_process_info_notify_register()
6432 if (task->itk_dyld_notify == NULL) { in task_dyld_process_info_notify_register()
6439 itk_lock(task); in task_dyld_process_info_notify_register()
6441 if (task->itk_dyld_notify == NULL) { in task_dyld_process_info_notify_register()
6443 itk_unlock(task); in task_dyld_process_info_notify_register()
6447 task->itk_dyld_notify = notifiers_ptr; in task_dyld_process_info_notify_register()
6451 assert(task->itk_dyld_notify != NULL); in task_dyld_process_info_notify_register()
6454 portp = &task->itk_dyld_notify[slot]; in task_dyld_process_info_notify_register()
6477 portp = &task->itk_dyld_notify[slot]; in task_dyld_process_info_notify_register()
6489 task_dyld_process_info_update_helper(task, active_count, in task_dyld_process_info_notify_register()
6526 task_t task, in task_dyld_process_info_notify_deregister() argument
6539 if (task == TASK_NULL || task == kernel_task) { in task_dyld_process_info_notify_deregister()
6553 kr = task_info(task, TASK_DYLD_INFO, (task_info_t)&dyld_info, &info_count); in task_dyld_process_info_notify_deregister()
6577 itk_lock(task); in task_dyld_process_info_notify_deregister()
6579 if (task->itk_dyld_notify == NULL) { in task_dyld_process_info_notify_deregister()
6580 itk_unlock(task); in task_dyld_process_info_notify_deregister()
6587 portp = &task->itk_dyld_notify[slot]; in task_dyld_process_info_notify_deregister()
6602 task_dyld_process_info_update_helper(task, active_count, in task_dyld_process_info_notify_deregister()
6619 task_t task, in task_power_info_locked() argument
6630 task_lock_assert_owned(task); in task_power_info_locked()
6632 ledger_get_entries(task->ledger, task_ledgers.interrupt_wakeups, in task_power_info_locked()
6634 ledger_get_entries(task->ledger, task_ledgers.platform_idle_wakeups, in task_power_info_locked()
6637 info->task_timer_wakeups_bin_1 = task->task_timer_wakeups_bin_1; in task_power_info_locked()
6638 info->task_timer_wakeups_bin_2 = task->task_timer_wakeups_bin_2; in task_power_info_locked()
6642 recount_task_usage_perf_only(task, &usage, &usage_perf); in task_power_info_locked()
6646 runnable_time_sum = task->total_runnable_time; in task_power_info_locked()
6649 ginfo->task_gpu_utilisation = task->task_gpu_ns; in task_power_info_locked()
6654 infov2->task_pset_switches = task->ps_switch; in task_power_info_locked()
6660 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_power_info_locked()
6717 task_t task) in task_gpu_utilisation() argument
6723 task_lock(task); in task_gpu_utilisation()
6724 gpu_time += task->task_gpu_ns; in task_gpu_utilisation()
6726 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_gpu_utilisation()
6735 task_unlock(task); in task_gpu_utilisation()
6738 (void)task; in task_gpu_utilisation()
6748 task_t task, in task_update_cpu_time_qos_stats() argument
6756 task_lock(task); in task_update_cpu_time_qos_stats()
6758 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_update_cpu_time_qos_stats()
6767 eqos_stats[THREAD_QOS_DEFAULT] += task->cpu_time_eqos_stats.cpu_time_qos_default; in task_update_cpu_time_qos_stats()
6768 eqos_stats[THREAD_QOS_MAINTENANCE] += task->cpu_time_eqos_stats.cpu_time_qos_maintenance; in task_update_cpu_time_qos_stats()
6769 eqos_stats[THREAD_QOS_BACKGROUND] += task->cpu_time_eqos_stats.cpu_time_qos_background; in task_update_cpu_time_qos_stats()
6770 eqos_stats[THREAD_QOS_UTILITY] += task->cpu_time_eqos_stats.cpu_time_qos_utility; in task_update_cpu_time_qos_stats()
6771 eqos_stats[THREAD_QOS_LEGACY] += task->cpu_time_eqos_stats.cpu_time_qos_legacy; in task_update_cpu_time_qos_stats()
6772 eqos_stats[THREAD_QOS_USER_INITIATED] += task->cpu_time_eqos_stats.cpu_time_qos_user_initiated; in task_update_cpu_time_qos_stats()
6773 …eqos_stats[THREAD_QOS_USER_INTERACTIVE] += task->cpu_time_eqos_stats.cpu_time_qos_user_interactive; in task_update_cpu_time_qos_stats()
6777 rqos_stats[THREAD_QOS_DEFAULT] += task->cpu_time_rqos_stats.cpu_time_qos_default; in task_update_cpu_time_qos_stats()
6778 rqos_stats[THREAD_QOS_MAINTENANCE] += task->cpu_time_rqos_stats.cpu_time_qos_maintenance; in task_update_cpu_time_qos_stats()
6779 rqos_stats[THREAD_QOS_BACKGROUND] += task->cpu_time_rqos_stats.cpu_time_qos_background; in task_update_cpu_time_qos_stats()
6780 rqos_stats[THREAD_QOS_UTILITY] += task->cpu_time_rqos_stats.cpu_time_qos_utility; in task_update_cpu_time_qos_stats()
6781 rqos_stats[THREAD_QOS_LEGACY] += task->cpu_time_rqos_stats.cpu_time_qos_legacy; in task_update_cpu_time_qos_stats()
6782 rqos_stats[THREAD_QOS_USER_INITIATED] += task->cpu_time_rqos_stats.cpu_time_qos_user_initiated; in task_update_cpu_time_qos_stats()
6783 …rqos_stats[THREAD_QOS_USER_INTERACTIVE] += task->cpu_time_rqos_stats.cpu_time_qos_user_interactive; in task_update_cpu_time_qos_stats()
6786 task_unlock(task); in task_update_cpu_time_qos_stats()
6791 task_t task, in task_purgable_info() argument
6794 if (task == TASK_NULL || stats == NULL) { in task_purgable_info()
6798 task_reference(task); in task_purgable_info()
6799 vm_purgeable_stats((vm_purgeable_info_t)stats, task); in task_purgable_info()
6801 task_deallocate(task); in task_purgable_info()
6807 task_t task, in task_vtimer_set() argument
6813 task_lock(task); in task_vtimer_set()
6815 task->vtimers |= which; in task_vtimer_set()
6819 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_vtimer_set()
6830 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_vtimer_set()
6840 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_vtimer_set()
6850 task_unlock(task); in task_vtimer_set()
6855 task_t task, in task_vtimer_clear() argument
6858 task_lock(task); in task_vtimer_clear()
6860 task->vtimers &= ~which; in task_vtimer_clear()
6862 task_unlock(task); in task_vtimer_clear()
6868 task_t task, in task_vtimer_update() argument
6877 assert(task == current_task()); in task_vtimer_update()
6882 if ((task->vtimers & which) != (uint32_t)which) { in task_vtimer_update()
6921 task_t task) in get_task_dispatchqueue_offset() argument
6923 return task->dispatchqueue_offset; in get_task_dispatchqueue_offset()
6927 task_synchronizer_destroy_all(task_t task) in task_synchronizer_destroy_all() argument
6932 semaphore_destroy_all(task); in task_synchronizer_destroy_all()
6943 task_t task, in task_set_state() argument
6950 if (task == TASK_NULL) { in task_set_state()
6954 task_lock(task); in task_set_state()
6956 if (!task->active) { in task_set_state()
6957 task_unlock(task); in task_set_state()
6961 ret = machine_task_set_state(task, flavor, state, state_count); in task_set_state()
6963 task_unlock(task); in task_set_state()
6974 task_t task, in task_get_state() argument
6981 if (task == TASK_NULL) { in task_get_state()
6985 task_lock(task); in task_get_state()
6987 if (!task->active) { in task_get_state()
6988 task_unlock(task); in task_get_state()
6992 ret = machine_task_get_state(task, flavor, state, state_count); in task_get_state()
6994 task_unlock(task); in task_get_state()
7015 task_t task = current_task(); in PROC_VIOLATED_GUARD__SEND_EXC_GUARD() local
7017 void *bsd_info = get_bsdtask_info(task); in PROC_VIOLATED_GUARD__SEND_EXC_GUARD()
7022 kr = task_enqueue_exception_with_corpse(task, EXC_GUARD, codes, 2, reason, backtrace_only); in PROC_VIOLATED_GUARD__SEND_EXC_GUARD()
7041 task_get_memlimit_is_active(task_t task) in task_get_memlimit_is_active() argument
7043 assert(task != NULL); in task_get_memlimit_is_active()
7045 if (task->memlimit_is_active == 1) { in task_get_memlimit_is_active()
7053 task_set_memlimit_is_active(task_t task, boolean_t memlimit_is_active) in task_set_memlimit_is_active() argument
7055 assert(task != NULL); in task_set_memlimit_is_active()
7058 task->memlimit_is_active = 1; in task_set_memlimit_is_active()
7060 task->memlimit_is_active = 0; in task_set_memlimit_is_active()
7065 task_get_memlimit_is_fatal(task_t task) in task_get_memlimit_is_fatal() argument
7067 assert(task != NULL); in task_get_memlimit_is_fatal()
7069 if (task->memlimit_is_fatal == 1) { in task_get_memlimit_is_fatal()
7077 task_set_memlimit_is_fatal(task_t task, boolean_t memlimit_is_fatal) in task_set_memlimit_is_fatal() argument
7079 assert(task != NULL); in task_set_memlimit_is_fatal()
7082 task->memlimit_is_fatal = 1; in task_set_memlimit_is_fatal()
7084 task->memlimit_is_fatal = 0; in task_set_memlimit_is_fatal()
7089 task_get_dirty_start(task_t task) in task_get_dirty_start() argument
7091 return task->memstat_dirty_start; in task_get_dirty_start()
7095 task_set_dirty_start(task_t task, uint64_t start) in task_set_dirty_start() argument
7097 task_lock(task); in task_set_dirty_start()
7098 task->memstat_dirty_start = start; in task_set_dirty_start()
7099 task_unlock(task); in task_set_dirty_start()
7103 task_has_triggered_exc_resource(task_t task, boolean_t memlimit_is_active) in task_has_triggered_exc_resource() argument
7107 assert(task == current_task()); in task_has_triggered_exc_resource()
7114 triggered = (task->memlimit_active_exc_resource ? TRUE : FALSE); in task_has_triggered_exc_resource()
7116 triggered = (task->memlimit_inactive_exc_resource ? TRUE : FALSE); in task_has_triggered_exc_resource()
7123 task_mark_has_triggered_exc_resource(task_t task, boolean_t memlimit_is_active) in task_mark_has_triggered_exc_resource() argument
7125 assert(task == current_task()); in task_mark_has_triggered_exc_resource()
7133 task->memlimit_active_exc_resource = 1; in task_mark_has_triggered_exc_resource()
7135 task->memlimit_inactive_exc_resource = 1; in task_mark_has_triggered_exc_resource()
7144 task_t task = current_task(); in PROC_CROSSED_HIGH_WATERMARK__SEND_EXC_RESOURCE_AND_SUSPEND() local
7234 vm_map_set_corpse_source(task->map); in PROC_CROSSED_HIGH_WATERMARK__SEND_EXC_RESOURCE_AND_SUSPEND()
7243 task_suspend_internal(task); in PROC_CROSSED_HIGH_WATERMARK__SEND_EXC_RESOURCE_AND_SUSPEND()
7245 task_resume_internal(task); in PROC_CROSSED_HIGH_WATERMARK__SEND_EXC_RESOURCE_AND_SUSPEND()
7252 task_enqueue_exception_with_corpse(task, EXC_RESOURCE, in PROC_CROSSED_HIGH_WATERMARK__SEND_EXC_RESOURCE_AND_SUSPEND()
7279 task_t task; in task_footprint_exceeded() local
7306 task = current_task(); in task_footprint_exceeded()
7308 ledger_get_limit(task->ledger, task_ledgers.phys_footprint, &max_footprint); in task_footprint_exceeded()
7310 ledger_get_diag_mem_threshold(task->ledger, task_ledgers.phys_footprint, &diag_threshold_limit); in task_footprint_exceeded()
7313 if (task->deferred_reclamation_metadata != NULL) { in task_footprint_exceeded()
7318 vm_deferred_reclamation_reclaim_from_task_sync(task, UINT64_MAX); in task_footprint_exceeded()
7319 ledger_get_balance(task->ledger, task_ledgers.phys_footprint, ¤t_footprint); in task_footprint_exceeded()
7329 memlimit_is_active = task_get_memlimit_is_active(task); in task_footprint_exceeded()
7330 memlimit_is_fatal = task_get_memlimit_is_fatal(task) == FALSE ? IS_NOT_FATAL : IS_FATAL; in task_footprint_exceeded()
7333 …task_process_crossed_limit_no_diag(task, max_footprint_mb, memlimit_is_fatal, memlimit_is_active, … in task_footprint_exceeded()
7338 …task_process_crossed_limit_no_diag(task, max_footprint_mb, memlimit_is_fatal, memlimit_is_active, … in task_footprint_exceeded()
7345 task_process_crossed_limit_no_diag(task_t task, ledger_amount_t ledger_limit_size, bool memlimit_is… in task_process_crossed_limit_no_diag() argument
7357 if (is_warning == IS_NOT_WARNING && !task_has_triggered_exc_resource(task, memlimit_is_active)) { in task_process_crossed_limit_no_diag()
7362 task_mark_has_triggered_exc_resource(task, memlimit_is_active); in task_process_crossed_limit_no_diag()
7389 task_t task, in task_set_phys_footprint_limit() argument
7406 memlimit_is_active = task_get_memlimit_is_active(task); in task_set_phys_footprint_limit()
7407 memlimit_is_fatal = task_get_memlimit_is_fatal(task); in task_set_phys_footprint_limit()
7409 …return task_set_phys_footprint_limit_internal(task, new_limit_mb, old_limit_mb, memlimit_is_active… in task_set_phys_footprint_limit()
7419 task_t task, in task_set_diag_footprint_limit() argument
7429 return task_set_diag_footprint_limit_internal(task, new_limit_mb, old_limit_mb); in task_set_diag_footprint_limit()
7458 task_t task, in task_set_phys_footprint_limit_internal() argument
7469 ret = ledger_get_limit(task->ledger, task_ledgers.phys_footprint, &old); in task_set_phys_footprint_limit_internal()
7479 diag_threshold_validity = task_check_memorythreshold_is_valid( task, new_limit_mb, false); in task_set_phys_footprint_limit_internal()
7484 ledger_set_diag_mem_threshold_disabled(task->ledger, task_ledgers.phys_footprint); in task_set_phys_footprint_limit_internal()
7486 ledger_set_diag_mem_threshold_enabled(task->ledger, task_ledgers.phys_footprint); in task_set_phys_footprint_limit_internal()
7505 ledger_set_limit(task->ledger, task_ledgers.phys_footprint, in task_set_phys_footprint_limit_internal()
7509 task_lock(task); in task_set_phys_footprint_limit_internal()
7510 task_set_memlimit_is_active(task, memlimit_is_active); in task_set_phys_footprint_limit_internal()
7511 task_set_memlimit_is_fatal(task, memlimit_is_fatal); in task_set_phys_footprint_limit_internal()
7512 task_unlock(task); in task_set_phys_footprint_limit_internal()
7518 ledger_set_diag_mem_threshold_disabled(task->ledger, task_ledgers.phys_footprint); in task_set_phys_footprint_limit_internal()
7520 ledger_set_diag_mem_threshold_enabled(task->ledger, task_ledgers.phys_footprint); in task_set_phys_footprint_limit_internal()
7530 task_lock(task); in task_set_phys_footprint_limit_internal()
7532 if ((memlimit_is_active == task_get_memlimit_is_active(task)) && in task_set_phys_footprint_limit_internal()
7533 (memlimit_is_fatal == task_get_memlimit_is_fatal(task)) && in task_set_phys_footprint_limit_internal()
7538 task_unlock(task); in task_set_phys_footprint_limit_internal()
7542 task_set_memlimit_is_active(task, memlimit_is_active); in task_set_phys_footprint_limit_internal()
7543 task_set_memlimit_is_fatal(task, memlimit_is_fatal); in task_set_phys_footprint_limit_internal()
7545 ledger_set_limit(task->ledger, task_ledgers.phys_footprint, in task_set_phys_footprint_limit_internal()
7548 if (task == current_task()) { in task_set_phys_footprint_limit_internal()
7549 ledger_check_new_balance(current_thread(), task->ledger, in task_set_phys_footprint_limit_internal()
7553 task_unlock(task); in task_set_phys_footprint_limit_internal()
7556 ledger_set_diag_mem_threshold_enabled(task->ledger, task_ledgers.phys_footprint); in task_set_phys_footprint_limit_internal()
7566 task_t task, in task_set_diag_footprint_limit_internal() argument
7573 ret = ledger_get_diag_mem_threshold(task->ledger, task_ledgers.phys_footprint, &old); in task_set_diag_footprint_limit_internal()
7582 diag_threshold_validity = task_check_memorythreshold_is_valid( task, new_limit_bytes >> 20, true); in task_set_diag_footprint_limit_internal()
7587 ledger_set_diag_mem_threshold_disabled(task->ledger, task_ledgers.phys_footprint); in task_set_diag_footprint_limit_internal()
7603 ledger_set_diag_mem_threshold(task->ledger, task_ledgers.phys_footprint, in task_set_diag_footprint_limit_internal()
7608 ledger_set_diag_mem_threshold_enabled(task->ledger, task_ledgers.phys_footprint); in task_set_diag_footprint_limit_internal()
7616 task_lock(task); in task_set_diag_footprint_limit_internal()
7617 ledger_set_diag_mem_threshold(task->ledger, task_ledgers.phys_footprint, in task_set_diag_footprint_limit_internal()
7619 if (task == current_task()) { in task_set_diag_footprint_limit_internal()
7620 ledger_check_new_balance(current_thread(), task->ledger, in task_set_diag_footprint_limit_internal()
7624 task_unlock(task); in task_set_diag_footprint_limit_internal()
7626 ledger_set_diag_mem_threshold_disabled(task->ledger, task_ledgers.phys_footprint); in task_set_diag_footprint_limit_internal()
7628 ledger_set_diag_mem_threshold_enabled(task->ledger, task_ledgers.phys_footprint); in task_set_diag_footprint_limit_internal()
7637 task_t task, in task_get_diag_footprint_limit_internal() argument
7646 ret = ledger_get_diag_mem_threshold(task->ledger, task_ledgers.phys_footprint, &ledger_limit); in task_get_diag_footprint_limit_internal()
7652 …ret = ledger_is_diag_threshold_enabled(task->ledger, task_ledgers.phys_footprint, threshold_disabl… in task_get_diag_footprint_limit_internal()
7661 task_t task, in task_get_phys_footprint_limit() argument
7667 ret = ledger_get_limit(task->ledger, task_ledgers.phys_footprint, &limit); in task_get_phys_footprint_limit()
7685 __unused task_t task, in task_set_phys_footprint_limit() argument
7694 __unused task_t task, in task_get_phys_footprint_limit() argument
7702 task_get_sec_token(task_t task) in task_get_sec_token() argument
7704 return &task_get_ro(task)->task_tokens.sec_token; in task_get_sec_token()
7708 task_set_sec_token(task_t task, security_token_t *token) in task_set_sec_token() argument
7710 zalloc_ro_update_field(ZONE_ID_PROC_RO, task_get_ro(task), in task_set_sec_token()
7715 task_get_audit_token(task_t task) in task_get_audit_token() argument
7717 return &task_get_ro(task)->task_tokens.audit_token; in task_get_audit_token()
7721 task_set_audit_token(task_t task, audit_token_t *token) in task_set_audit_token() argument
7723 zalloc_ro_update_field(ZONE_ID_PROC_RO, task_get_ro(task), in task_set_audit_token()
7728 task_set_tokens(task_t task, security_token_t *sec_token, audit_token_t *audit_token) in task_set_tokens() argument
7732 tokens = task_get_ro(task)->task_tokens; in task_set_tokens()
7736 zalloc_ro_update_field(ZONE_ID_PROC_RO, task_get_ro(task), task_tokens, in task_set_tokens()
7741 task_is_privileged(task_t task) in task_is_privileged() argument
7743 return task_get_sec_token(task)->val[0] == 0; in task_is_privileged()
7748 task_get_mach_trap_filter_mask(task_t task) in task_get_mach_trap_filter_mask() argument
7750 return task_get_ro(task)->task_filters.mach_trap_filter_mask; in task_get_mach_trap_filter_mask()
7754 task_set_mach_trap_filter_mask(task_t task, uint8_t *mask) in task_set_mach_trap_filter_mask() argument
7756 zalloc_ro_update_field(ZONE_ID_PROC_RO, task_get_ro(task), in task_set_mach_trap_filter_mask()
7761 task_get_mach_kobj_filter_mask(task_t task) in task_get_mach_kobj_filter_mask() argument
7763 return task_get_ro(task)->task_filters.mach_kobj_filter_mask; in task_get_mach_kobj_filter_mask()
7767 task_get_all_image_info_addr(task_t task) in task_get_all_image_info_addr() argument
7769 return task->all_image_info_addr; in task_get_all_image_info_addr()
7773 task_set_mach_kobj_filter_mask(task_t task, uint8_t *mask) in task_set_mach_kobj_filter_mask() argument
7775 zalloc_ro_update_field(ZONE_ID_PROC_RO, task_get_ro(task), in task_set_mach_kobj_filter_mask()
7782 task_set_thread_limit(task_t task, uint16_t thread_limit) in task_set_thread_limit() argument
7784 assert(task != kernel_task); in task_set_thread_limit()
7786 task_lock(task); in task_set_thread_limit()
7787 task->task_thread_limit = thread_limit; in task_set_thread_limit()
7788 task_unlock(task); in task_set_thread_limit()
7794 task_set_port_space_limits(task_t task, uint32_t soft_limit, uint32_t hard_limit) in task_set_port_space_limits() argument
7796 return ipc_space_set_table_size_limits(task->itk_space, soft_limit, hard_limit); in task_set_port_space_limits()
7802 task_has_system_version_compat_enabled(task_t task) in task_has_system_version_compat_enabled() argument
7806 task_lock(task); in task_has_system_version_compat_enabled()
7807 enabled = (task->t_flags & TF_SYS_VERSION_COMPAT); in task_has_system_version_compat_enabled()
7808 task_unlock(task); in task_has_system_version_compat_enabled()
7814 task_set_system_version_compat_enabled(task_t task, boolean_t enable_system_version_compat) in task_set_system_version_compat_enabled() argument
7816 assert(task == current_task()); in task_set_system_version_compat_enabled()
7817 assert(task != kernel_task); in task_set_system_version_compat_enabled()
7819 task_lock(task); in task_set_system_version_compat_enabled()
7821 task->t_flags |= TF_SYS_VERSION_COMPAT; in task_set_system_version_compat_enabled()
7823 task->t_flags &= ~TF_SYS_VERSION_COMPAT; in task_set_system_version_compat_enabled()
7825 task_unlock(task); in task_set_system_version_compat_enabled()
7871 task_pid(task_t task) in task_pid() argument
7873 if (task) { in task_pid()
7874 return get_audit_token_pid(task_get_audit_token(task)); in task_pid()
7887 task_get_vm_shared_region_id_and_jop_pid(task_t task, uint64_t *jop_pid) in task_get_vm_shared_region_id_and_jop_pid() argument
7892 task_lock(task); in task_get_vm_shared_region_id_and_jop_pid()
7893 if (task->shared_region_id == NULL) { in task_get_vm_shared_region_id_and_jop_pid()
7894 task_unlock(task); in task_get_vm_shared_region_id_and_jop_pid()
7897 len = strlen(task->shared_region_id) + 1; in task_get_vm_shared_region_id_and_jop_pid()
7900 task_unlock(task); in task_get_vm_shared_region_id_and_jop_pid()
7902 task_lock(task); in task_get_vm_shared_region_id_and_jop_pid()
7904 if (task->shared_region_id == NULL) { in task_get_vm_shared_region_id_and_jop_pid()
7905 task_unlock(task); in task_get_vm_shared_region_id_and_jop_pid()
7909 assert(len == strlen(task->shared_region_id) + 1); /* should never change */ in task_get_vm_shared_region_id_and_jop_pid()
7910 strlcpy(shared_region_id, task->shared_region_id, len); in task_get_vm_shared_region_id_and_jop_pid()
7911 task_unlock(task); in task_get_vm_shared_region_id_and_jop_pid()
7925 task_set_shared_region_id(task_t task, char *id) in task_set_shared_region_id() argument
7929 task_lock(task); in task_set_shared_region_id()
7930 old_id = task->shared_region_id; in task_set_shared_region_id()
7931 task->shared_region_id = id; in task_set_shared_region_id()
7932 task->shared_region_auth_remapped = FALSE; in task_set_shared_region_id()
7933 task_unlock(task); in task_set_shared_region_id()
7953 task_findtid(task_t task, uint64_t tid) in task_findtid() argument
7961 assert(get_threadtask(self) == task); in task_findtid()
7968 task_lock(task); in task_findtid()
7970 queue_iterate(&task->threads, iter_thread, thread_t, task_threads) { in task_findtid()
7978 task_unlock(task); in task_findtid()
7984 pid_from_task(task_t task) in pid_from_task() argument
7987 void *bsd_info = get_bsdtask_info(task); in pid_from_task()
7992 pid = task_pid(task); in pid_from_task()
8002 task_cpu_usage_monitor_ctl(task_t task, uint32_t *flags) in task_cpu_usage_monitor_ctl() argument
8007 task->rusage_cpu_flags |= TASK_RUSECPU_FLAGS_FATAL_CPUMON; in task_cpu_usage_monitor_ctl()
8019 task_wakeups_monitor_ctl(task_t task, uint32_t *flags, int32_t *rate_hz) in task_wakeups_monitor_ctl() argument
8021 ledger_t ledger = task->ledger; in task_wakeups_monitor_ctl()
8023 task_lock(task); in task_wakeups_monitor_ctl()
8037 if (task->rusage_cpu_flags & TASK_RUSECPU_FLAGS_FATAL_WAKEUPSMON) { in task_wakeups_monitor_ctl()
8048 task_unlock(task); in task_wakeups_monitor_ctl()
8059 task->rusage_cpu_flags |= TASK_RUSECPU_FLAGS_FATAL_WAKEUPSMON; in task_wakeups_monitor_ctl()
8064 task_unlock(task); in task_wakeups_monitor_ctl()
8084 task_unlock(task); in task_wakeups_monitor_ctl()
8101 task_t task = current_task(); in SENDING_NOTIFICATION__THIS_PROCESS_IS_CAUSING_TOO_MANY_WAKEUPS() local
8113 if (get_bsdtask_info(task) != NULL) { in SENDING_NOTIFICATION__THIS_PROCESS_IS_CAUSING_TOO_MANY_WAKEUPS()
8118 ledger_get_entry_info(task->ledger, task_ledgers.interrupt_wakeups, &lei); in SENDING_NOTIFICATION__THIS_PROCESS_IS_CAUSING_TOO_MANY_WAKEUPS()
8126 task_wakeups_monitor_ctl(task, &flags, NULL); in SENDING_NOTIFICATION__THIS_PROCESS_IS_CAUSING_TOO_MANY_WAKEUPS()
8128 fatal = task->rusage_cpu_flags & TASK_RUSECPU_FLAGS_FATAL_WAKEUPSMON; in SENDING_NOTIFICATION__THIS_PROCESS_IS_CAUSING_TOO_MANY_WAKEUPS()
8141 kr = send_resource_violation(send_cpu_wakes_violation, task, &lei, in SENDING_NOTIFICATION__THIS_PROCESS_IS_CAUSING_TOO_MANY_WAKEUPS()
8177 task_terminate_internal(task); in SENDING_NOTIFICATION__THIS_PROCESS_IS_CAUSING_TOO_MANY_WAKEUPS()
8201 task_update_physical_writes(__unused task_t task, __unused task_physical_write_flavor_t flavor, __u… in task_update_physical_writes() argument
8211 if (!task) { in task_update_physical_writes()
8212 task = kernel_task; in task_update_physical_writes()
8216 task_pid(task), flavor, io_size, flags); in task_update_physical_writes()
8217 …DTRACE_IO4(physical_writes, struct task *, task, task_physical_write_flavor_t, flavor, uint64_t, i… in task_update_physical_writes()
8221 OSAddAtomic64(io_size, (SInt64 *)&(task->task_fs_metadata_writes)); in task_update_physical_writes()
8222 ledger_credit_nocheck(task->ledger, task_ledgers.fs_metadata_writes, io_size); in task_update_physical_writes()
8226 OSAddAtomic64(-1 * io_size, (SInt64 *)&(task->task_fs_metadata_writes)); in task_update_physical_writes()
8227 ledger_debit_nocheck(task->ledger, task_ledgers.fs_metadata_writes, io_size); in task_update_physical_writes()
8234 task_update_logical_writes(task_t task, uint32_t io_size, int flags, void *vp) in task_update_logical_writes() argument
8243 if ((!task) || (!io_size) || (!vp)) { in task_update_logical_writes()
8248 task_pid(task), io_size, flags, (uintptr_t)VM_KERNEL_ADDRPERM(vp)); in task_update_logical_writes()
8249 DTRACE_IO4(logical_writes, struct task *, task, uint32_t, io_size, int, flags, vnode *, vp); in task_update_logical_writes()
8255 writes_counters_to_update = &task->task_writes_counters_internal; in task_update_logical_writes()
8260 writes_counters_to_update = &task->task_writes_counters_external; in task_update_logical_writes()
8267 ledger_credit(task->ledger, ledger_to_update, io_size); in task_update_logical_writes()
8269 coalition_io_ledger_update(task, FLAVOR_IO_LOGICAL_WRITES, TRUE, io_size); in task_update_logical_writes()
8274 ledger_credit(task->ledger, ledger_to_update, io_size); in task_update_logical_writes()
8276 coalition_io_ledger_update(task, FLAVOR_IO_LOGICAL_WRITES, TRUE, io_size); in task_update_logical_writes()
8281 ledger_debit(task->ledger, ledger_to_update, io_size); in task_update_logical_writes()
8283 coalition_io_ledger_update(task, FLAVOR_IO_LOGICAL_WRITES, FALSE, io_size); in task_update_logical_writes()
8288 ledger_credit(task->ledger, ledger_to_update, io_size); in task_update_logical_writes()
8290 coalition_io_ledger_update(task, FLAVOR_IO_LOGICAL_WRITES, TRUE, io_size); in task_update_logical_writes()
8309 task_io_monitor_ctl(task_t task, uint32_t *flags) in task_io_monitor_ctl() argument
8311 ledger_t ledger = task->ledger; in task_io_monitor_ctl()
8313 task_lock(task); in task_io_monitor_ctl()
8326 task_unlock(task); in task_io_monitor_ctl()
8342 task_t task = current_task(); in SENDING_NOTIFICATION__THIS_PROCESS_IS_CAUSING_TOO_MUCH_IO() local
8358 ledger_get_entry_info(task->ledger, task_ledgers.physical_writes, &lei); in SENDING_NOTIFICATION__THIS_PROCESS_IS_CAUSING_TOO_MUCH_IO()
8369 task_io_monitor_ctl(task, &flags); in SENDING_NOTIFICATION__THIS_PROCESS_IS_CAUSING_TOO_MUCH_IO()
8377 kr = send_resource_violation(send_disk_writes_violation, task, &lei, kRNFlagsNone); in SENDING_NOTIFICATION__THIS_PROCESS_IS_CAUSING_TOO_MUCH_IO()
8394 task_port_space_ast(__unused task_t task) in task_port_space_ast() argument
8397 assert(task == current_task()); in task_port_space_ast()
8398 bool should_notify = ipc_space_check_table_size_limit(task->itk_space, in task_port_space_ast()
8401 …SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_MACH_PORTS(task, current_size, soft_limit, hard_li… in task_port_space_ast()
8427 task_t task = TASK_NULL; in task_fatal_port_no_senders() local
8434 …kr = task_identity_token_get_task_grp(token, &task, TASK_GRP_KERNEL); /* takes a reference on task… in task_fatal_port_no_senders()
8435 if (task) { in task_fatal_port_no_senders()
8436 task_bsdtask_kill(task); in task_fatal_port_no_senders()
8437 task_deallocate(task); in task_fatal_port_no_senders()
8445 SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_MACH_PORTS(task_t task, uint32_t current_size, uint… in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_MACH_PORTS() argument
8456 if (get_bsdtask_info(task) != NULL) { in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_MACH_PORTS()
8457 procname = proc_name_address(get_bsdtask_info(task)); in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_MACH_PORTS()
8496 task_bsdtask_kill(task); in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_MACH_PORTS()
8503 …kr = send_resource_violation_with_fatal_port(send_port_space_violation, task, (int64_t)current_siz… in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_MACH_PORTS()
8515 task_kqworkloop_ast(task_t task, int current_size, int soft_limit, int hard_limit) in task_kqworkloop_ast() argument
8517 assert(task == current_task()); in task_kqworkloop_ast()
8518 …return SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_KQWORKLOOPS(task, current_size, soft_limit,… in task_kqworkloop_ast()
8522 SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_KQWORKLOOPS(task_t task, int current_size, int soft… in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_KQWORKLOOPS() argument
8528 if (get_bsdtask_info(task) != NULL) { in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_KQWORKLOOPS()
8529 procname = proc_name_address(get_bsdtask_info(task)); in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_KQWORKLOOPS()
8549 task_bsdtask_kill(task); in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_KQWORKLOOPS()
8557 …kr = send_resource_violation_with_fatal_port(send_kqworkloops_violation, task, (int64_t)current_si… in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_KQWORKLOOPS()
8568 task_filedesc_ast(__unused task_t task, __unused int current_size, __unused int soft_limit, __unuse… in task_filedesc_ast() argument
8570 assert(task == current_task()); in task_filedesc_ast()
8571 …SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_FILE_DESCRIPTORS(task, current_size, soft_limit, h… in task_filedesc_ast()
8575 SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_FILE_DESCRIPTORS(task_t task, int current_size, int… in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_FILE_DESCRIPTORS() argument
8586 if (get_bsdtask_info(task) != NULL) { in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_FILE_DESCRIPTORS()
8587 procname = proc_name_address(get_bsdtask_info(task)); in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_FILE_DESCRIPTORS()
8607 task_bsdtask_kill(task); in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_FILE_DESCRIPTORS()
8614 …kr = send_resource_violation_with_fatal_port(send_file_descriptors_violation, task, (int64_t)curre… in SENDING_NOTIFICATION__THIS_PROCESS_HAS_TOO_MANY_FILE_DESCRIPTORS()
8627 task_t task, in task_get_mach_voucher() argument
8631 if (TASK_NULL == task) { in task_get_mach_voucher()
8641 task_t task, in task_set_mach_voucher() argument
8644 if (TASK_NULL == task) { in task_set_mach_voucher()
8653 __unused task_t task, in task_swap_mach_voucher() argument
8668 task_set_gpu_denied(task_t task, boolean_t denied) in task_set_gpu_denied() argument
8670 task_lock(task); in task_set_gpu_denied()
8673 task->t_flags |= TF_GPU_DENIED; in task_set_gpu_denied()
8675 task->t_flags &= ~TF_GPU_DENIED; in task_set_gpu_denied()
8678 task_unlock(task); in task_set_gpu_denied()
8682 task_is_gpu_denied(task_t task) in task_is_gpu_denied() argument
8685 return (task->t_flags & TF_GPU_DENIED) ? TRUE : FALSE; in task_is_gpu_denied()
8694 task_set_game_mode_locked(task_t task, bool enabled) in task_set_game_mode_locked() argument
8696 task_lock_assert_owned(task); in task_set_game_mode_locked()
8699 assert(proc_get_effective_task_policy(task, TASK_POLICY_TERMINATED) == 0); in task_set_game_mode_locked()
8702 bool previously_enabled = task_get_game_mode(task); in task_set_game_mode_locked()
8707 task->t_flags |= TF_GAME_MODE; in task_set_game_mode_locked()
8709 task->t_flags &= ~TF_GAME_MODE; in task_set_game_mode_locked()
8713 if (task_coalition_adjust_game_mode_count(task, 1, &new_count) && (new_count == 1)) { in task_set_game_mode_locked()
8717 if (task_coalition_adjust_game_mode_count(task, -1, &new_count) && (new_count == 0)) { in task_set_game_mode_locked()
8726 task_set_game_mode(task_t task, bool enabled) in task_set_game_mode() argument
8730 task_lock(task); in task_set_game_mode()
8733 if (proc_get_effective_task_policy(task, TASK_POLICY_TERMINATED) == 0) { in task_set_game_mode()
8734 needs_update = task_set_game_mode_locked(task, enabled); in task_set_game_mode()
8737 task_unlock(task); in task_set_game_mode()
8741 task_coalition_thread_group_game_mode_update(task); in task_set_game_mode()
8747 task_get_game_mode(task_t task) in task_get_game_mode() argument
8750 return task->t_flags & TF_GAME_MODE; in task_get_game_mode()
8754 task_set_carplay_mode_locked(task_t task, bool enabled) in task_set_carplay_mode_locked() argument
8756 task_lock_assert_owned(task); in task_set_carplay_mode_locked()
8759 assert(proc_get_effective_task_policy(task, TASK_POLICY_TERMINATED) == 0); in task_set_carplay_mode_locked()
8762 bool previously_enabled = task_get_carplay_mode(task); in task_set_carplay_mode_locked()
8767 task->t_flags |= TF_CARPLAY_MODE; in task_set_carplay_mode_locked()
8769 task->t_flags &= ~TF_CARPLAY_MODE; in task_set_carplay_mode_locked()
8773 if (task_coalition_adjust_carplay_mode_count(task, 1, &new_count) && (new_count == 1)) { in task_set_carplay_mode_locked()
8777 if (task_coalition_adjust_carplay_mode_count(task, -1, &new_count) && (new_count == 0)) { in task_set_carplay_mode_locked()
8785 task_set_carplay_mode(task_t task, bool enabled) in task_set_carplay_mode() argument
8789 task_lock(task); in task_set_carplay_mode()
8792 if (proc_get_effective_task_policy(task, TASK_POLICY_TERMINATED) == 0) { in task_set_carplay_mode()
8793 needs_update = task_set_carplay_mode_locked(task, enabled); in task_set_carplay_mode()
8796 task_unlock(task); in task_set_carplay_mode()
8800 task_coalition_thread_group_carplay_mode_update(task); in task_set_carplay_mode()
8806 task_get_carplay_mode(task_t task) in task_get_carplay_mode() argument
8809 return task->t_flags & TF_CARPLAY_MODE; in task_get_carplay_mode()
8813 get_task_memory_region_count(task_t task) in get_task_memory_region_count() argument
8816 map = (task == kernel_task) ? kernel_map: task->map; in get_task_memory_region_count()
8856 kdebug_trace_dyld(task_t task, uint32_t base_code, in kdebug_trace_dyld() argument
8874 if (task == NULL || task != current_task()) { in kdebug_trace_dyld()
8895 task_register_dyld_image_infos(task_t task, in task_register_dyld_image_infos() argument
8899 return kdebug_trace_dyld(task, DBG_DYLD_UUID_MAP_A, in task_register_dyld_image_infos()
8904 task_unregister_dyld_image_infos(task_t task, in task_unregister_dyld_image_infos() argument
8908 return kdebug_trace_dyld(task, DBG_DYLD_UUID_UNMAP_A, in task_unregister_dyld_image_infos()
8913 task_get_dyld_image_infos(__unused task_t task, in task_get_dyld_image_infos() argument
8921 task_register_dyld_shared_cache_image_info(task_t task, in task_register_dyld_shared_cache_image_info() argument
8926 if (task == NULL || task != current_task()) { in task_register_dyld_shared_cache_image_info()
8935 task_register_dyld_set_dyld_state(__unused task_t task, in task_register_dyld_set_dyld_state() argument
8942 task_register_dyld_get_process_state(__unused task_t task, in task_register_dyld_get_process_state() argument
8953 task_t task = (task_t)task_insp; in task_inspect() local
8957 if (task == TASK_NULL) { in task_inspect()
8973 recount_sum(&recount_task_plan, task->tk_recount.rtk_lifetime, &stats); in task_inspect()
8999 task_t task, in task_set_can_use_secluded_mem() argument
9002 if (!task->task_could_use_secluded_mem) { in task_set_can_use_secluded_mem()
9005 task_lock(task); in task_set_can_use_secluded_mem()
9006 task_set_can_use_secluded_mem_locked(task, can_use_secluded_mem); in task_set_can_use_secluded_mem()
9007 task_unlock(task); in task_set_can_use_secluded_mem()
9012 task_t task, in task_set_can_use_secluded_mem_locked() argument
9015 assert(task->task_could_use_secluded_mem); in task_set_can_use_secluded_mem_locked()
9018 !task->task_can_use_secluded_mem) { in task_set_can_use_secluded_mem_locked()
9022 task->task_can_use_secluded_mem = TRUE; in task_set_can_use_secluded_mem_locked()
9024 task->task_can_use_secluded_mem) { in task_set_can_use_secluded_mem_locked()
9028 task->task_can_use_secluded_mem = FALSE; in task_set_can_use_secluded_mem_locked()
9034 task_t task, in task_set_could_use_secluded_mem() argument
9037 task->task_could_use_secluded_mem = !!could_use_secluded_mem; in task_set_could_use_secluded_mem()
9042 task_t task, in task_set_could_also_use_secluded_mem() argument
9045 task->task_could_also_use_secluded_mem = !!could_also_use_secluded_mem; in task_set_could_also_use_secluded_mem()
9050 task_t task, in task_can_use_secluded_mem() argument
9053 if (task->task_can_use_secluded_mem) { in task_can_use_secluded_mem()
9054 assert(task->task_could_use_secluded_mem); in task_can_use_secluded_mem()
9058 if (task->task_could_also_use_secluded_mem && in task_can_use_secluded_mem()
9071 uint64_t phys_used = get_task_phys_footprint(task); in task_can_use_secluded_mem()
9072 uint64_t limit = get_task_phys_footprint_limit(task); in task_can_use_secluded_mem()
9076 start_secluded_suppression(task); in task_can_use_secluded_mem()
9086 task_t task) in task_could_use_secluded_mem() argument
9088 return task->task_could_use_secluded_mem; in task_could_use_secluded_mem()
9093 task_t task) in task_could_also_use_secluded_mem() argument
9095 return task->task_could_also_use_secluded_mem; in task_could_also_use_secluded_mem()
9100 task_io_user_clients(task_t task) in task_io_user_clients() argument
9102 return &task->io_user_clients; in task_io_user_clients()
9106 task_set_message_app_suspended(task_t task, boolean_t enable) in task_set_message_app_suspended() argument
9108 task->message_app_suspended = enable; in task_set_message_app_suspended()
9175 task_set_darkwake_mode(task_t task, boolean_t set_mode) in task_set_darkwake_mode() argument
9177 assert(task); in task_set_darkwake_mode()
9179 task_lock(task); in task_set_darkwake_mode()
9182 task->t_flags |= TF_DARKWAKE_MODE; in task_set_darkwake_mode()
9184 task->t_flags &= ~(TF_DARKWAKE_MODE); in task_set_darkwake_mode()
9187 task_unlock(task); in task_set_darkwake_mode()
9191 task_get_darkwake_mode(task_t task) in task_get_darkwake_mode() argument
9193 assert(task); in task_get_darkwake_mode()
9194 return (task->t_flags & TF_DARKWAKE_MODE) != 0; in task_get_darkwake_mode()
9206 task_t task, in task_set_exc_guard_ctrl_port_default() argument
9216 if (task_is_hardened_binary(task)) { in task_set_exc_guard_ctrl_port_default()
9218 task->task_exc_guard = (task_exc_guard_default & TASK_EXC_GUARD_ALL); in task_set_exc_guard_ctrl_port_default()
9220 if (1 == task_pid(task)) { in task_set_exc_guard_ctrl_port_default()
9222 task->task_exc_guard = _TASK_EXC_GUARD_ALL_CORPSE; in task_set_exc_guard_ctrl_port_default()
9233 task->task_exc_guard = named_default->behavior; in task_set_exc_guard_ctrl_port_default()
9243 …task->task_exc_guard = ((task_exc_guard_default >> TASK_EXC_GUARD_THIRD_PARTY_DEFAULT_SHIFT) & TAS… in task_set_exc_guard_ctrl_port_default()
9253 task->task_exc_guard = TASK_EXC_GUARD_NONE; in task_set_exc_guard_ctrl_port_default()
9260 task_set_control_port_options(task, opts); in task_set_exc_guard_ctrl_port_default()
9262 task_set_immovable_pinned(task); in task_set_exc_guard_ctrl_port_default()
9268 task_t task, in task_get_exc_guard_behavior() argument
9271 if (task == TASK_NULL) { in task_get_exc_guard_behavior()
9274 *behaviorp = task->task_exc_guard; in task_get_exc_guard_behavior()
9280 task_t task, in task_set_exc_guard_behavior() argument
9283 if (task == TASK_NULL) { in task_set_exc_guard_behavior()
9297 os_atomic_rmw_loop(&task->task_exc_guard, cur_behavior, new_behavior, relaxed, { in task_set_exc_guard_behavior()
9309 task->task_exc_guard = new_behavior; in task_set_exc_guard_behavior()
9315 task_set_corpse_forking_behavior(task_t task, task_corpse_forking_behavior_t behavior) in task_set_corpse_forking_behavior() argument
9318 if (task == TASK_NULL) { in task_set_corpse_forking_behavior()
9322 task_lock(task); in task_set_corpse_forking_behavior()
9324 task->t_flags |= TF_NO_CORPSE_FORKING; in task_set_corpse_forking_behavior()
9326 task->t_flags &= ~TF_NO_CORPSE_FORKING; in task_set_corpse_forking_behavior()
9328 task_unlock(task); in task_set_corpse_forking_behavior()
9332 (void)task; in task_set_corpse_forking_behavior()
9339 task_corpse_forking_disabled(task_t task) in task_corpse_forking_disabled() argument
9343 task_lock(task); in task_corpse_forking_disabled()
9344 disabled = (task->t_flags & TF_NO_CORPSE_FORKING); in task_corpse_forking_disabled()
9345 task_unlock(task); in task_corpse_forking_disabled()
9358 task_t task) in task_set_legacy_footprint() argument
9360 task_lock(task); in task_set_legacy_footprint()
9361 task->task_legacy_footprint = TRUE; in task_set_legacy_footprint()
9362 task_unlock(task); in task_set_legacy_footprint()
9367 task_t task) in task_set_extra_footprint_limit() argument
9369 if (task->task_extra_footprint_limit) { in task_set_extra_footprint_limit()
9372 task_lock(task); in task_set_extra_footprint_limit()
9373 if (task->task_extra_footprint_limit) { in task_set_extra_footprint_limit()
9374 task_unlock(task); in task_set_extra_footprint_limit()
9377 task->task_extra_footprint_limit = TRUE; in task_set_extra_footprint_limit()
9378 task_unlock(task); in task_set_extra_footprint_limit()
9379 memorystatus_act_on_legacy_footprint_entitlement(get_bsdtask_info(task), TRUE); in task_set_extra_footprint_limit()
9384 task_t task) in task_set_ios13extended_footprint_limit() argument
9386 if (task->task_ios13extended_footprint_limit) { in task_set_ios13extended_footprint_limit()
9389 task_lock(task); in task_set_ios13extended_footprint_limit()
9390 if (task->task_ios13extended_footprint_limit) { in task_set_ios13extended_footprint_limit()
9391 task_unlock(task); in task_set_ios13extended_footprint_limit()
9394 task->task_ios13extended_footprint_limit = TRUE; in task_set_ios13extended_footprint_limit()
9395 task_unlock(task); in task_set_ios13extended_footprint_limit()
9396 memorystatus_act_on_ios13extended_footprint_entitlement(get_bsdtask_info(task)); in task_set_ios13extended_footprint_limit()
9478 task_t task, in task_set_memory_ownership_transfer() argument
9481 task_lock(task); in task_set_memory_ownership_transfer()
9482 task->task_can_transfer_memory_ownership = !!value; in task_set_memory_ownership_transfer()
9483 task_unlock(task); in task_set_memory_ownership_transfer()
9489 task_set_no_footprint_for_debug(task_t task, boolean_t value) in task_set_no_footprint_for_debug() argument
9491 task_lock(task); in task_set_no_footprint_for_debug()
9492 task->task_no_footprint_for_debug = !!value; in task_set_no_footprint_for_debug()
9493 task_unlock(task); in task_set_no_footprint_for_debug()
9497 task_get_no_footprint_for_debug(task_t task) in task_get_no_footprint_for_debug() argument
9499 return task->task_no_footprint_for_debug; in task_get_no_footprint_for_debug()
9505 task_copy_vmobjects(task_t task, vm_object_query_t query, size_t len, size_t *num) in task_copy_vmobjects() argument
9517 task_objq_lock(task); in task_copy_vmobjects()
9519 queue_iterate(&task->task_objq, find_vmo, vm_object_t, task_objq) in task_copy_vmobjects()
9546 size = (size_t)task->task_owned_objects; in task_copy_vmobjects()
9548 task_objq_unlock(task); in task_copy_vmobjects()
9554 task_get_owned_vmobjects(task_t task, size_t buffer_size, vmobject_list_output_t buffer, size_t* ou… in task_get_owned_vmobjects() argument
9561 task_copy_vmobjects(task, NULL, 0, entries); in task_get_owned_vmobjects()
9565 task_copy_vmobjects(task, &buffer->data[0], buffer_size - sizeof(*buffer), entries); in task_get_owned_vmobjects()
9606 task_t task, in task_set_filter_msg_flag() argument
9609 assert(task != TASK_NULL); in task_set_filter_msg_flag()
9612 task_ro_flags_set(task, TFRO_FILTER_MSG); in task_set_filter_msg_flag()
9614 task_ro_flags_clear(task, TFRO_FILTER_MSG); in task_set_filter_msg_flag()
9620 task_t task) in task_get_filter_msg_flag() argument
9622 if (!task) { in task_get_filter_msg_flag()
9626 return (task_ro_flags_get(task) & TFRO_FILTER_MSG) ? TRUE : FALSE; in task_get_filter_msg_flag()
9630 task_t task) in task_is_exotic() argument
9632 if (task == TASK_NULL) { in task_is_exotic()
9635 return vm_map_is_exotic(get_task_map(task)); in task_is_exotic()
9640 task_t task) in task_is_alien() argument
9642 if (task == TASK_NULL) { in task_is_alien()
9645 return vm_map_is_alien(get_task_map(task)); in task_is_alien()
9652 mac_task_get_mach_filter_mask(task_t task) in mac_task_get_mach_filter_mask() argument
9654 assert(task); in mac_task_get_mach_filter_mask()
9655 return task_get_mach_trap_filter_mask(task); in mac_task_get_mach_filter_mask()
9659 mac_task_get_kobj_filter_mask(task_t task) in mac_task_get_kobj_filter_mask() argument
9661 assert(task); in mac_task_get_kobj_filter_mask()
9662 return task_get_mach_kobj_filter_mask(task); in mac_task_get_kobj_filter_mask()
9667 mac_task_set_mach_filter_mask(task_t task, uint8_t *maskptr) in mac_task_set_mach_filter_mask() argument
9669 assert(task); in mac_task_set_mach_filter_mask()
9671 task_set_mach_trap_filter_mask(task, maskptr); in mac_task_set_mach_filter_mask()
9676 mac_task_set_kobj_filter_mask(task_t task, uint8_t *maskptr) in mac_task_set_kobj_filter_mask() argument
9678 assert(task); in mac_task_set_kobj_filter_mask()
9680 task_set_mach_kobj_filter_mask(task, maskptr); in mac_task_set_kobj_filter_mask()
9714 task_is_translated(task_t task) in task_is_translated() argument
9717 return task && proc_is_translated(get_bsdtask_info(task)); in task_is_translated()
9747 task_t task) in task_set_pac_exception_fatal_flag() argument
9749 assert(task != TASK_NULL); in task_set_pac_exception_fatal_flag()
9757 bool platform_binary = task_get_platform_binary(task); in task_set_pac_exception_fatal_flag()
9759 platform_binary &= !task_opted_out_mach_hardening(task); in task_set_pac_exception_fatal_flag()
9767 IOTaskHasEntitlement(task, SKIP_PAC_EXCEPTION_ENTITLEMENT)) { in task_set_pac_exception_fatal_flag()
9771 if (IOTaskHasEntitlement(task, PAC_EXCEPTION_ENTITLEMENT) || task_get_hardened_runtime(task)) { in task_set_pac_exception_fatal_flag()
9783 task_ro_flags_set(task, set_flags); in task_set_pac_exception_fatal_flag()
9789 task_t task) in task_is_pac_exception_fatal() argument
9791 assert(task != TASK_NULL); in task_is_pac_exception_fatal()
9792 return !!(task_ro_flags_get(task) & TFRO_PAC_EXC_FATAL); in task_is_pac_exception_fatal()
9809 task_t task) in task_set_jit_exception_fatal_flag() argument
9811 assert(task != TASK_NULL); in task_set_jit_exception_fatal_flag()
9812 …if (IOTaskHasStringEntitlement(task, FATAL_EXCEPTION_ENTITLEMENT, FATAL_EXCEPTION_ENTITLEMENT_JIT)… in task_set_jit_exception_fatal_flag()
9813 task_ro_flags_set(task, TFRO_JIT_EXC_FATAL); in task_set_jit_exception_fatal_flag()
9819 __unused task_t task) in task_is_jit_exception_fatal() argument
9824 assert(task != TASK_NULL); in task_is_jit_exception_fatal()
9825 return !!(task_ro_flags_get(task) & TFRO_JIT_EXC_FATAL); in task_is_jit_exception_fatal()
9831 task_t task) in task_needs_user_signed_thread_state() argument
9833 assert(task != TASK_NULL); in task_needs_user_signed_thread_state()
9834 return !!(task_ro_flags_get(task) & TFRO_PAC_ENFORCE_USER_STATE); in task_needs_user_signed_thread_state()
9838 task_set_tecs(task_t task) in task_set_tecs() argument
9840 if (task == TASK_NULL) { in task_set_tecs()
9841 task = current_task(); in task_set_tecs()
9848 LCK_MTX_ASSERT(&task->lock, LCK_MTX_ASSERT_NOTOWNED); in task_set_tecs()
9850 task_lock(task); in task_set_tecs()
9852 task->t_flags |= TF_TECS; in task_set_tecs()
9855 queue_iterate(&task->threads, thread, thread_t, task_threads) { in task_set_tecs()
9858 task_unlock(task); in task_set_tecs()
9863 task_t task, in task_test_sync_upcall() argument
9867 if (task != current_task() || !IPC_PORT_VALID(send_port)) { in task_test_sync_upcall()
9877 (void)task; in task_test_sync_upcall()
9885 task_t task, in task_test_async_upcall_propagation() argument
9893 if (task != current_task() || !IPC_PORT_VALID(send_port)) { in task_test_async_upcall_propagation()
9922 (void)task; in task_test_async_upcall_propagation()
9980 task_get_corpse_vmobject_list(task_t task, vmobject_list_output_t* list, size_t* list_size) in task_get_corpse_vmobject_list() argument
9982 assert(task); in task_get_corpse_vmobject_list()
9985 *list = task->corpse_vmobject_list; in task_get_corpse_vmobject_list()
9986 *list_size = (size_t)task->corpse_vmobject_list_size; in task_get_corpse_vmobject_list()
10011 task_ro_flags_get(task_t task) in task_ro_flags_get() argument
10013 return task_get_ro(task)->t_flags_ro; in task_ro_flags_get()
10017 task_ro_flags_set(task_t task, uint32_t flags) in task_ro_flags_set() argument
10019 zalloc_ro_update_field_atomic(ZONE_ID_PROC_RO, task_get_ro(task), in task_ro_flags_set()
10024 task_ro_flags_clear(task_t task, uint32_t flags) in task_ro_flags_clear() argument
10026 zalloc_ro_update_field_atomic(ZONE_ID_PROC_RO, task_get_ro(task), in task_ro_flags_clear()
10031 task_get_control_port_options(task_t task) in task_get_control_port_options() argument
10033 return task_get_ro(task)->task_control_port_options; in task_get_control_port_options()
10037 task_set_control_port_options(task_t task, task_control_port_options_t opts) in task_set_control_port_options() argument
10039 zalloc_ro_update_field(ZONE_ID_PROC_RO, task_get_ro(task), in task_set_control_port_options()
10057 kdp_task_is_locked(task_t task) in kdp_task_is_locked() argument
10059 return kdp_lck_mtx_lock_spin_is_acquired(&task->lock); in kdp_task_is_locked()
10070 task_check_memorythreshold_is_valid(task_t task, uint64_t new_limit, bool is_diagnostics_value) in task_check_memorythreshold_is_valid() argument
10076 …ret_value = ledger_is_diag_threshold_enabled(task->ledger, task_ledgers.phys_footprint, &threshold… in task_check_memorythreshold_is_valid()
10081 ret_value = task_get_phys_footprint_limit(task, &phys_limit_mb); in task_check_memorythreshold_is_valid()
10084 ret_value = task_get_diag_footprint_limit_internal(task, &diag_limit, &dummy); in task_check_memorythreshold_is_valid()
10107 task_add_conclave(task_t task, void *vnode, int64_t off, const char *task_conclave_id) in task_add_conclave() argument
10127 return exclaves_conclave_attach(task_conclave_id, task); in task_add_conclave()
10176 task_clear_conclave(task_t task) in task_clear_conclave() argument
10178 if (task->exclave_crash_info) { in task_clear_conclave()
10179 kfree_data(task->exclave_crash_info, CONCLAVE_CRASH_BUFFER_PAGECOUNT * PAGE_SIZE); in task_clear_conclave()
10180 task->exclave_crash_info = NULL; in task_clear_conclave()
10183 if (task->conclave == NULL) { in task_clear_conclave()
10195 exclaves_conclave_detach(task->conclave, task); in task_clear_conclave()
10200 task_stop_conclave(task_t task, bool gather_crash_bt) in task_stop_conclave() argument
10204 if (task->conclave == NULL) { in task_stop_conclave()
10208 if (task_should_panic_on_exit_due_to_conclave_taint(task)) { in task_stop_conclave()
10209 panic("Conclave tainted task %p terminated\n", task); in task_stop_conclave()
10213 thread->conclave_stop_task = task; in task_stop_conclave()
10216 exclaves_conclave_stop(task->conclave, gather_crash_bt); in task_stop_conclave()
10224 task_suspend_conclave(task_t task) in task_suspend_conclave() argument
10228 if (task->conclave == NULL) { in task_suspend_conclave()
10233 thread->conclave_stop_task = task; in task_suspend_conclave()
10236 exclaves_conclave_suspend(task->conclave); in task_suspend_conclave()
10244 task_resume_conclave(task_t task) in task_resume_conclave() argument
10248 if (task->conclave == NULL) { in task_resume_conclave()
10253 thread->conclave_stop_task = task; in task_resume_conclave()
10256 exclaves_conclave_resume(task->conclave); in task_resume_conclave()
10266 task_t task = current_task(); in task_stop_conclave_upcall() local
10267 if (task->conclave == NULL) { in task_stop_conclave_upcall()
10271 return exclaves_conclave_stop_upcall(task->conclave); in task_stop_conclave_upcall()
10277 task_t task = current_task(); in task_stop_conclave_upcall_complete() local
10284 assert3p(task->conclave, !=, NULL); in task_stop_conclave_upcall_complete()
10286 return exclaves_conclave_stop_upcall_complete(task->conclave, task); in task_stop_conclave_upcall_complete()
10292 task_t task = current_task(); in task_suspend_conclave_upcall() local
10296 if (task->conclave == NULL) { in task_suspend_conclave_upcall()
10300 kr = task_hold_and_wait(task, false); in task_suspend_conclave_upcall()
10302 task_lock(task); in task_suspend_conclave_upcall()
10303 queue_iterate(&task->threads, thread, thread_t, task_threads) in task_suspend_conclave_upcall()
10313 task_unlock(task); in task_suspend_conclave_upcall()
10318 task_crash_info_conclave_upcall(task_t task, const struct conclave_sharedbuffer_t *shared_buf, in task_crash_info_conclave_upcall() argument
10321 if (task->conclave == NULL) { in task_crash_info_conclave_upcall()
10353 task_lock(task); in task_crash_info_conclave_upcall()
10354 if (task->exclave_crash_info == NULL && task->active) { in task_crash_info_conclave_upcall()
10355 task->exclave_crash_info = task_crash_info_buffer; in task_crash_info_conclave_upcall()
10356 task->exclave_crash_info_length = length; in task_crash_info_conclave_upcall()
10359 task_unlock(task); in task_crash_info_conclave_upcall()
10369 task_get_conclave(task_t task) in task_get_conclave() argument
10371 return task->conclave; in task_get_conclave()
10379 task_should_panic_on_exit_due_to_conclave_taint(task_t task) in task_should_panic_on_exit_due_to_conclave_taint() argument
10391 return task_is_conclave_tainted(task); in task_should_panic_on_exit_due_to_conclave_taint()
10395 task_is_conclave_tainted(task_t task) in task_is_conclave_tainted() argument
10397 return (task->t_exclave_state & TES_CONCLAVE_TAINTED) != 0 && in task_is_conclave_tainted()
10398 !(task->t_exclave_state & TES_CONCLAVE_UNTAINTABLE); in task_is_conclave_tainted()
10402 task_set_conclave_taint(task_t task) in task_set_conclave_taint() argument
10404 os_atomic_or(&task->t_exclave_state, TES_CONCLAVE_TAINTED, relaxed); in task_set_conclave_taint()
10408 task_set_conclave_untaintable(task_t task) in task_set_conclave_untaintable() argument
10410 os_atomic_or(&task->t_exclave_state, TES_CONCLAVE_UNTAINTABLE, relaxed); in task_set_conclave_untaintable()
10414 task_add_conclave_crash_info(task_t task, void *crash_info_ptr) in task_add_conclave_crash_info() argument
10421 if (task->conclave == NULL) { in task_add_conclave_crash_info()
10425 if (task->exclave_crash_info_length == 0) { in task_add_conclave_crash_info()
10435 crash_info = task->exclave_crash_info; in task_add_conclave_crash_info()
10436 crash_info_length = task->exclave_crash_info_length; in task_add_conclave_crash_info()
10465 task_procname(task_t task, char *buf, int size) in task_procname() argument
10467 proc_name(task_pid(task), buf, size); in task_procname()
10471 task_best_name(task_t task) in task_best_name() argument
10473 return proc_best_name(task_get_proc_raw(task)); in task_best_name()