From owner-svn-src-user@FreeBSD.ORG Mon Nov 8 02:47:29 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 75703106566C; Mon, 8 Nov 2010 02:47:29 +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 638708FC0A; Mon, 8 Nov 2010 02:47:29 +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 oA82lTCx004304; Mon, 8 Nov 2010 02:47:29 GMT (envelope-from davidxu@svn.freebsd.org) Received: (from davidxu@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oA82lTlv004301; Mon, 8 Nov 2010 02:47:29 GMT (envelope-from davidxu@svn.freebsd.org) Message-Id: <201011080247.oA82lTlv004301@svn.freebsd.org> From: David Xu Date: Mon, 8 Nov 2010 02:47:29 +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: r214970 - 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: Mon, 08 Nov 2010 02:47:29 -0000 Author: davidxu Date: Mon Nov 8 02:47:29 2010 New Revision: 214970 URL: http://svn.freebsd.org/changeset/base/214970 Log: Make the size of mutex smaller. Merge m_private and m_type into single field m_mtxflags. Change type of m_spinloop and m_yield to short integer, it is enough for practical use. 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 Mon Nov 8 02:19:53 2010 (r214969) +++ user/davidxu/libthr/lib/libthr/thread/thr_mutex.c Mon Nov 8 02:47:29 2010 (r214970) @@ -140,7 +140,7 @@ mutex_init(pthread_mutex_t *mutex, calloc_cb(1, sizeof(struct pthread_mutex))) == NULL) return (ENOMEM); - pmutex->m_type = attr->m_type; + pmutex->m_mtxflags = attr->m_type; pmutex->m_ownertd = NULL; pmutex->m_recurse = 0; pmutex->m_spinloops = 0; @@ -167,7 +167,7 @@ mutex_init(pthread_mutex_t *mutex, pmutex->m_lock.m_flags |= USYNC_PROCESS_SHARED; if (attr->m_robust != 0) pmutex->m_lock.m_flags |= UMUTEX_ROBUST; - if (pmutex->m_type == PTHREAD_MUTEX_ADAPTIVE_NP) { + if (PMUTEX_TYPE(pmutex->m_mtxflags) == PTHREAD_MUTEX_ADAPTIVE_NP) { pmutex->m_spinloops = _thr_spinloops ? _thr_spinloops: MUTEX_ADAPTIVE_SPINS; pmutex->m_yieldloops = _thr_yieldloops; @@ -217,7 +217,7 @@ _pthread_mutex_init_calloc_cb(pthread_mu ret = mutex_init(mutex, &attr, calloc_cb); if (ret == 0) - (*mutex)->m_private = 1; + (*mutex)->m_mtxflags |= PMUTEX_FLAG_PRIVATE; return (ret); } @@ -322,7 +322,7 @@ __pthread_mutex_trylock(pthread_mutex_t CHECK_AND_INIT_MUTEX - if (!m->m_private) + if (!(m->m_mtxflags & PMUTEX_FLAG_PRIVATE)) return mutex_trylock_common(m); THR_CRITICAL_ENTER(curthread); error = mutex_trylock_common(m); @@ -461,9 +461,9 @@ mutex_lock_common(struct pthread_mutex * struct pthread *curthread = _get_curthread(); int error; - if (cvattach || m->m_private == 0) + if (cvattach || (m->m_mtxflags & PMUTEX_FLAG_PRIVATE) == 0) return _mutex_lock_common(m, abstime); - if (m->m_private) + if (m->m_mtxflags & PMUTEX_FLAG_PRIVATE) THR_CRITICAL_ENTER(curthread); error = _mutex_lock_common(m, abstime); if (error && error != EOWNERDEAD) @@ -506,7 +506,7 @@ mutex_self_trylock(struct pthread_mutex { int ret; - switch (m->m_type) { + switch (PMUTEX_TYPE(m->m_mtxflags)) { case PTHREAD_MUTEX_ERRORCHECK: case PTHREAD_MUTEX_NORMAL: ret = EBUSY; @@ -535,7 +535,7 @@ mutex_self_lock(struct pthread_mutex *m, struct timespec ts1, ts2; int ret; - switch (m->m_type) { + switch (PMUTEX_TYPE(m->m_mtxflags)) { case PTHREAD_MUTEX_ERRORCHECK: case PTHREAD_MUTEX_ADAPTIVE_NP: if (abstime) { @@ -633,10 +633,10 @@ _mutex_unlock_common(pthread_mutex_t *mu m = *mutex; if (__predict_false( - m->m_type == PTHREAD_MUTEX_RECURSIVE && + PMUTEX_TYPE(m->m_mtxflags) == PTHREAD_MUTEX_RECURSIVE && m->m_recurse > 0)) { m->m_recurse--; - if (m->m_private) + if (m->m_mtxflags & PMUTEX_FLAG_PRIVATE) THR_CRITICAL_LEAVE(curthread); return (0); } @@ -664,7 +664,7 @@ _mutex_unlock_common(pthread_mutex_t *mu } __thr_umutex_unlock(&m->m_lock, id); out: - if (m->m_private) + if (m->m_mtxflags & PMUTEX_FLAG_PRIVATE) THR_CRITICAL_LEAVE(curthread); return (0); } Modified: user/davidxu/libthr/lib/libthr/thread/thr_private.h ============================================================================== --- user/davidxu/libthr/lib/libthr/thread/thr_private.h Mon Nov 8 02:19:53 2010 (r214969) +++ user/davidxu/libthr/lib/libthr/thread/thr_private.h Mon Nov 8 02:47:29 2010 (r214970) @@ -140,14 +140,17 @@ TAILQ_HEAD(mutex_link_list, mutex_link); #define THR_RWLOCK_INITIALIZER ((struct pthread_rwlock *)NULL) #define THR_RWLOCK_DESTROYED ((struct pthread_rwlock *)1) +#define PMUTEX_FLAG_TYPE_MASK 0x0ff +#define PMUTEX_FLAG_PRIVATE 0x100 +#define PMUTEX_TYPE(mtxflags) ((mtxflags) & PMUTEX_FLAG_TYPE_MASK) + struct pthread_mutex { struct umutex m_lock; - enum pthread_mutextype m_type; struct pthread *m_ownertd; int m_recurse; - int m_spinloops; - int m_yieldloops; - int m_private; + int m_mtxflags; + uint16_t m_spinloops; + uint16_t m_yieldloops; }; struct pthread_mutex_attr {