Lines Matching refs:thread
90 static void act_abort(thread_t thread);
93 static void thread_set_apc_ast(thread_t thread);
94 static void thread_set_apc_ast_locked(thread_t thread);
117 thread_set_state_allowed(thread_t thread, int flavor) in thread_set_state_allowed() argument
119 task_t target_task = get_threadtask(thread); in thread_set_state_allowed()
130 … && !(thread->options & TH_IN_MACH_EXCEPTION) /* Allowed for now - rdar://103085786 */ in thread_set_state_allowed()
174 thread_t thread) in thread_start() argument
176 clear_wait(thread, THREAD_AWAKENED); in thread_start()
177 thread->started = TRUE; in thread_start()
197 thread_t thread, in thread_start_in_assert_wait() argument
209 thread_lock(thread); in thread_start_in_assert_wait()
210 assert(!thread->started); in thread_start_in_assert_wait()
211 assert((thread->state & (TH_WAIT | TH_UNINT)) == (TH_WAIT | TH_UNINT)); in thread_start_in_assert_wait()
212 thread->state &= ~(TH_WAIT | TH_UNINT); in thread_start_in_assert_wait()
213 thread_unlock(thread); in thread_start_in_assert_wait()
221 thread); in thread_start_in_assert_wait()
225 thread_lock(thread); in thread_start_in_assert_wait()
226 thread->started = TRUE; in thread_start_in_assert_wait()
227 thread_unlock(thread); in thread_start_in_assert_wait()
243 thread_t thread) in thread_terminate_internal() argument
247 thread_mtx_lock(thread); in thread_terminate_internal()
249 if (thread->active) { in thread_terminate_internal()
250 thread->active = FALSE; in thread_terminate_internal()
252 act_abort(thread); in thread_terminate_internal()
254 if (thread->started) { in thread_terminate_internal()
255 clear_wait(thread, THREAD_INTERRUPTED); in thread_terminate_internal()
257 thread_start(thread); in thread_terminate_internal()
263 if (thread->affinity_set != NULL) { in thread_terminate_internal()
264 thread_affinity_terminate(thread); in thread_terminate_internal()
268 ipc_thread_port_unpin(get_thread_ro(thread)->tro_self_port); in thread_terminate_internal()
270 thread_mtx_unlock(thread); in thread_terminate_internal()
272 if (thread != current_thread() && result == KERN_SUCCESS) { in thread_terminate_internal()
273 thread_wait(thread, FALSE); in thread_terminate_internal()
281 thread_t thread) in thread_terminate() argument
285 if (thread == THREAD_NULL) { in thread_terminate()
289 if (thread->state & TH_IDLE) { in thread_terminate()
293 task = get_threadtask(thread); in thread_terminate()
296 if (task == kernel_task && thread != current_thread()) { in thread_terminate()
300 kern_return_t result = thread_terminate_internal(thread); in thread_terminate()
308 assert(thread->active == FALSE); in thread_terminate()
309 thread_ast_clear(thread, AST_APC); in thread_terminate()
310 thread_apc_ast(thread); in thread_terminate()
326 thread_t thread) in thread_terminate_from_user() argument
328 if (thread == THREAD_NULL) { in thread_terminate_from_user()
332 if (thread_get_tag(thread) & THREAD_TAG_PTHREAD) { in thread_terminate_from_user()
336 return thread_terminate(thread); in thread_terminate_from_user()
346 thread_t thread) in thread_terminate_pinned() argument
350 if (thread == THREAD_NULL) { in thread_terminate_pinned()
354 task = get_threadtask(thread); in thread_terminate_pinned()
358 assert(thread_get_tag(thread) & (THREAD_TAG_PTHREAD | THREAD_TAG_MAINTHREAD)); in thread_terminate_pinned()
360 thread_mtx_lock(thread); in thread_terminate_pinned()
361 if (task_is_pinned(task) && thread->active) { in thread_terminate_pinned()
362 assert(get_thread_ro(thread)->tro_self_port->ip_pinned == 1); in thread_terminate_pinned()
364 thread_mtx_unlock(thread); in thread_terminate_pinned()
366 kern_return_t result = thread_terminate_internal(thread); in thread_terminate_pinned()
378 thread_hold(thread_t thread) in thread_hold() argument
380 if (thread->suspend_count++ == 0) { in thread_hold()
381 task_t task = get_threadtask(thread); in thread_hold()
382 thread_set_apc_ast(thread); in thread_hold()
383 assert(thread->suspend_parked == FALSE); in thread_hold()
386 thread->thread_id, thread->user_stop_count, task->pidsuspended); in thread_hold()
400 thread_release(thread_t thread) in thread_release() argument
402 assertf(thread->suspend_count > 0, "thread %p over-resumed", thread); in thread_release()
405 if (thread->suspend_count == 0) { in thread_release()
409 if (--thread->suspend_count == 0) { in thread_release()
410 if (!thread->started) { in thread_release()
411 thread_start(thread); in thread_release()
412 } else if (thread->suspend_parked) { in thread_release()
413 thread->suspend_parked = FALSE; in thread_release()
414 thread_wakeup_thread(&thread->suspend_count, thread); in thread_release()
416 …KDBG_RELEASE(MACHDBG_CODE(DBG_MACH_SUSPENSION, MACH_THREAD_RESUME) | DBG_FUNC_NONE, thread->thread… in thread_release()
421 thread_suspend(thread_t thread) in thread_suspend() argument
425 if (thread == THREAD_NULL || get_threadtask(thread) == kernel_task) { in thread_suspend()
429 thread_mtx_lock(thread); in thread_suspend()
431 if (thread->active) { in thread_suspend()
432 if (thread->user_stop_count++ == 0) { in thread_suspend()
433 thread_hold(thread); in thread_suspend()
439 thread_mtx_unlock(thread); in thread_suspend()
441 if (thread != current_thread() && result == KERN_SUCCESS) { in thread_suspend()
442 thread_wait(thread, FALSE); in thread_suspend()
449 thread_resume(thread_t thread) in thread_resume() argument
453 if (thread == THREAD_NULL || get_threadtask(thread) == kernel_task) { in thread_resume()
457 thread_mtx_lock(thread); in thread_resume()
459 if (thread->active) { in thread_resume()
460 if (thread->user_stop_count > 0) { in thread_resume()
461 if (--thread->user_stop_count == 0) { in thread_resume()
462 thread_release(thread); in thread_resume()
471 thread_mtx_unlock(thread); in thread_resume()
482 thread_depress_abort_from_user(thread_t thread) in thread_depress_abort_from_user() argument
486 if (thread == THREAD_NULL) { in thread_depress_abort_from_user()
490 thread_mtx_lock(thread); in thread_depress_abort_from_user()
492 if (thread->active) { in thread_depress_abort_from_user()
493 result = thread_depress_abort(thread); in thread_depress_abort_from_user()
498 thread_mtx_unlock(thread); in thread_depress_abort_from_user()
512 thread_t thread) in act_abort() argument
516 thread_lock(thread); in act_abort()
518 if (!(thread->sched_flags & TH_SFLAG_ABORT)) { in act_abort()
519 thread->sched_flags |= TH_SFLAG_ABORT; in act_abort()
520 thread_set_apc_ast_locked(thread); in act_abort()
521 thread_depress_abort_locked(thread); in act_abort()
523 thread->sched_flags &= ~TH_SFLAG_ABORTSAFELY; in act_abort()
526 thread_unlock(thread); in act_abort()
532 thread_t thread) in thread_abort() argument
536 if (thread == THREAD_NULL) { in thread_abort()
540 thread_mtx_lock(thread); in thread_abort()
542 if (thread->active) { in thread_abort()
543 act_abort(thread); in thread_abort()
544 clear_wait(thread, THREAD_INTERRUPTED); in thread_abort()
549 thread_mtx_unlock(thread); in thread_abort()
556 thread_t thread) in thread_abort_safely() argument
560 if (thread == THREAD_NULL) { in thread_abort_safely()
564 thread_mtx_lock(thread); in thread_abort_safely()
566 if (thread->active) { in thread_abort_safely()
569 thread_lock(thread); in thread_abort_safely()
570 if (!thread->at_safe_point || in thread_abort_safely()
571 clear_wait_internal(thread, THREAD_INTERRUPTED) != KERN_SUCCESS) { in thread_abort_safely()
572 if (!(thread->sched_flags & TH_SFLAG_ABORT)) { in thread_abort_safely()
573 thread->sched_flags |= TH_SFLAG_ABORTED_MASK; in thread_abort_safely()
574 thread_set_apc_ast_locked(thread); in thread_abort_safely()
575 thread_depress_abort_locked(thread); in thread_abort_safely()
578 thread_unlock(thread); in thread_abort_safely()
584 thread_mtx_unlock(thread); in thread_abort_safely()
596 thread_t thread, in thread_info() argument
603 if (thread == THREAD_NULL) { in thread_info()
607 thread_mtx_lock(thread); in thread_info()
609 if (thread->active || thread->inspection) { in thread_info()
611 thread, flavor, thread_info_out, thread_info_count); in thread_info()
616 thread_mtx_unlock(thread); in thread_info()
623 thread_t thread, in thread_get_state_internal() argument
632 if (thread == THREAD_NULL) { in thread_get_state_internal()
636 thread_mtx_lock(thread); in thread_get_state_internal()
638 if (thread->active) { in thread_get_state_internal()
639 if (thread != current_thread()) { in thread_get_state_internal()
640 thread_hold(thread); in thread_get_state_internal()
642 thread_mtx_unlock(thread); in thread_get_state_internal()
644 if (thread_stop(thread, FALSE)) { in thread_get_state_internal()
645 thread_mtx_lock(thread); in thread_get_state_internal()
647 thread, flavor, state, state_count); in thread_get_state_internal()
648 thread_unstop(thread); in thread_get_state_internal()
650 thread_mtx_lock(thread); in thread_get_state_internal()
654 thread_release(thread); in thread_get_state_internal()
657 thread, flavor, state, state_count); in thread_get_state_internal()
659 } else if (thread->inspection) { in thread_get_state_internal()
661 thread, flavor, state, state_count); in thread_get_state_internal()
667 result = machine_thread_state_convert_to_user(thread, flavor, state, in thread_get_state_internal()
671 thread_mtx_unlock(thread); in thread_get_state_internal()
680 thread_t thread,
687 thread_t thread, in thread_get_state() argument
692 return thread_get_state_internal(thread, flavor, state, state_count, TSSF_FLAGS_NONE); in thread_get_state()
697 thread_t thread, in thread_get_state_to_user() argument
702 return thread_get_state_internal(thread, flavor, state, state_count, TSSF_TRANSLATE_TO_USER); in thread_get_state_to_user()
711 thread_t thread, in thread_set_state_internal() argument
722 if (thread == THREAD_NULL) { in thread_set_state_internal()
727 !thread_set_state_allowed(thread, flavor)) { in thread_set_state_internal()
731 thread_mtx_lock(thread); in thread_set_state_internal()
733 if (thread->active) { in thread_set_state_internal()
735 result = machine_thread_state_convert_from_user(thread, flavor, in thread_set_state_internal()
741 if (thread != current_thread()) { in thread_set_state_internal()
742 thread_hold(thread); in thread_set_state_internal()
744 thread_mtx_unlock(thread); in thread_set_state_internal()
746 if (thread_stop(thread, TRUE)) { in thread_set_state_internal()
747 thread_mtx_lock(thread); in thread_set_state_internal()
749 thread, flavor, state, state_count); in thread_set_state_internal()
750 thread_unstop(thread); in thread_set_state_internal()
752 thread_mtx_lock(thread); in thread_set_state_internal()
756 thread_release(thread); in thread_set_state_internal()
759 thread, flavor, state, state_count); in thread_set_state_internal()
766 extmod_statistics_incr_thread_set_state(thread); in thread_set_state_internal()
770 thread_mtx_unlock(thread); in thread_set_state_internal()
778 thread_t thread,
785 thread_t thread, in thread_set_state() argument
790 return thread_set_state_internal(thread, flavor, state, state_count, NULL, 0, TSSF_FLAGS_NONE); in thread_set_state()
795 thread_t thread, in thread_set_state_from_user() argument
800 return thread_set_state_internal(thread, flavor, state, state_count, NULL, in thread_set_state_from_user()
806 thread_t thread, in thread_convert_thread_state() argument
824 if (thread == THREAD_NULL) { in thread_convert_thread_state()
833 to_thread = thread; in thread_convert_thread_state()
837 from_thread = thread; in thread_convert_thread_state()
874 thread_t thread) in thread_state_initialize() argument
878 if (thread == THREAD_NULL) { in thread_state_initialize()
882 thread_mtx_lock(thread); in thread_state_initialize()
884 if (thread->active) { in thread_state_initialize()
885 if (thread != current_thread()) { in thread_state_initialize()
887 assert(!(thread->state & TH_RUN)); in thread_state_initialize()
889 machine_thread_state_initialize( thread ); in thread_state_initialize()
894 thread_mtx_unlock(thread); in thread_state_initialize()
998 thread_t thread, in thread_setstatus() argument
1003 return thread_set_state(thread, flavor, tstate, count); in thread_setstatus()
1008 thread_t thread, in thread_setstatus_from_user() argument
1016 return thread_set_state_internal(thread, flavor, tstate, count, old_tstate, in thread_setstatus_from_user()
1027 thread_t thread, in thread_getstatus() argument
1032 return thread_get_state(thread, flavor, tstate, count); in thread_getstatus()
1037 thread_t thread, in thread_getstatus_to_user() argument
1043 return thread_get_state_internal(thread, flavor, tstate, count, flags | TSSF_TRANSLATE_TO_USER); in thread_getstatus_to_user()
1052 thread_t thread, in thread_set_tsd_base() argument
1057 if (thread == THREAD_NULL) { in thread_set_tsd_base()
1061 thread_mtx_lock(thread); in thread_set_tsd_base()
1063 if (thread->active) { in thread_set_tsd_base()
1064 if (thread != current_thread()) { in thread_set_tsd_base()
1065 thread_hold(thread); in thread_set_tsd_base()
1067 thread_mtx_unlock(thread); in thread_set_tsd_base()
1069 if (thread_stop(thread, TRUE)) { in thread_set_tsd_base()
1070 thread_mtx_lock(thread); in thread_set_tsd_base()
1071 result = machine_thread_set_tsd_base(thread, tsd_base); in thread_set_tsd_base()
1072 thread_unstop(thread); in thread_set_tsd_base()
1074 thread_mtx_lock(thread); in thread_set_tsd_base()
1078 thread_release(thread); in thread_set_tsd_base()
1080 result = machine_thread_set_tsd_base(thread, tsd_base); in thread_set_tsd_base()
1086 thread_mtx_unlock(thread); in thread_set_tsd_base()
1100 thread_set_apc_ast(thread_t thread) in thread_set_apc_ast() argument
1104 thread_lock(thread); in thread_set_apc_ast()
1105 thread_set_apc_ast_locked(thread); in thread_set_apc_ast()
1106 thread_unlock(thread); in thread_set_apc_ast()
1119 thread_set_apc_ast_locked(thread_t thread) in thread_set_apc_ast_locked() argument
1121 thread_ast_set(thread, AST_APC); in thread_set_apc_ast_locked()
1123 if (thread == current_thread()) { in thread_set_apc_ast_locked()
1124 ast_propagate(thread); in thread_set_apc_ast_locked()
1126 processor_t processor = thread->last_processor; in thread_set_apc_ast_locked()
1130 processor->active_thread == thread) { in thread_set_apc_ast_locked()
1152 thread_t thread = current_thread(); in thread_suspended() local
1154 thread_mtx_lock(thread); in thread_suspended()
1157 thread->suspend_parked = FALSE; in thread_suspended()
1159 assert(thread->suspend_parked == FALSE); in thread_suspended()
1162 if (thread->suspend_count > 0) { in thread_suspended()
1163 thread_set_apc_ast(thread); in thread_suspended()
1166 thread_mtx_unlock(thread); in thread_suspended()
1177 thread_apc_ast(thread_t thread) in thread_apc_ast() argument
1179 thread_mtx_lock(thread); in thread_apc_ast()
1181 assert(thread->suspend_parked == FALSE); in thread_apc_ast()
1184 thread_lock(thread); in thread_apc_ast()
1187 assert((thread->sched_flags & TH_SFLAG_DEPRESS) == 0); in thread_apc_ast()
1189 thread->sched_flags &= ~TH_SFLAG_ABORTED_MASK; in thread_apc_ast()
1190 thread_unlock(thread); in thread_apc_ast()
1193 if (!thread->active) { in thread_apc_ast()
1195 thread_mtx_unlock(thread); in thread_apc_ast()
1202 if (thread->suspend_count > 0) { in thread_apc_ast()
1203 thread->suspend_parked = TRUE; in thread_apc_ast()
1204 assert_wait(&thread->suspend_count, in thread_apc_ast()
1206 thread_mtx_unlock(thread); in thread_apc_ast()
1212 thread_mtx_unlock(thread); in thread_apc_ast()
1218 thread_t thread,
1227 thread_t thread, in thread_raise_exception() argument
1235 if (thread == THREAD_NULL) { in thread_raise_exception()
1239 task = get_threadtask(thread); in thread_raise_exception()
1255 …kern_return_t kr = exception_deliver(thread, exception, codes, code_count, host_priv->exc_actions,… in thread_raise_exception()
1260 return thread_resume(thread); in thread_raise_exception()
1266 thread_t thread) in thread_debug_return_to_user_ast() argument
1268 #pragma unused(thread) in thread_debug_return_to_user_ast()
1270 if ((thread->sched_flags & TH_SFLAG_RW_PROMOTED) || in thread_debug_return_to_user_ast()
1271 thread->rwlock_count > 0) { in thread_debug_return_to_user_ast()
1272 …th rw lock held, thread %p sched_flag %u rwlock_count %d", thread, thread->sched_flags, thread->rw… in thread_debug_return_to_user_ast()
1275 if ((thread->sched_flags & TH_SFLAG_FLOOR_PROMOTED) || in thread_debug_return_to_user_ast()
1276 thread->priority_floor_count > 0) { in thread_debug_return_to_user_ast()
1277 …ost set, thread %p sched_flag %u priority_floor_count %d", thread, thread->sched_flags, thread->pr… in thread_debug_return_to_user_ast()
1280 if (thread->th_vm_faults_disabled) { in thread_debug_return_to_user_ast()
1281 panic("Returning to userspace with vm faults disabled, thread %p", thread); in thread_debug_return_to_user_ast()
1285 assert3u(thread->th_exclaves_state & TH_EXCLAVES_STATE_ANY, ==, 0); in thread_debug_return_to_user_ast()
1295 thread_t thread,
1302 thread_t thread, in act_set_state() argument
1307 if (thread == current_thread()) { in act_set_state()
1311 return thread_set_state(thread, flavor, state, count); in act_set_state()
1316 thread_t thread, in act_set_state_from_user() argument
1321 if (thread == current_thread()) { in act_set_state_from_user()
1325 return thread_set_state_from_user(thread, flavor, state, count); in act_set_state_from_user()
1331 thread_t thread,
1338 thread_t thread, in act_get_state() argument
1343 if (thread == current_thread()) { in act_get_state()
1347 return thread_get_state(thread, flavor, state, count); in act_get_state()
1352 thread_t thread, in act_get_state_to_user() argument
1357 if (thread == current_thread()) { in act_get_state_to_user()
1361 return thread_get_state_to_user(thread, flavor, state, count); in act_get_state_to_user()
1366 thread_t thread, in act_set_ast() argument
1371 if (thread == current_thread()) { in act_set_ast()
1372 thread_ast_set(thread, ast); in act_set_ast()
1373 ast_propagate(thread); in act_set_ast()
1377 thread_lock(thread); in act_set_ast()
1378 thread_ast_set(thread, ast); in act_set_ast()
1379 processor = thread->last_processor; in act_set_ast()
1382 processor->active_thread == thread) { in act_set_ast()
1385 thread_unlock(thread); in act_set_ast()
1400 act_set_ast_async(thread_t thread, in act_set_ast_async() argument
1403 thread_ast_set(thread, ast); in act_set_ast_async()
1405 if (thread == current_thread()) { in act_set_ast_async()
1407 ast_propagate(thread); in act_set_ast_async()
1415 thread_t thread = current_thread(); in act_set_debug_assert() local
1416 if (thread_ast_peek(thread, AST_DEBUG_ASSERT) != AST_DEBUG_ASSERT) { in act_set_debug_assert()
1417 thread_ast_set(thread, AST_DEBUG_ASSERT); in act_set_debug_assert()
1421 ast_propagate(thread); in act_set_debug_assert()
1427 act_set_astbsd(thread_t thread) in act_set_astbsd() argument
1429 act_set_ast(thread, AST_BSD); in act_set_astbsd()
1433 act_set_astkevent(thread_t thread, uint16_t bits) in act_set_astkevent() argument
1435 os_atomic_or(&thread->kevent_ast_bits, bits, relaxed); in act_set_astkevent()
1438 act_set_ast_async(thread, AST_KEVENT); in act_set_astkevent()
1442 act_clear_astkevent(thread_t thread, uint16_t bits) in act_clear_astkevent() argument
1448 uint16_t cur = os_atomic_load(&thread->kevent_ast_bits, relaxed); in act_clear_astkevent()
1450 cur = os_atomic_andnot_orig(&thread->kevent_ast_bits, bits, relaxed); in act_clear_astkevent()
1456 act_set_ast_reset_pcs(task_t task, thread_t thread) in act_set_ast_reset_pcs() argument
1464 if (thread == current_thread()) { in act_set_ast_reset_pcs()
1469 thread_ast_set(thread, AST_RESET_PCS); in act_set_ast_reset_pcs()
1470 ast_propagate(thread); in act_set_ast_reset_pcs()
1472 thread_lock(thread); in act_set_ast_reset_pcs()
1474 assert(thread->t_rr_state.trr_ipi_ack_pending == 0); in act_set_ast_reset_pcs()
1475 assert(thread->t_rr_state.trr_sync_waiting == 0); in act_set_ast_reset_pcs()
1477 processor = thread->last_processor; in act_set_ast_reset_pcs()
1478 if (!thread->active) { in act_set_ast_reset_pcs()
1491 processor->active_thread == thread) { in act_set_ast_reset_pcs()
1492 thread->t_rr_state.trr_ipi_ack_pending = true; in act_set_ast_reset_pcs()
1494 thread_ast_set(thread, AST_RESET_PCS); in act_set_ast_reset_pcs()
1496 } else if (thread_reset_pcs_in_range(task, thread)) { in act_set_ast_reset_pcs()
1497 if (thread->t_rr_state.trr_fault_state) { in act_set_ast_reset_pcs()
1498 thread->t_rr_state.trr_fault_state = in act_set_ast_reset_pcs()
1502 thread_ast_set(thread, AST_RESET_PCS); in act_set_ast_reset_pcs()
1504 thread_unlock(thread); in act_set_ast_reset_pcs()
1513 act_set_kperf(thread_t thread) in act_set_kperf() argument
1516 if (thread != current_thread()) { in act_set_kperf()
1522 act_set_ast(thread, AST_KPERF); in act_set_kperf()
1528 thread_t thread) in act_set_astmacf() argument
1530 act_set_ast( thread, AST_MACF); in act_set_astmacf()
1535 act_set_astledger(thread_t thread) in act_set_astledger() argument
1537 act_set_ast(thread, AST_LEDGER); in act_set_astledger()
1549 act_set_astledger_async(thread_t thread) in act_set_astledger_async() argument
1551 act_set_ast_async(thread, AST_LEDGER); in act_set_astledger_async()
1555 act_set_io_telemetry_ast(thread_t thread) in act_set_io_telemetry_ast() argument
1557 act_set_ast(thread, AST_TELEMETRY_IO); in act_set_io_telemetry_ast()
1561 act_set_macf_telemetry_ast(thread_t thread) in act_set_macf_telemetry_ast() argument
1563 act_set_ast(thread, AST_TELEMETRY_MACF); in act_set_macf_telemetry_ast()
1567 act_set_astproc_resource(thread_t thread) in act_set_astproc_resource() argument
1569 act_set_ast(thread, AST_PROC_RESOURCE); in act_set_astproc_resource()