Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Nov 2010 16:09:28 -0500
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        src-committers@FreeBSD.org
Cc:        Attilio Rao <attilio@freebsd.org>, svn-src-head@freebsd.org, svn-src-all@freebsd.org
Subject:   Re: svn commit: r215544 - head/sys/kern
Message-ID:  <201011191609.31308.jkim@FreeBSD.org>
In-Reply-To: <201011191943.oAJJhv3i087205@svn.freebsd.org>
References:  <201011191943.oAJJhv3i087205@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--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 <nmisaghian at sandvine dot com>
>   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--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201011191609.31308.jkim>