Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/kern_synch.c
Show First 20 Lines • Show All 524 Lines • ▼ Show 20 Lines | if (SDT_PROBES_ENABLED() && | ||||
((flags & SW_PREEMPT) != 0 || ((flags & SW_INVOL) != 0 && | ((flags & SW_PREEMPT) != 0 || ((flags & SW_INVOL) != 0 && | ||||
(flags & SW_TYPE_MASK) == SWT_NEEDRESCHED))) | (flags & SW_TYPE_MASK) == SWT_NEEDRESCHED))) | ||||
SDT_PROBE0(sched, , , preempt); | SDT_PROBE0(sched, , , preempt); | ||||
#endif | #endif | ||||
sched_switch(td, newtd, flags); | sched_switch(td, newtd, flags); | ||||
CTR4(KTR_PROC, "mi_switch: new thread %ld (td_sched %p, pid %ld, %s)", | CTR4(KTR_PROC, "mi_switch: new thread %ld (td_sched %p, pid %ld, %s)", | ||||
td->td_tid, td_get_sched(td), td->td_proc->p_pid, td->td_name); | td->td_tid, td_get_sched(td), td->td_proc->p_pid, td->td_name); | ||||
/* | /* | ||||
* If the last thread was exiting, finish cleaning it up. | * If the last thread was exiting, finish cleaning it up. | ||||
*/ | */ | ||||
if ((td = PCPU_GET(deadthread))) { | td = PCPU_GET(deadthread); | ||||
if (__predict_false(td != NULL)) { | |||||
atomic_thread_fence_rel(); | |||||
PCPU_SET(deadthread, NULL); | PCPU_SET(deadthread, NULL); | ||||
thread_stash(td); | td->td_state = TDS_UNUSED; | ||||
} | } | ||||
} | } | ||||
/* | /* | ||||
* Change thread state to be runnable, placing it on the run queue if | * Change thread state to be runnable, placing it on the run queue if | ||||
* it is in memory. If it is swapped out, return true so our caller | * it is in memory. If it is swapped out, return true so our caller | ||||
* will know to awaken the swapper. | * will know to awaken the swapper. | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 119 Lines • Show Last 20 Lines |