cvs commit: src/sys/dev/usb usb_port.h
M. Warner Losh
imp at bsdimp.com
Wed Sep 22 08:07:13 PDT 2004
In message: <20040921230445.B44288 at root.org>
Nate Lawson <nate at 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
More information about the cvs-src
mailing list