Lines Matching refs:task

51 	STAILQ_HEAD(, task)	tq_queue;
57 struct task *tq_running;
191 taskqueue_enqueue_locked(struct taskqueue *queue, struct task *task) in taskqueue_enqueue_locked() argument
193 struct task *ins; in taskqueue_enqueue_locked()
194 struct task *prev; in taskqueue_enqueue_locked()
205 if (task->ta_pending) { in taskqueue_enqueue_locked()
206 KKASSERT(queue == task->ta_queue); in taskqueue_enqueue_locked()
207 task->ta_pending++; in taskqueue_enqueue_locked()
210 task->ta_queue = queue; in taskqueue_enqueue_locked()
215 prev = STAILQ_LAST(&queue->tq_queue, task, ta_link); in taskqueue_enqueue_locked()
216 if (!prev || prev->ta_priority >= task->ta_priority) { in taskqueue_enqueue_locked()
217 STAILQ_INSERT_TAIL(&queue->tq_queue, task, ta_link); in taskqueue_enqueue_locked()
222 if (ins->ta_priority < task->ta_priority) in taskqueue_enqueue_locked()
226 STAILQ_INSERT_AFTER(&queue->tq_queue, prev, task, ta_link); in taskqueue_enqueue_locked()
228 STAILQ_INSERT_HEAD(&queue->tq_queue, task, ta_link); in taskqueue_enqueue_locked()
231 task->ta_pending = 1; in taskqueue_enqueue_locked()
247 taskqueue_enqueue(struct taskqueue *queue, struct task *task) in taskqueue_enqueue() argument
252 res = taskqueue_enqueue_locked(queue, task); in taskqueue_enqueue()
265 struct task *task) in taskqueue_enqueue_optq() argument
275 qtmp = task->ta_queue; in taskqueue_enqueue_optq()
280 if (task->ta_queue == NULL) in taskqueue_enqueue_optq()
281 task->ta_queue = queue; in taskqueue_enqueue_optq()
285 if (task->ta_queue == qtmp) { in taskqueue_enqueue_optq()
298 if (task->ta_pending) { in taskqueue_enqueue_optq()
299 task->ta_pending++; in taskqueue_enqueue_optq()
305 task->ta_queue = queue; in taskqueue_enqueue_optq()
317 res = taskqueue_enqueue_locked(queue, task); in taskqueue_enqueue_optq()
393 struct task *task; in taskqueue_run() local
403 task = STAILQ_FIRST(&queue->tq_queue); in taskqueue_run()
405 pending = task->ta_pending; in taskqueue_run()
406 task->ta_pending = 0; in taskqueue_run()
407 queue->tq_running = task; in taskqueue_run()
410 task->ta_func(task->ta_context, pending); in taskqueue_run()
412 wakeup(task); in taskqueue_run()
420 taskqueue_cancel_locked(struct taskqueue *queue, struct task *task, in taskqueue_cancel_locked() argument
424 if (task->ta_pending > 0) in taskqueue_cancel_locked()
425 STAILQ_REMOVE(&queue->tq_queue, task, task, ta_link); in taskqueue_cancel_locked()
427 *pendp = task->ta_pending; in taskqueue_cancel_locked()
428 task->ta_pending = 0; in taskqueue_cancel_locked()
429 return (task == queue->tq_running ? EBUSY : 0); in taskqueue_cancel_locked()
433 taskqueue_cancel(struct taskqueue *queue, struct task *task, u_int *pendp) in taskqueue_cancel() argument
438 error = taskqueue_cancel_locked(queue, task, pendp); in taskqueue_cancel()
445 taskqueue_cancel_simple(struct task *task) in taskqueue_cancel_simple() argument
451 queue = task->ta_queue; in taskqueue_cancel_simple()
458 if (queue == task->ta_queue) { in taskqueue_cancel_simple()
459 error = taskqueue_cancel_locked(queue, task, NULL); in taskqueue_cancel_simple()
490 taskqueue_drain(struct taskqueue *queue, struct task *task) in taskqueue_drain() argument
493 while (task->ta_pending != 0 || task == queue->tq_running) in taskqueue_drain()
494 TQ_SLEEP(queue, task, "-"); in taskqueue_drain()
502 taskqueue_drain_simple(struct task *task) in taskqueue_drain_simple() argument
507 queue = task->ta_queue; in taskqueue_drain_simple()
512 if (task->ta_pending == 0 && task != queue->tq_running) { in taskqueue_drain_simple()
516 TQ_SLEEP(queue, task, "-"); in taskqueue_drain_simple()