From owner-cvs-src@FreeBSD.ORG Wed Sep 22 15:07:13 2004 Return-Path: Delivered-To: cvs-src@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7FCD816A4CE; Wed, 22 Sep 2004 15:07:13 +0000 (GMT) Received: from harmony.village.org (rover.village.org [168.103.84.182]) by mx1.FreeBSD.org (Postfix) with ESMTP id 17A4E43D3F; Wed, 22 Sep 2004 15:07:13 +0000 (GMT) (envelope-from imp@bsdimp.com) Received: from localhost (harmony.village.org [10.0.0.6]) by harmony.village.org (8.13.1/8.13.1) with ESMTP id i8MF5IIq097257; Wed, 22 Sep 2004 09:05:18 -0600 (MDT) (envelope-from imp@bsdimp.com) Date: Wed, 22 Sep 2004 09:06:20 -0600 (MDT) Message-Id: <20040922.090620.102653766.imp@bsdimp.com> To: nate@root.org From: "M. Warner Losh" In-Reply-To: <20040921230445.B44288@root.org> References: <20040922060214.7754A16A548@hub.freebsd.org> <20040921230445.B44288@root.org> X-Mailer: Mew version 3.3 on Emacs 21.3 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit cc: cvs-src@freebsd.org cc: src-committers@freebsd.org cc: cvs-all@freebsd.org Subject: Re: cvs commit: src/sys/dev/usb usb_port.h X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Sep 2004 15:07:13 -0000 In message: <20040921230445.B44288@root.org> Nate Lawson 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