From owner-svn-src-all@FreeBSD.ORG Fri May 8 18:50:08 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2F9BF1065674; Fri, 8 May 2009 18:50:08 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from cyrus.watson.org (cyrus.watson.org [65.122.17.42]) by mx1.freebsd.org (Postfix) with ESMTP id F3B908FC28; Fri, 8 May 2009 18:50:07 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from bigwig.baldwin.cx (66.111.2.69.static.nyinternet.net [66.111.2.69]) by cyrus.watson.org (Postfix) with ESMTPSA id 900C246B82; Fri, 8 May 2009 14:50:07 -0400 (EDT) Received: from John-Baldwins-Macbook-Pro.local (localhost [127.0.0.1]) by bigwig.baldwin.cx (Postfix) with ESMTPA id 8FE938A022; Fri, 8 May 2009 14:50:05 -0400 (EDT) Message-ID: <4A047EE4.4080007@FreeBSD.org> Date: Fri, 08 May 2009 14:50:12 -0400 From: John Baldwin User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Andrew Thompson References: <200905081344.n48DiYJI092605@svn.freebsd.org> <4A046EB0.9060009@FreeBSD.org> <20090508174914.GC93351@citylink.fud.org.nz> In-Reply-To: <20090508174914.GC93351@citylink.fud.org.nz> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.0.1 (bigwig.baldwin.cx); Fri, 08 May 2009 14:50:05 -0400 (EDT) X-Virus-Scanned: clamav-milter 0.95 at bigwig.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.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on bigwig.baldwin.cx Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r191912 - in head/sys/dev: ipw iwi X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 May 2009 18:50:08 -0000 Andrew Thompson wrote: > On Fri, May 08, 2009 at 01:41:04PM -0400, John Baldwin wrote: >> Andrew Thompson wrote: >>> Author: thompsa >>> Date: Fri May 8 13:44:33 2009 >>> New Revision: 191912 >>> URL: http://svn.freebsd.org/changeset/base/191912 >>> >>> Log: >>> Drain the tasks before the interface stop call in case a restart was queued. >> Actually, you have to drain it after if_detach() so you can safely destroy >> the lock. The proper order should be something like this: >> >> bpfdetach(ifp); >> ieee80211_ifdetach(ic); >> >> ipw_stop(sc); >> >> callout_drain(); >> ieee80211_draintask(); >> >> ipw_release(sc); >> >> This is the order other NIC drivers use where they do something like: >> >> ether_ifdetach(ifp); >> FOO_LOCK(sc); >> foo_stop(sc); // calls callout_stop() >> FOO_UNLOCK(sc); >> >> callout_drain(); >> taskqueue_drain(); // only if it uses tasks >> >> if_free(); >> mtx_destroy(); > > ieee80211_ifdetach() will actually free the taskqueue, it doesnt use one > of the persistent system ones. It wasnt incorrect before as the > interface would still be brought down before net80211 detached, it was > just to reduce the flip flopping. With that noted does it still need > reordering? Assuming that free'ing a taskqueue drains any tasks, then you don't actually need to drain the task queue in that case. However, you should still move the foo_stop() after if_detach() as userland ioctl requests are still able to call your driver's ioctl() routine until if_detach() returns. So perhaps something like this: bpfdetach() ieee80211_ifdetach() ipw_stop(); callout_drain(); ipw_release(); In general, it isn't really safe to shutdown the hardware (foo_stop()) until you have detached the driver from external code paths (ifnet, bpf, etc.). -- John Baldwin