From owner-freebsd-hackers@FreeBSD.ORG Mon Dec 15 05:42:57 2008 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DA4B3106564A for ; Mon, 15 Dec 2008 05:42:57 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from tarsier.delphij.net (delphij-pt.tunnel.tserv2.fmt.ipv6.he.net [IPv6:2001:470:1f03:2c9::2]) by mx1.freebsd.org (Postfix) with ESMTP id 82D208FC2D for ; Mon, 15 Dec 2008 05:42:57 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from tarsier.geekcn.org (tarsier.geekcn.org [211.166.10.233]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by tarsier.delphij.net (Postfix) with ESMTPS id 9171528448 for ; Mon, 15 Dec 2008 13:42:56 +0800 (CST) Received: from localhost (tarsier.geekcn.org [211.166.10.233]) by tarsier.geekcn.org (Postfix) with ESMTP id EF180EC4FA3; Mon, 15 Dec 2008 13:42:55 +0800 (CST) X-Virus-Scanned: amavisd-new at geekcn.org Received: from tarsier.geekcn.org ([211.166.10.233]) by localhost (mail.geekcn.org [211.166.10.233]) (amavisd-new, port 10024) with ESMTP id dB+9+ErY+Nqm; Mon, 15 Dec 2008 13:42:50 +0800 (CST) Received: from charlie.delphij.net (c-67-180-38-12.hsd1.ca.comcast.net [67.180.38.12]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by tarsier.geekcn.org (Postfix) with ESMTPSA id E2A00EC4821; Mon, 15 Dec 2008 13:42:48 +0800 (CST) Message-ID: <4945EE55.2050401@delphij.net> Date: Sun, 14 Dec 2008 21:42:45 -0800 From: Xin LI Organization: The FreeBSD Project User-Agent: Thunderbird 2.0.0.18 (X11/20081125) MIME-Version: 1.0 To: Ravi Murty References: <95b10a340812142103u3ab8bd2br97033a7c7e8bec3@mail.gmail.com> In-Reply-To: <95b10a340812142103u3ab8bd2br97033a7c7e8bec3@mail.gmail.com> X-Enigmail-Version: 0.95.7 OpenPGP: id=18EDEBA0; url=http://www.delphij.net/delphij.asc Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: freebsd-hackers@freebsd.org Subject: Re: td_critnest X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: d@delphij.net List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Dec 2008 05:42:57 -0000 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Ravi Murty wrote: > Hello All, > > The implementation of critical_enter and critical_exit changed between > freebsd 5 and freebsd 6. In the newer implemtnation, the code checks if > td_critnest is 1 and if it is sets it to zero, then checks if the thread > owes a preempt. If so, it increments td_critnest by 1 before grabbing a lock > and then decrements it back to zero. I can't figure out why it does this. > The freebsd 5 implementation seems straightforward where we check if the > thread owes a preempt and if so we switch to the new thread. Can anyone help > me with this? My guess is to prevent race conditions (i.e. to split the owepreempt flag into a separate variable), since this value could be changed in an interrupt context, and not only during the current thread context. Cheers, - -- Xin LI http://www.delphij.net/ FreeBSD - The Power to Serve! -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (FreeBSD) iEYEARECAAYFAklF7lUACgkQi+vbBBjt66C0sQCeOZCFZu4VBTRk3it4/424pAbc LRoAoLfdoS09ZX2SSZ1Z/SOw+rqkrkQ0 =P2Ez -----END PGP SIGNATURE-----