svn commit: r215544 - head/sys/kern
Jung-uk Kim
jkim at FreeBSD.org
Fri Nov 19 21:09:42 UTC 2010
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
-------------- next part --------------
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);
More information about the svn-src-all
mailing list