PERFORCE change 44039 for review

John Baldwin jhb at FreeBSD.org
Wed Dec 17 13:42:34 PST 2003


http://perforce.freebsd.org/chv.cgi?CH=44039

Change 44039 by jhb at jhb_laptop on 2003/12/17 13:41:47

	Path I've had on my laptop for a while.

Affected files ...

.. //depot/projects/smpng/sys/kern/subr_taskqueue.c#15 edit

Differences ...

==== //depot/projects/smpng/sys/kern/subr_taskqueue.c#15 (text+ko) ====

@@ -121,12 +121,11 @@
 
 	mtx_lock(&taskqueue_queues_mutex);
 	STAILQ_FOREACH(queue, &taskqueue_queues, tq_link) {
-		mtx_lock(&queue->tq_mutex);
 		if (strcmp(queue->tq_name, name) == 0) {
+			mtx_lock(&queue->tq_mutex);
 			mtx_unlock(&taskqueue_queues_mutex);
 			return queue;
 		}
-		mtx_unlock(&queue->tq_mutex);
 	}
 	mtx_unlock(&taskqueue_queues_mutex);
 	return NULL;
@@ -235,28 +234,23 @@
 }
 
 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 +262,7 @@
 		     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


More information about the p4-projects mailing list