From owner-svn-src-user@FreeBSD.ORG Fri Nov 5 07:04:32 2010 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8A240106566B; Fri, 5 Nov 2010 07:04:32 +0000 (UTC) (envelope-from davidxu@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5DD438FC12; Fri, 5 Nov 2010 07:04:32 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oA574W37087866; Fri, 5 Nov 2010 07:04:32 GMT (envelope-from davidxu@svn.freebsd.org) Received: (from davidxu@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oA574WE6087863; Fri, 5 Nov 2010 07:04:32 GMT (envelope-from davidxu@svn.freebsd.org) Message-Id: <201011050704.oA574WE6087863@svn.freebsd.org> From: David Xu Date: Fri, 5 Nov 2010 07:04:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r214827 - user/davidxu/libthr/lib/libthr/thread X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Nov 2010 07:04:32 -0000 Author: davidxu Date: Fri Nov 5 07:04:32 2010 New Revision: 214827 URL: http://svn.freebsd.org/changeset/base/214827 Log: Account priority mutex we have locked, in cv_wait we use kernel based cv if the thread helds priority mutex. Modified: user/davidxu/libthr/lib/libthr/thread/thr_mutex.c user/davidxu/libthr/lib/libthr/thread/thr_private.h Modified: user/davidxu/libthr/lib/libthr/thread/thr_mutex.c ============================================================================== --- user/davidxu/libthr/lib/libthr/thread/thr_mutex.c Fri Nov 5 07:03:35 2010 (r214826) +++ user/davidxu/libthr/lib/libthr/thread/thr_mutex.c Fri Nov 5 07:04:32 2010 (r214827) @@ -865,6 +865,11 @@ enqueue_mutex(struct pthread *curthread, TAILQ_INSERT_TAIL(&curthread->pi_mutexq, ml, qe); } } + if ((m->m_lock.m_flags & + (UMUTEX_PRIO_PROTECT|UMUTEX_PRIO_PROTECT)) != 0) { + curthread->priority_mutex_count++; + _thread_printf(2, "priority mutex ++\n"); + } } static void @@ -881,7 +886,7 @@ dequeue_mutex(struct pthread *curthread, TAILQ_REMOVE(&curthread->pp_mutexq, ml, qe); set_inherited_priority(curthread, m); _thr_mutex_link_free(ml); - break; + goto out; } } } else if ((m->m_lock.m_flags & (UMUTEX_PRIO_INHERIT | @@ -890,8 +895,16 @@ dequeue_mutex(struct pthread *curthread, if (ml->mutexp == m) { TAILQ_REMOVE(&curthread->pi_mutexq, ml, qe); _thr_mutex_link_free(ml); - break; + goto out; } } } + return; + +out: + if ((m->m_lock.m_flags & + (UMUTEX_PRIO_PROTECT|UMUTEX_PRIO_PROTECT)) != 0) { + _thread_printf(2, "priority mutex --\n"); + curthread->priority_mutex_count--; + } } Modified: user/davidxu/libthr/lib/libthr/thread/thr_private.h ============================================================================== --- user/davidxu/libthr/lib/libthr/thread/thr_private.h Fri Nov 5 07:03:35 2010 (r214826) +++ user/davidxu/libthr/lib/libthr/thread/thr_private.h Fri Nov 5 07:04:32 2010 (r214827) @@ -440,7 +440,7 @@ struct pthread { #define TLFLAGS_IN_TDLIST 0x0002 /* thread in all thread list */ #define TLFLAGS_IN_GCLIST 0x0004 /* thread in gc list */ - /* Queue of currently owned NORMAL or PRIO_INHERIT type mutexes. */ + /* Queue of currently owned PRIO_INHERIT type mutexes. */ struct mutex_link_list pi_mutexq; /* Queue of all owned PRIO_PROTECT mutexes. */ @@ -453,6 +453,9 @@ struct pthread { struct pthread_specific_elem *specific; int specific_data_count; + /* Number of priority mutex held. */ + int priority_mutex_count; + /* Number rwlocks rdlocks held. */ int rdlock_count;