Lines Matching refs:tl

132 static void wq_runreq(proc_t p, boolean_t overcommit, uint32_t priority, thread_t th, struct threadlist *tl,
135 static int setup_wqthread(proc_t p, thread_t th, boolean_t overcommit, uint32_t priority, int reuse_thread, struct threadlist *tl);
141 static void workqueue_removethread(struct threadlist *tl, int fromexit);
841 struct threadlist *tl;
844 if ((tl = uth->uu_threadlist))
845 affinity = tl->th_affinity_tag;
883 struct threadlist *tl;
887 tl = uth->uu_threadlist;
888 wq = tl->th_workq;
896 old_activecount = OSAddAtomic(-1, &wq->wq_thactive_count[tl->th_priority][tl->th_affinity_tag]);
907 lastblocked_ptr = (UInt64 *)&wq->wq_lastblocked_ts[tl->th_priority][tl->th_affinity_tag];
924 KERNEL_DEBUG1(0xefffd020 | DBG_FUNC_START, wq, old_activecount, tl->th_priority, tl->th_affinity_tag, thread_tid(thread));
937 OSAddAtomic(1, &wq->wq_thactive_count[tl->th_priority][tl->th_affinity_tag]);
939 KERNEL_DEBUG1(0xefffd020 | DBG_FUNC_END, wq, wq->wq_threads_scheduled, tl->th_priority, tl->th_affinity_tag, thread_tid(thread));
947 workqueue_removethread(struct threadlist *tl, int fromexit)
956 wq = tl->th_workq;
958 TAILQ_REMOVE(&wq->wq_thidlelist, tl, th_entry);
971 thread_sched_call(tl->th_thread, NULL);
973 uth = get_bsdthread_info(tl->th_thread);
982 if ( (tl->th_flags & TH_LIST_SUSPENDED) ) {
991 (void)mach_vm_deallocate(wq->wq_map, tl->th_stackaddr, tl->th_allocsize);
993 (void)mach_port_deallocate(get_task_ipcspace(wq->wq_task), tl->th_thport);
995 KERNEL_DEBUG1(0xefffd014 | DBG_FUNC_END, wq, (uintptr_t)thread_tid(current_thread()), wq->wq_nthreads, 0xdead, thread_tid(tl->th_thread));
998 KERNEL_DEBUG1(0xefffd018 | DBG_FUNC_END, wq, (uintptr_t)thread_tid(current_thread()), wq->wq_nthreads, 0xdead, thread_tid(tl->th_thread));
1003 thread_deallocate(tl->th_thread);
1005 kfree(tl, sizeof(struct threadlist));
1017 struct threadlist *tl;
1057 tl = kalloc(sizeof(struct threadlist));
1058 bzero(tl, sizeof(struct threadlist));
1067 tl->th_allocsize = PTH_DEFAULT_STACKSIZE + PTH_DEFAULT_GUARDSIZE + p->p_pthsize;
1070 tl->th_allocsize,
1078 &stackaddr, tl->th_allocsize,
1089 (void) mach_vm_deallocate(wq->wq_map, stackaddr, tl->th_allocsize);
1095 kfree(tl, sizeof(struct threadlist));
1101 tl->th_thport = ipc_port_copyout_send(sright, get_task_ipcspace(wq->wq_task));
1105 tl->th_flags = TH_LIST_INITED | TH_LIST_SUSPENDED;
1107 tl->th_thread = th;
1108 tl->th_workq = wq;
1109 tl->th_stackaddr = stackaddr;
1110 tl->th_affinity_tag = -1;
1111 tl->th_priority = WORKQUEUE_NUMPRIOS;
1112 tl->th_policy = -1;
1114 uth = get_bsdthread_info(tl->th_thread);
1118 uth->uu_threadlist = (void *)tl;
1119 TAILQ_INSERT_TAIL(&wq->wq_thidlelist, tl, th_entry);
1123 KERNEL_DEBUG1(0xefffd014 | DBG_FUNC_START, wq, wq->wq_nthreads, 0, thread_tid(current_thread()), thread_tid(tl->th_thread));
1432 struct threadlist * tl, *tlist;
1449 TAILQ_FOREACH_SAFE(tl, &wq->wq_thrunlist, th_entry, tlist) {
1451 thread_sched_call(tl->th_thread, NULL);
1453 uth = get_bsdthread_info(tl->th_thread);
1457 TAILQ_REMOVE(&wq->wq_thrunlist, tl, th_entry);
1462 thread_deallocate(tl->th_thread);
1464 kfree(tl, sizeof(struct threadlist));
1466 TAILQ_FOREACH_SAFE(tl, &wq->wq_thidlelist, th_entry, tlist) {
1467 workqueue_removethread(tl, 1);
1538 struct threadlist *tl = NULL;
1551 if ( (tl = uth->uu_threadlist) == NULL)
1645 affinity_tag = tl->th_affinity_tag;
1806 tl = ttl;
1811 if (tl == NULL) {
1812 tl = TAILQ_FIRST(&wq->wq_thidlelist);
1813 TAILQ_REMOVE(&wq->wq_thidlelist, tl, th_entry);
1817 TAILQ_INSERT_TAIL(&wq->wq_thrunlist, tl, th_entry);
1819 if ((tl->th_flags & TH_LIST_SUSPENDED) == TH_LIST_SUSPENDED) {
1820 tl->th_flags &= ~TH_LIST_SUSPENDED;
1823 } else if ((tl->th_flags & TH_LIST_BLOCKED) == TH_LIST_BLOCKED) {
1824 tl->th_flags &= ~TH_LIST_BLOCKED;
1827 tl->th_flags |= TH_LIST_RUNNING | TH_LIST_BUSY;
1834 th_to_run = tl->th_thread;
1841 if ( !(tl->th_flags & TH_LIST_CONSTRAINED)) {
1843 tl->th_flags |= TH_LIST_CONSTRAINED;
1846 if (tl->th_flags & TH_LIST_CONSTRAINED) {
1848 tl->th_flags &= ~TH_LIST_CONSTRAINED;
1851 orig_priority = tl->th_priority;
1852 orig_affinity_tag = tl->th_affinity_tag;
1854 tl->th_priority = priority;
1855 tl->th_affinity_tag = affinity_tag;
1902 KERNEL_DEBUG(0xefffd120 | DBG_FUNC_START, wq, orig_priority, tl->th_policy, 0, 0);
1915 if (tl->th_policy != policy) {
1919 tl->th_policy = policy;
1959 wq_runreq(p, overcommit, priority, th_to_run, tl, reuse_thread, wake_thread, (thread == th_to_run));
1985 TAILQ_REMOVE(&wq->wq_thrunlist, tl, th_entry);
1986 tl->th_flags &= ~TH_LIST_RUNNING;
1988 tl->th_flags |= TH_LIST_BLOCKED;
1989 TAILQ_INSERT_HEAD(&wq->wq_thidlelist, tl, th_entry);
1993 OSAddAtomic(-1, &wq->wq_thactive_count[tl->th_priority][tl->th_affinity_tag]);
1994 wq->wq_thscheduled_count[tl->th_priority][tl->th_affinity_tag]--;
1997 if (tl->th_flags & TH_LIST_CONSTRAINED) {
2000 tl->th_flags &= ~TH_LIST_CONSTRAINED;
2010 assert_wait_timeout((caddr_t)tl, (THREAD_INTERRUPTIBLE), us_to_wait, NSEC_PER_USEC);
2032 struct threadlist *tl;
2038 if (uth != NULL && (tl = uth->uu_threadlist) != NULL) {
2040 if ((tl->th_flags & (TH_LIST_RUNNING | TH_LIST_BUSY)) == TH_LIST_RUNNING) {
2061 if (tl->th_flags & TH_LIST_SUSPENDED) {
2067 workqueue_removethread(tl, 0);
2071 while ((tl->th_flags & TH_LIST_BUSY)) {
2079 tl->th_flags |= TH_LIST_NEED_WAKEUP;
2081 assert_wait((caddr_t)tl, (THREAD_UNINT));
2105 struct threadlist *tl;
2113 if ((tl = uth->uu_threadlist) != NULL) {
2115 if ((tl->th_flags & (TH_LIST_RUNNING | TH_LIST_BUSY)) == TH_LIST_RUNNING) {
2123 KERNEL_DEBUG(0xefffd018 | DBG_FUNC_END, tl->th_workq, 0, 0, 0, 0);
2131 if ( !(tl->th_flags & TH_LIST_RUNNING)) {
2139 workqueue_removethread(tl, 0);
2149 while ((tl->th_flags & TH_LIST_BUSY)) {
2151 assert_wait((caddr_t)tl, (THREAD_UNINT));
2174 wq_runreq(proc_t p, boolean_t overcommit, uint32_t priority, thread_t th, struct threadlist *tl,
2180 KERNEL_DEBUG1(0xefffd004 | DBG_FUNC_START, tl->th_workq, tl->th_priority, tl->th_affinity_tag, thread_tid(current_thread()), thread_tid(th));
2182 ret = setup_wqthread(p, th, overcommit, priority, reuse_thread, tl);
2188 KERNEL_DEBUG(0xefffd000 | DBG_FUNC_END, tl->th_workq, 0, 0, 4, 0);
2197 tl->th_flags &= ~TH_LIST_BUSY;
2198 wakeup(tl);
2202 KERNEL_DEBUG1(0xefffd014 | DBG_FUNC_END, tl->th_workq, 0, 0, thread_tid(current_thread()), thread_tid(th));
2206 if (tl->th_flags & TH_LIST_NEED_WAKEUP)
2207 wakeup(tl);
2211 tl->th_flags &= ~(TH_LIST_BUSY | TH_LIST_NEED_WAKEUP);
2227 setup_wqthread(proc_t p, thread_t th, boolean_t overcommit, uint32_t priority, int reuse_thread, struct threadlist *tl)
2248 ts->eax = (unsigned int)(tl->th_stackaddr + PTH_DEFAULT_STACKSIZE + PTH_DEFAULT_GUARDSIZE);
2249 ts->ebx = (unsigned int)tl->th_thport;
2250 ts->ecx = (unsigned int)(tl->th_stackaddr + PTH_DEFAULT_GUARDSIZE);
2257 ts->esp = (int)((vm_offset_t)((tl->th_stackaddr + PTH_DEFAULT_STACKSIZE + PTH_DEFAULT_GUARDSIZE) - C_32_STK_ALIGN));
2266 ts64->rdi = (uint64_t)(tl->th_stackaddr + PTH_DEFAULT_STACKSIZE + PTH_DEFAULT_GUARDSIZE);
2267 ts64->rsi = (uint64_t)(tl->th_thport);
2268 ts64->rdx = (uint64_t)(tl->th_stackaddr + PTH_DEFAULT_GUARDSIZE);
2276 ts64->rsp = (uint64_t)((tl->th_stackaddr + PTH_DEFAULT_STACKSIZE + PTH_DEFAULT_GUARDSIZE) - C_64_REDZONE_LEN);