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>