From owner-freebsd-current@FreeBSD.ORG Fri Sep 10 19:32:12 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id F221A16A4CE; Fri, 10 Sep 2004 19:32:11 +0000 (GMT) Received: from duke.cs.duke.edu (duke.cs.duke.edu [152.3.140.1]) by mx1.FreeBSD.org (Postfix) with ESMTP id 631F443D45; Fri, 10 Sep 2004 19:32:11 +0000 (GMT) (envelope-from gallatin@cs.duke.edu) Received: from grasshopper.cs.duke.edu (grasshopper.cs.duke.edu [152.3.145.30]) by duke.cs.duke.edu (8.12.10/8.12.10) with ESMTP id i8AJWAJt018557 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 10 Sep 2004 15:32:10 -0400 (EDT) Received: (from gallatin@localhost) by grasshopper.cs.duke.edu (8.12.9p2/8.12.9/Submit) id i8AJW5Jh060255; Fri, 10 Sep 2004 15:32:05 -0400 (EDT) (envelope-from gallatin) From: Andrew Gallatin MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16706.309.398789.905433@grasshopper.cs.duke.edu> Date: Fri, 10 Sep 2004 15:32:05 -0400 (EDT) To: John Baldwin In-Reply-To: <200409101450.47478.jhb@FreeBSD.org> References: <16705.57806.550902.483858@grasshopper.cs.duke.edu> <20040910172515.GU72089@funkthat.com> <16705.61418.553065.584034@grasshopper.cs.duke.edu> <200409101450.47478.jhb@FreeBSD.org> X-Mailer: VM 6.75 under 21.1 (patch 12) "Channel Islands" XEmacs Lucid cc: John-Mark Gurney cc: freebsd-current@FreeBSD.org Subject: Re: witness oddity X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Sep 2004 19:32:12 -0000 John Baldwin writes: > On Friday 10 September 2004 02:18 pm, Andrew Gallatin wrote: > > John-Mark Gurney writes: > > > Andrew Gallatin wrote this message on Fri, Sep 10, 2004 at 13:18 -0400: > > > > If I call copyout() holding one of my mutexes, it will always complain > > > > about a LOR, even if the mutex is freshly initiated: > > > > > > Calling copyout while holding a mutex is not allowed... If the page > > > isn't in memory, it could take many seconds for the page to be swapped > > > back in during which time your mutex will continue to be held. > > > > Thanks.. but that's not really what I asked. > > > > I want to know how witness detects a particular just-created mutex as > > being in a deadlock with the vm map lock. > > > > Again, is it because the vm lock is an sx lock? Is there an implicit > > rule that you can't take an sx lock while holding a mutex (just like > > you can't take Giant, or sleep?) > > Yes. An sx lock is allowed to be held across a sleep, so if you block on an > sx lock, the owner of the lock you are waiting on might be asleep. If that Do you agree that the message that Witness emits ("lock order reversal") for this problem is, while technically accurate, is at least a little confusing? Before I thought to try the mtx_init()/mtx_lock/()/copyout() trick, I spent quite a while scanning my code, looking for some way the VM system could call into it and acquire that lock. There aren't any. Does witness know at the time that it emits the warning that its a "class" type of reversal, rather than a reversal based on previous observations? If so, would it be possible to emit a warning saying something like "Holding a sleep mutex while acquiring an sx lock is probited by law" (maybe add " violators will be shot" for grins ;) Thanks, Drew