Skip site navigation (1)Skip section navigation (2)
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>