From owner-svn-src-all@FreeBSD.ORG Fri Nov 19 21:09:42 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from [127.0.0.1] (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by hub.freebsd.org (Postfix) with ESMTP id 75EE01065672; Fri, 19 Nov 2010 21:09:42 +0000 (UTC) (envelope-from jkim@FreeBSD.org) From: Jung-uk Kim To: src-committers@FreeBSD.org Date: Fri, 19 Nov 2010 16:09:28 -0500 User-Agent: KMail/1.6.2 References: <201011191943.oAJJhv3i087205@svn.freebsd.org> In-Reply-To: <201011191943.oAJJhv3i087205@svn.freebsd.org> MIME-Version: 1.0 Content-Disposition: inline Content-Type: Multipart/Mixed; boundary="Boundary-00=_Leu5M/2XJcMyOAp" Message-Id: <201011191609.31308.jkim@FreeBSD.org> Cc: Attilio Rao , svn-src-head@freebsd.org, svn-src-all@freebsd.org Subject: Re: svn commit: r215544 - head/sys/kern 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, 19 Nov 2010 21:09:42 -0000 --Boundary-00=_Leu5M/2XJcMyOAp Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline On Friday 19 November 2010 02:43 pm, Attilio Rao wrote: > Author: attilio > Date: Fri Nov 19 19:43:56 2010 > New Revision: 215544 > URL: http://svn.freebsd.org/changeset/base/215544 > > Log: > Scan the list in reverse order for the shutdown handlers of > loaded modules. This way, when there is a dependency between two > modules, the handler of the latter probed runs first. > > This is a similar approach as the modules are unloaded in the > same linkerfile. > > Sponsored by: Sandvine Incorporated > Submitted by: Nima Misaghian > MFC after: 1 week Hmm... It is not directly related but I was thinking about doing similar things for sys/kern/subr_bus.c. What do you think about the attached patch? Jung-uk Kim --Boundary-00=_Leu5M/2XJcMyOAp Content-Type: text/plain; charset="iso-8859-1"; name="subr_bus.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="subr_bus.diff" Index: sys/kern/subr_bus.c =================================================================== --- sys/kern/subr_bus.c (revision 215542) +++ sys/kern/subr_bus.c (working copy) @@ -1847,7 +1847,7 @@ device_delete_child(device_t dev, device_t child) PDEBUG(("%s from %s", DEVICENAME(child), DEVICENAME(dev))); /* remove children first */ - while ( (grandchild = TAILQ_FIRST(&child->children)) ) { + while ( (grandchild = TAILQ_LAST(&child->children, device_list)) ) { error = device_delete_child(child, grandchild); if (error) return (error); @@ -3381,7 +3381,7 @@ bus_generic_detach(device_t dev) if (dev->state != DS_ATTACHED) return (EBUSY); - TAILQ_FOREACH(child, &dev->children, link) { + TAILQ_FOREACH_REVERSE(child, &dev->children, device_list, link) { if ((error = device_detach(child)) != 0) return (error); } @@ -3401,7 +3401,7 @@ bus_generic_shutdown(device_t dev) { device_t child; - TAILQ_FOREACH(child, &dev->children, link) { + TAILQ_FOREACH_REVERSE(child, &dev->children, device_list, link) { device_shutdown(child); } @@ -3423,7 +3423,7 @@ bus_generic_suspend(device_t dev) int error; device_t child, child2; - TAILQ_FOREACH(child, &dev->children, link) { + TAILQ_FOREACH_REVERSE(child, &dev->children, device_list, link) { error = DEVICE_SUSPEND(child); if (error) { for (child2 = TAILQ_FIRST(&dev->children); --Boundary-00=_Leu5M/2XJcMyOAp--