From owner-p4-projects@FreeBSD.ORG Wed Jun 28 00:44:47 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9F6CB16A416; Wed, 28 Jun 2006 00:44:47 +0000 (UTC) X-Original-To: perforce@freebsd.org 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 47D8916A408 for ; Wed, 28 Jun 2006 00:44:47 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 478DC43D86 for ; Wed, 28 Jun 2006 00:44:41 +0000 (GMT) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k5S0ifpM019859 for ; Wed, 28 Jun 2006 00:44:41 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k5S0iea1019856 for perforce@freebsd.org; Wed, 28 Jun 2006 00:44:40 GMT (envelope-from kmacy@freebsd.org) Date: Wed, 28 Jun 2006 00:44:40 GMT Message-Id: <200606280044.k5S0iea1019856@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to kmacy@freebsd.org using -f From: Kip Macy To: Perforce Change Reviews Cc: Subject: PERFORCE change 100179 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 28 Jun 2006 00:44:47 -0000 http://perforce.freebsd.org/chv.cgi?CH=100179 Change 100179 by kmacy@kmacy_storage:sun4v_work_sleepq on 2006/06/28 00:44:36 my token of defiance against the most foul, kludgeish artifact in the entire kernel, the lockmgr - remove the LK_INTERNAL flag as the serialization provided by the interlock is not meaningful for those already holding the lock Affected files ... .. //depot/projects/kmacy_sun4v/src/sys/kern/kern_lock.c#4 edit .. //depot/projects/kmacy_sun4v/src/sys/sys/buf.h#4 edit .. //depot/projects/kmacy_sun4v/src/sys/sys/lockmgr.h#4 edit Differences ... ==== //depot/projects/kmacy_sun4v/src/sys/kern/kern_lock.c#4 (text+ko) ==== @@ -174,11 +174,6 @@ } #endif - if (flags & LK_INTERLOCK) { - mtx_assert(interlkp, MA_OWNED | MA_NOTRECURSED); - mtx_unlock(interlkp); - } - if ((flags & (LK_NOWAIT|LK_RELEASE)) == 0) WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, &lkp->lk_interlock->mtx_object, @@ -468,33 +463,6 @@ return 0; } -/* - * Transfer any waiting processes from one lock to another. - */ -void -transferlockers(from, to) - struct lock *from; - struct lock *to; -{ - - KASSERT(from != to, ("lock transfer to self")); - KASSERT((from->lk_flags&LK_WAITDRAIN) == 0, ("transfer draining lock")); - - mtx_lock(from->lk_interlock); - if (from->lk_waitcount == 0) { - mtx_unlock(from->lk_interlock); - return; - } - from->lk_newlock = to; - wakeup((void *)from); - msleep(&from->lk_newlock, from->lk_interlock, from->lk_prio, - "lkxfer", 0); - from->lk_newlock = NULL; - from->lk_flags &= ~(LK_WANT_EXCL | LK_WANT_UPGRADE); - KASSERT(from->lk_waitcount == 0, ("active lock")); - mtx_unlock(from->lk_interlock); -} - /* * Initialize a lock; required before use. ==== //depot/projects/kmacy_sun4v/src/sys/sys/buf.h#4 (text+ko) ==== @@ -273,8 +273,10 @@ int s, ret; s = splbio(); - mtx_lock(bp->b_lock.lk_interlock); - locktype |= LK_INTERNAL; + /* XXX having the mutex didn't really remove the race for wmesg change + * as there may still be other sleeping on the lock even when the interlock + * mutex is held + */ bp->b_lock.lk_wmesg = buf_wmesg; bp->b_lock.lk_prio = PRIBIO + 4; ret = lockmgr(&(bp)->b_lock, locktype, interlock, curthread); @@ -293,8 +295,11 @@ int s, ret; s = splbio(); - mtx_lock(bp->b_lock.lk_interlock); - locktype |= LK_INTERNAL | LK_TIMELOCK; + /* XXX having the mutex didn't really remove the race for wmesg change + * as there may still be other sleeping on the lock even when the interlock + * mutex is held + */ + locktype |= LK_TIMELOCK; bp->b_lock.lk_wmesg = wmesg; bp->b_lock.lk_prio = (PRIBIO + 4) | catch; bp->b_lock.lk_timo = timo; ==== //depot/projects/kmacy_sun4v/src/sys/sys/lockmgr.h#4 (text+ko) ==== @@ -141,7 +141,7 @@ #define LK_HAVE_EXCL 0x00040000 /* exclusive lock obtained */ #define LK_WAITDRAIN 0x00080000 /* process waiting for lock to drain */ #define LK_DRAINING 0x00100000 /* lock is being drained */ -#define LK_INTERNAL 0x00200000/* The internal lock is already held */ +/*#define LK_INTERNAL 0x00200000 The internal lock is already held */ /* * Internal state flags corresponding to lk_sharecount, and lk_waitcount */