summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2004-02-19 22:03:52 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2004-02-19 22:03:52 +0000
commit712f57d8ab40f8aa1c3cfe81ae78a33d15ed73bc (patch)
treee5b31707f4b54ede4588ccf006d6b566539d6dcd
parentc09eddb36dfb3374023909cf3141f4253b450268 (diff)
Notes
-rw-r--r--sys/kern/subr_taskqueue.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/sys/kern/subr_taskqueue.c b/sys/kern/subr_taskqueue.c
index aeebd084cffd..953300ac8e75 100644
--- a/sys/kern/subr_taskqueue.c
+++ b/sys/kern/subr_taskqueue.c
@@ -235,28 +235,23 @@ taskqueue_swi_giant_run(void *dummy)
}
static void
-taskqueue_kthread(void *arg)
+taskqueue_thread_loop(void *arg)
{
- struct mtx kthread_mutex;
-
- bzero(&kthread_mutex, sizeof(kthread_mutex));
-
- mtx_init(&kthread_mutex, "taskqueue kthread", NULL, MTX_DEF);
-
- mtx_lock(&kthread_mutex);
-
for (;;) {
- mtx_unlock(&kthread_mutex);
+ mtx_lock(&taskqueue_thread->tq_mutex);
+ while (STAILQ_EMPTY(&taskqueue_thread->tq_queue))
+ msleep(taskqueue_thread, &taskqueue_thread->tq_mutex,
+ PWAIT, "-", 0);
+ mtx_unlock(&taskqueue_thread->tq_mutex);
taskqueue_run(taskqueue_thread);
- mtx_lock(&kthread_mutex);
- msleep(&taskqueue_thread, &kthread_mutex, PWAIT, "tqthr", 0);
}
}
static void
taskqueue_thread_enqueue(void *context)
{
- wakeup(&taskqueue_thread);
+ mtx_assert(&taskqueue_thread->tq_mutex, MA_OWNED);
+ wakeup(taskqueue_thread);
}
TASKQUEUE_DEFINE(swi, taskqueue_swi_enqueue, 0,
@@ -268,7 +263,7 @@ TASKQUEUE_DEFINE(swi_giant, taskqueue_swi_giant_enqueue, 0,
NULL, SWI_TQ_GIANT, 0, &taskqueue_giant_ih));
TASKQUEUE_DEFINE(thread, taskqueue_thread_enqueue, 0,
- kthread_create(taskqueue_kthread, NULL,
+ kthread_create(taskqueue_thread_loop, NULL,
&taskqueue_thread_proc, 0, 0, "taskqueue"));
int