From owner-p4-projects@FreeBSD.ORG Fri Jan 16 11:10:30 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id A275E16A4D0; Fri, 16 Jan 2004 11:10:30 -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 797C516A4CE for ; Fri, 16 Jan 2004 11:10:30 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7BBC943D4C for ; Fri, 16 Jan 2004 11:10:28 -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 i0GJAS0B012418 for ; Fri, 16 Jan 2004 11:10:28 -0800 (PST) (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.10/8.12.10/Submit) id i0GJAS9E012411 for perforce@freebsd.org; Fri, 16 Jan 2004 11:10:28 -0800 (PST) (envelope-from jhb@freebsd.org) Date: Fri, 16 Jan 2004 11:10:28 -0800 (PST) Message-Id: <200401161910.i0GJAS9E012411@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 45452 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: Fri, 16 Jan 2004 19:10:31 -0000 http://perforce.freebsd.org/chv.cgi?CH=45452 Change 45452 by jhb@jhb_slimer on 2004/01/16 11:09:55 Use a cv rather than a semaphore. Less lock operations that way. Affected files ... .. //depot/projects/smpng/sys/kern/kern_ktrace.c#36 edit Differences ... ==== //depot/projects/smpng/sys/kern/kern_ktrace.c#36 (text+ko) ==== @@ -54,7 +54,6 @@ #include #include #include -#include #include #include #include @@ -108,7 +107,7 @@ static int print_message = 1; struct mtx ktrace_mtx; -static struct sema ktrace_sema; +static struct cv ktrace_cv; static void ktrace_init(void *dummy); static int sysctl_kern_ktrace_request_pool(SYSCTL_HANDLER_ARGS); @@ -129,7 +128,7 @@ int i; mtx_init(&ktrace_mtx, "ktrace", NULL, MTX_DEF | MTX_QUIET); - sema_init(&ktrace_sema, 0, "ktrace"); + cv_init(&ktrace_cv, "ktrace"); STAILQ_INIT(&ktr_todo); STAILQ_INIT(&ktr_free); for (i = 0; i < ktr_requestpool; i++) { @@ -263,8 +262,8 @@ mtx_lock(&ktrace_mtx); STAILQ_INSERT_TAIL(&ktr_todo, req, ktr_list); + cv_signal(&ktrace_cv); mtx_unlock(&ktrace_mtx); - sema_post(&ktrace_sema); curthread->td_pflags &= ~TDP_INKTRACE; } @@ -296,8 +295,9 @@ td = curthread; cred = td->td_ucred; for (;;) { - sema_wait(&ktrace_sema); mtx_lock(&ktrace_mtx); + while (STAILQ_EMPTY(&ktr_todo)) + cv_wait(&ktrace_cv, &ktrace_mtx); req = STAILQ_FIRST(&ktr_todo); STAILQ_REMOVE_HEAD(&ktr_todo, ktr_list); KASSERT(req != NULL, ("got a NULL request"));