From owner-cvs-all@FreeBSD.ORG Fri Mar 9 22:47:58 2007 Return-Path: X-Original-To: cvs-all@freebsd.org Delivered-To: cvs-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 42DBC16A417; Fri, 9 Mar 2007 22:47:58 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from server.baldwin.cx (66-23-211-162.clients.speedfactory.net [66.23.211.162]) by mx1.freebsd.org (Postfix) with ESMTP id BC57F13C4A3; Fri, 9 Mar 2007 22:47:57 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from zion.baldwin.cx (zion.baldwin.cx [192.168.0.7]) (authenticated bits=0) by server.baldwin.cx (8.13.8/8.13.8) with ESMTP id l29Mlt1Z039913; Fri, 9 Mar 2007 17:47:55 -0500 (EST) (envelope-from jhb@freebsd.org) From: John Baldwin To: src-committers@freebsd.org Date: Fri, 9 Mar 2007 17:47:06 -0500 User-Agent: KMail/1.9.4 References: <200703092241.l29Mf2Ds062856@repoman.freebsd.org> In-Reply-To: <200703092241.l29Mf2Ds062856@repoman.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200703091747.07617.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by milter-greylist-2.0.2 (server.baldwin.cx [192.168.0.1]); Fri, 09 Mar 2007 17:47:55 -0500 (EST) X-Virus-Scanned: ClamAV 0.88.3/2788/Fri Mar 9 13:27:23 2007 on server.baldwin.cx X-Virus-Status: Clean X-Spam-Status: No, score=-4.4 required=4.2 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.1.3 X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on server.baldwin.cx Cc: cvs-src@freebsd.org, cvs-all@freebsd.org Subject: Re: cvs commit: src/share/man/man9 Makefile condvar.9 lock.9 mi_switch.9 mtx_pool.9 mutex.9 rwlock.9 sleep.9 sleepqueue.9 sx.9 thread_exit.9 src/sys/kern kern_synch.c src/sys/sys mutex.h rwlock.h sleepqueue.h sx.h systm.h X-BeenThere: cvs-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: CVS commit messages for the entire tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Mar 2007 22:47:58 -0000 On Friday 09 March 2007 17:41, John Baldwin wrote: > jhb 2007-03-09 22:41:01 UTC > > FreeBSD src repository > > Modified files: > share/man/man9 Makefile condvar.9 lock.9 mi_switch.9 > mtx_pool.9 mutex.9 rwlock.9 sleep.9 > sleepqueue.9 sx.9 thread_exit.9 > sys/kern kern_synch.c > sys/sys mutex.h rwlock.h sleepqueue.h sx.h > systm.h > Log: > Allow threads to atomically release rw and sx locks while waiting for an > event. Locking primitives that support this (mtx, rw, and sx) now each > include their own foo_sleep() routine. > - Rename msleep() to _sleep() and change it's 'struct mtx' object to a > 'struct lock_object' pointer. _sleep() uses the recently added > lc_unlock() and lc_lock() function pointers for the lock class of the > specified lock to release the lock while the thread is suspended. > - Add wrappers around _sleep() for mutexes (mtx_sleep()), rw locks > (rw_sleep()), and sx locks (sx_sleep()). msleep() still exists and > is now identical to mtx_sleep(), but it is deprecated. > - Rename SLEEPQ_MSLEEP to SLEEPQ_SLEEP. > - Rewrite much of sleep.9 to not be msleep(9) centric. > - Flesh out the 'RETURN VALUES' section in sleep.9 and add an 'ERRORS' > section. > - Add __nonnull(1) to _sleep() and msleep_spin() so that the compiler will > warn if you try to pass a NULL wait channel. The functions already have > a KASSERT to that effect. I don't have a date set for removing msleep(), esp. given it's wide use. I would like to remove it and all the spl*() functions in 8.0 if we can swing it. I also have patches to let condition variables work with rwlocks and sx locks, but the current implementation results in an API "explosion" since each of the cv_*wait*() functions grows a cv_*wait*_rw() version for rwlocks and a cv_*waut*_sx() version for use with sx locks. One possibility would be to just cast the lock argument to (struct lock_object *) since all of our locks have a lock_object as the first member, but then you use having the compiler do type checking, and I'm really not willing to give up on that. Too easy to have evil bugs that way. I suppose we could use some evil macro that used typeof() but that would be very gcc specific? I guess one other possibility is to standardize on the field name for the lock_object, calling it lo_object instead of mtx_object, rw_object, sx_object, etc. Anyone else have any ideas? -- John Baldwin