Date: Wed, 22 Sep 2004 11:17:11 -0700 From: Nate Lawson <nate@root.org> To: "M. Warner Losh" <imp@bsdimp.com> Cc: cvs-all@freebsd.org Subject: Re: cvs commit: src/sys/dev/usb usb_port.h Message-ID: <4151C1A7.2040905@root.org> In-Reply-To: <20040922.085115.34541167.imp@bsdimp.com> References: <20040922060214.7754A16A548@hub.freebsd.org> <20040921230445.B44288@root.org> <20040922.085115.34541167.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
M. Warner Losh wrote:
> 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?
>
> I don't think this is the right place to do that.
Now I'm the one who is confused. I'm talking about the call to free()
right before device_detach(). See above. I meant I think the
device_detach() should go before the free().
> : 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.
>
> resources aren't stored in ivars. usb devices do not use resources.
I see, it's contained in the *HCI driver. But strangely, it sets its
own ivars.
> : It would also make sense to do this as the exact reverse of
> : device creation.
>
> I don't understand this.
Devices need to be detached before being deleted. If they have ivars,
it makes sense to kill those after detach, not before.
--
Nate
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4151C1A7.2040905>
