From owner-p4-projects@FreeBSD.ORG Wed Dec 17 13:42:34 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 13CCD16A4D0; Wed, 17 Dec 2003 13:42:34 -0800 (PST) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C73D316A4CE for ; Wed, 17 Dec 2003 13:42:33 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 584C843D45 for ; Wed, 17 Dec 2003 13:42:20 -0800 (PST) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.10/8.12.10) with ESMTP id hBHLgJ0B027474 for ; Wed, 17 Dec 2003 13:42:20 -0800 (PST) (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.10/8.12.10/Submit) id hBHLgJko027465 for perforce@freebsd.org; Wed, 17 Dec 2003 13:42:19 -0800 (PST) (envelope-from jhb@freebsd.org) Date: Wed, 17 Dec 2003 13:42:19 -0800 (PST) Message-Id: <200312172142.hBHLgJko027465@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Subject: PERFORCE change 44039 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Dec 2003 21:42:34 -0000 http://perforce.freebsd.org/chv.cgi?CH=44039 Change 44039 by jhb@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