Lines Matching refs:task

58 	struct task		*tb_running;
65 STAILQ_HEAD(, task) tq_queue;
67 struct task *tq_hint;
128 task_get_busy(struct taskqueue *queue, struct task *task) in task_get_busy() argument
134 if (tb->tb_running == task) in task_get_busy()
232 taskqueue_enqueue_locked(struct taskqueue *queue, struct task *task, int flags) in taskqueue_enqueue_locked() argument
234 struct task *ins; in taskqueue_enqueue_locked()
235 struct task *prev; in taskqueue_enqueue_locked()
238 KASSERT(task->ta_func != NULL, ("enqueueing task with NULL func")); in taskqueue_enqueue_locked()
243 tb = task_get_busy(queue, task); in taskqueue_enqueue_locked()
253 if (task->ta_pending) { in taskqueue_enqueue_locked()
258 if (task->ta_pending < USHRT_MAX) in taskqueue_enqueue_locked()
259 task->ta_pending++; in taskqueue_enqueue_locked()
270 prev = STAILQ_LAST(&queue->tq_queue, task, ta_link); in taskqueue_enqueue_locked()
271 if (!prev || prev->ta_priority >= task->ta_priority) { in taskqueue_enqueue_locked()
272 STAILQ_INSERT_TAIL(&queue->tq_queue, task, ta_link); in taskqueue_enqueue_locked()
275 if (prev && prev->ta_priority >= task->ta_priority) { in taskqueue_enqueue_locked()
282 if (ins->ta_priority < task->ta_priority) in taskqueue_enqueue_locked()
286 STAILQ_INSERT_AFTER(&queue->tq_queue, prev, task, ta_link); in taskqueue_enqueue_locked()
287 queue->tq_hint = task; in taskqueue_enqueue_locked()
289 STAILQ_INSERT_HEAD(&queue->tq_queue, task, ta_link); in taskqueue_enqueue_locked()
292 task->ta_pending = 1; in taskqueue_enqueue_locked()
305 taskqueue_enqueue_flags(struct taskqueue *queue, struct task *task, int flags) in taskqueue_enqueue_flags() argument
310 res = taskqueue_enqueue_locked(queue, task, flags); in taskqueue_enqueue_flags()
317 taskqueue_enqueue(struct taskqueue *queue, struct task *task) in taskqueue_enqueue() argument
319 return (taskqueue_enqueue_flags(queue, task, 0)); in taskqueue_enqueue()
403 struct task t_barrier; in taskqueue_drain_tq_queue()
489 struct task *task; in taskqueue_run_locked() local
499 while ((task = STAILQ_FIRST(&queue->tq_queue)) != NULL) { in taskqueue_run_locked()
501 if (queue->tq_hint == task) in taskqueue_run_locked()
503 pending = task->ta_pending; in taskqueue_run_locked()
504 task->ta_pending = 0; in taskqueue_run_locked()
505 tb.tb_running = task; in taskqueue_run_locked()
510 KASSERT(task->ta_func != NULL, ("task->ta_func is NULL")); in taskqueue_run_locked()
511 if (!in_net_epoch && TASK_IS_NET(task)) { in taskqueue_run_locked()
514 } else if (in_net_epoch && !TASK_IS_NET(task)) { in taskqueue_run_locked()
518 task->ta_func(task->ta_context, pending); in taskqueue_run_locked()
521 wakeup(task); in taskqueue_run_locked()
543 taskqueue_poll_is_busy(struct taskqueue *queue, struct task *task) in taskqueue_poll_is_busy() argument
548 retval = task->ta_pending > 0 || task_get_busy(queue, task) != NULL; in taskqueue_poll_is_busy()
555 taskqueue_cancel_locked(struct taskqueue *queue, struct task *task, in taskqueue_cancel_locked() argument
561 if (task->ta_pending > 0) { in taskqueue_cancel_locked()
562 STAILQ_REMOVE(&queue->tq_queue, task, task, ta_link); in taskqueue_cancel_locked()
563 if (queue->tq_hint == task) in taskqueue_cancel_locked()
567 *pendp = task->ta_pending; in taskqueue_cancel_locked()
568 task->ta_pending = 0; in taskqueue_cancel_locked()
569 tb = task_get_busy(queue, task); in taskqueue_cancel_locked()
579 taskqueue_cancel(struct taskqueue *queue, struct task *task, u_int *pendp) in taskqueue_cancel() argument
584 error = taskqueue_cancel_locked(queue, task, pendp); in taskqueue_cancel()
612 taskqueue_drain(struct taskqueue *queue, struct task *task) in taskqueue_drain() argument
619 while (task->ta_pending != 0 || task_get_busy(queue, task) != NULL) in taskqueue_drain()
620 TQ_SLEEP(queue, task, "tq_drain"); in taskqueue_drain()