Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Sep 2004 09:06:20 -0600 (MDT)
From:      "M. Warner Losh" <imp@bsdimp.com>
To:        nate@root.org
Cc:        cvs-all@freebsd.org
Subject:   Re: cvs commit: src/sys/dev/usb usb_port.h
Message-ID:  <20040922.090620.102653766.imp@bsdimp.com>
In-Reply-To: <20040921230445.B44288@root.org>
References:  <20040922060214.7754A16A548@hub.freebsd.org> <20040921230445.B44288@root.org>

next in thread | previous in thread | raw e-mail | index | archive | help
In message: <20040921230445.B44288@root.org>
            Nate Lawson <nate@root.org> writes:
: On Wed, 22 Sep 2004, Warner Losh wrote:
: > imp         2004-09-22 06:02:10 UTC
: >
: >   FreeBSD src repository
: >
: >   Modified files:
: >     sys/dev/usb          usb_port.h
: >   Log:
: >   Add a temporary workaround to the panic on boot with hub attached and
: >   panic on hub detach bugs that have been reported.  This work around
: >   detaches the device before deleting it.  This changes the detach order
: >   from in-order to pre-order.  This avoids uhub's deleting the children
: >   after its subdevs has been deleted.
: >
: >   Revision  Changes    Path
: >   1.68      +1 -0      src/sys/dev/usb/usb_port.h
: >
: >
: > Index: src/sys/dev/usb/usb_port.h
: > diff -u src/sys/dev/usb/usb_port.h:1.67 src/sys/dev/usb/usb_port.h:1.68
: > --- src/sys/dev/usb/usb_port.h:1.67	Sun Aug 15 23:39:18 2004
: > +++ src/sys/dev/usb/usb_port.h	Wed Sep 22 06:02:10 2004
: > @@ -422,6 +422,7 @@
: >  #define config_detach(dev, flag) \
: >  	do { \
: >  		free(device_get_ivars(dev), M_USB); \
: > +		device_detach(dev); \
: >  		device_delete_child(device_get_parent(dev), dev); \
: >  	} while (0);
: 
: Shouldn't you free the ivars after detaching the device?  If the device
: releases resources in its attach routine, you may be walking the resource
: list stored in the ivars but that will already have been freed with the
: above code.  It would also make sense to do this as the exact reverse of
: device creation.

Also, the code committed to the tree passes a pointer to the ivar from
a variable on the stack.  This, under the theory that it is used only
during probe/attach.  There are a number of parallel arrays to
subdevs[] that could (and likely should) be converted to being stored
as ivars to make detach easier....

Warner



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