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

next in thread | previous in thread | raw e-mail | index | archive | help
On Friday, November 19, 2010 4:09:28 pm Jung-uk Kim wrote:
> 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?

Hmm, the patches for suspend and resume that I had for this took the opposite
order, they did suspend in forward order, but resume in backwards order.
Like so:

--- //depot/vendor/freebsd/src/sys/kern/subr_bus.c      2010-11-17 22:30:24.000000000 0000
+++ //depot/user/jhb/acpipci/kern/subr_bus.c    2010-11-19 17:19:02.000000000 00
@@ -3426,9 +3429,9 @@
        TAILQ_FOREACH(child, &dev->children, link) {
                error = DEVICE_SUSPEND(child);
                if (error) {
-                       for (child2 = TAILQ_FIRST(&dev->children);
-                            child2 && child2 != child;
-                            child2 = TAILQ_NEXT(child2, link))
+                       for (child2 = TAILQ_PREV(child, device_list, link);
+                            child2 != NULL;
+                            child2 = TAILQ_PREV(child2, device_list, link))
                                DEVICE_RESUME(child2);
                        return (error);
                }
@@ -3447,7 +3450,7 @@
 {
        device_t        child;
 
-       TAILQ_FOREACH(child, &dev->children, link) {
+       TAILQ_FOREACH_REVERSE(child, &dev->children, device_list, link) {
                DEVICE_RESUME(child);
                /* if resume fails, there's nothing we can usefully do... */
        }

(Likely mangled whitespace.)

I couldn't convince myself which order was "more" correct for suspend and resume.

-- 
John Baldwin



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