Home | History | Annotate | Download | only in kern

Lines Matching defs:wq

75     "struct workqueue *"/*wq*/,
83 "struct workqueue *"/*wq*/);
86 "struct workqueue *"/*wq*/,
90 "struct workqueue *"/*wq*/,
95 "struct workqueue *"/*wq*/,
100 "struct workqueue *"/*wq*/,
103 "struct workqueue *"/*wq*/,
106 "struct workqueue *"/*wq*/,
109 "struct workqueue *"/*wq*/,
113 "struct workqueue *"/*wq*/);
115 "struct workqueue *"/*wq*/);
127 workqueue_queue_lookup(struct workqueue *wq, struct cpu_info *ci)
131 if (wq->wq_flags & WQ_PERCPU) {
135 return (void *)((uintptr_t)(wq) + WQ_SIZE + (idx * WQ_QUEUE_SIZE));
139 workqueue_runlist(struct workqueue *wq, struct workqhead *list)
151 wq, wk, wq->wq_func, wq->wq_arg);
152 (*wq->wq_func)((void *)wk, wq->wq_arg);
154 wq, wk, wq->wq_func, wq->wq_arg);
157 l, l->l_nopreempt, wq->wq_func);
164 struct workqueue *wq = cookie;
166 int s, fpu = wq->wq_flags & WQ_FPU;
169 q = workqueue_queue_lookup(wq, curlwp->l_cpu);
191 workqueue_runlist(wq, &tmp);
208 workqueue_init(struct workqueue *wq, const char *name,
213 KASSERT(sizeof(wq->wq_name) > strlen(name));
214 strncpy(wq->wq_name, name, sizeof(wq->wq_name));
216 wq->wq_prio = prio;
217 wq->wq_func = callback_func;
218 wq->wq_arg = callback_arg;
222 workqueue_initqueue(struct workqueue *wq, struct workqueue_queue *q,
230 cv_init(&q->q_cv, wq->wq_name);
233 ktf = ((wq->wq_flags & WQ_MPSAFE) != 0 ? KTHREAD_MPSAFE : 0);
234 if (wq->wq_prio < PRI_KERNEL)
237 error = kthread_create(wq->wq_prio, ktf, ci, workqueue_worker,
238 wq, &q->q_worker, "%s/%u", wq->wq_name, ci->ci_index);
240 error = kthread_create(wq->wq_prio, ktf, ci, workqueue_worker,
241 wq, &q->q_worker, "%s", wq->wq_name);
276 workqueue_finiqueue(struct workqueue *wq, struct workqueue_queue *q)
280 KASSERT(wq->wq_func == workqueue_exit);
303 struct workqueue *wq;
311 wq = (void *)roundup2((uintptr_t)ptr, coherency_unit);
312 wq->wq_ptr = ptr;
313 wq->wq_flags = flags;
315 workqueue_init(wq, name, callback_func, callback_arg, prio, ipl);
323 q = workqueue_queue_lookup(wq, ci);
324 error = workqueue_initqueue(wq, q, ipl, ci);
331 q = workqueue_queue_lookup(wq, NULL);
332 error = workqueue_initqueue(wq, q, ipl, NULL);
336 workqueue_destroy(wq);
338 *wqp = wq;
345 workqueue_q_wait(struct workqueue *wq, struct workqueue_queue *q,
362 SDT_PROBE2(sdt, kernel, workqueue, wait__self, wq, wk_target);
376 SDT_PROBE2(sdt, kernel, workqueue, wait__hit, wq, wk);
408 workqueue_wait(struct workqueue *wq, struct work *wk)
415 SDT_PROBE2(sdt, kernel, workqueue, wait__start, wq, wk);
416 if (ISSET(wq->wq_flags, WQ_PERCPU)) {
420 q = workqueue_queue_lookup(wq, ci);
421 found = workqueue_q_wait(wq, q, (work_impl_t *)wk);
426 q = workqueue_queue_lookup(wq, NULL);
427 (void)workqueue_q_wait(wq, q, (work_impl_t *)wk);
429 SDT_PROBE2(sdt, kernel, workqueue, wait__done, wq, wk);
433 workqueue_destroy(struct workqueue *wq)
441 SDT_PROBE1(sdt, kernel, workqueue, exit__start, wq);
442 wq->wq_func = workqueue_exit;
444 q = workqueue_queue_lookup(wq, ci);
446 workqueue_finiqueue(wq, q);
449 SDT_PROBE1(sdt, kernel, workqueue, exit__done, wq);
450 kmem_free(wq->wq_ptr, workqueue_size(wq->wq_flags));
467 workqueue_enqueue(struct workqueue *wq, struct work *wk0, struct cpu_info *ci)
472 SDT_PROBE3(sdt, kernel, workqueue, enqueue, wq, wk0, ci);
474 KASSERT(wq->wq_flags & WQ_PERCPU || ci == NULL);
475 q = workqueue_queue_lookup(wq, ci);