Lines Matching refs:task

51 	struct task	*tb_running;
56 STAILQ_HEAD(, task) tq_queue;
168 taskqueue_enqueue_locked(struct taskqueue *queue, struct task *task)
170 struct task *ins;
171 struct task *prev;
176 if (task->ta_pending) {
177 if (task->ta_pending < USHRT_MAX)
178 task->ta_pending++;
185 prev = STAILQ_LAST(&queue->tq_queue, task, ta_link);
186 if (!prev || prev->ta_priority >= task->ta_priority) {
187 STAILQ_INSERT_TAIL(&queue->tq_queue, task, ta_link);
192 if (ins->ta_priority < task->ta_priority)
196 STAILQ_INSERT_AFTER(&queue->tq_queue, prev, task, ta_link);
198 STAILQ_INSERT_HEAD(&queue->tq_queue, task, ta_link);
201 task->ta_pending = 1;
210 taskqueue_enqueue(struct taskqueue *queue, struct task *task)
215 res = taskqueue_enqueue_locked(queue, task);
302 struct task *task;
311 * Carefully remove the first task from the queue and
314 task = STAILQ_FIRST(&queue->tq_queue);
316 pending = task->ta_pending;
317 task->ta_pending = 0;
318 tb.tb_running = task;
321 task->ta_func(task->ta_context, pending);
325 wakeup(task);
342 task_is_running(struct taskqueue *queue, struct task *task)
348 if (tb->tb_running == task)
355 taskqueue_cancel_locked(struct taskqueue *queue, struct task *task,
359 if (task->ta_pending > 0)
360 STAILQ_REMOVE(&queue->tq_queue, task, task, ta_link);
362 *pendp = task->ta_pending;
363 task->ta_pending = 0;
364 return (task_is_running(queue, task) ? EBUSY : 0);
368 taskqueue_cancel(struct taskqueue *queue, struct task *task, u_int *pendp)
373 error = taskqueue_cancel_locked(queue, task, pendp);
401 taskqueue_drain(struct taskqueue *queue, struct task *task)
408 while (task->ta_pending != 0 || task_is_running(queue, task))
409 TQ_SLEEP(queue, task, &queue->tq_mutex, PWAIT, "-", 0);
416 struct task *task;
422 task = STAILQ_LAST(&queue->tq_queue, task, ta_link);
423 if (task != NULL)
424 while (task->ta_pending != 0)
425 TQ_SLEEP(queue, task, &queue->tq_mutex, PWAIT, "-", 0);
561 swi_add(NULL, "task queue", taskqueue_swi_run, NULL, SWI_TQ,
580 taskqueue_enqueue_fast(struct taskqueue *queue, struct task *task)
582 return taskqueue_enqueue(queue, task);