svn commit: r215544 - head/sys/kern
Jung-uk Kim
jkim at FreeBSD.org
Fri Nov 19 21:46:42 UTC 2010
On Friday 19 November 2010 04:31 pm, Attilio Rao wrote:
> 2010/11/19 John Baldwin <jhb at freebsd.org>:
> > 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.
>
> Considering loading in starting point, I think suspend should go in
> reverse logic and resume in the same module load logic.
> So that dependent modules are suspended first and resumed after.
> Don't you agree?
That's exactly what I was thinking. :-)
Jung-uk Kim
More information about the svn-src-head
mailing list