freebsd_network: Implement taskqueue_drain_all.

Required by FreeBSD 12's iprowifi4965.
This commit is contained in:
Augustin Cavalier
2019-01-08 20:52:06 -05:00
parent 24e7aa4217
commit 27632129b2
2 changed files with 23 additions and 0 deletions
@@ -32,6 +32,7 @@ void taskqueue_free(struct taskqueue *tq);
void taskqueue_drain(struct taskqueue *tq, struct task *task);
void taskqueue_drain_timeout(struct taskqueue *queue,
struct timeout_task *timeout_task);
void taskqueue_drain_all(struct taskqueue *tq);
void taskqueue_block(struct taskqueue *queue);
void taskqueue_unblock(struct taskqueue *queue);
int taskqueue_enqueue(struct taskqueue *tq, struct task *task);
@@ -293,6 +293,28 @@ taskqueue_drain_timeout(struct taskqueue *queue,
}
static void
taskqueue_task_nop_fn(void* context, int pending)
{
}
void
taskqueue_drain_all(struct taskqueue *taskQueue)
{
struct task t_barrier;
if (taskQueue == NULL) {
printf("taskqueue_drain_all called with NULL taskqueue\n");
return;
}
TASK_INIT(&t_barrier, USHRT_MAX, taskqueue_task_nop_fn, &t_barrier);
taskqueue_enqueue(taskQueue, &t_barrier);
taskqueue_drain(taskQueue, &t_barrier);
}
static void
taskqueue_enqueue_locked(struct taskqueue *taskQueue, struct task *task,
cpu_status status)