From owner-svn-src-all@FreeBSD.ORG Sat Dec 31 15:31:35 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 90670106566C; Sat, 31 Dec 2011 15:31:35 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 761EE8FC0A; Sat, 31 Dec 2011 15:31:35 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBVFVZhk071034; Sat, 31 Dec 2011 15:31:35 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBVFVYgw070999; Sat, 31 Dec 2011 15:31:34 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201112311531.pBVFVYgw070999@svn.freebsd.org> From: Hans Petter Selasky Date: Sat, 31 Dec 2011 15:31:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r229118 - in stable/9/sys: arm/econa arm/xscale/ixp425 dev/ahci dev/ata dev/gpio dev/mvs dev/ppbus dev/ppc dev/siba dev/siis dev/usb dev/usb/controller kern mips/atheros mips/cavium/usb... X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 31 Dec 2011 15:31:35 -0000 Author: hselasky Date: Sat Dec 31 15:31:34 2011 New Revision: 229118 URL: http://svn.freebsd.org/changeset/base/229118 Log: MFC r227701, r227847 and r227849: Move the device_delete_all_children() function from usb_util.c to kern/subr_bus.c. Simplify this function so that it no longer depends on malloc() to execute. Rename device_delete_all_children() into device_delete_children(). Identify a few other places where it makes sense to use device_delete_children(). Modified: stable/9/sys/arm/econa/ehci_ebus.c stable/9/sys/arm/econa/ohci_ec.c stable/9/sys/arm/xscale/ixp425/avila_ata.c stable/9/sys/dev/ahci/ahci.c stable/9/sys/dev/ata/ata-disk.c stable/9/sys/dev/ata/ata-pci.c stable/9/sys/dev/gpio/gpiobus.c stable/9/sys/dev/mvs/mvs_pci.c stable/9/sys/dev/mvs/mvs_soc.c stable/9/sys/dev/ppbus/ppbconf.c stable/9/sys/dev/ppc/ppc.c stable/9/sys/dev/siba/siba_core.c stable/9/sys/dev/siis/siis.c stable/9/sys/dev/usb/controller/at91dci_atmelarm.c stable/9/sys/dev/usb/controller/atmegadci_atmelarm.c stable/9/sys/dev/usb/controller/ehci_ixp4xx.c stable/9/sys/dev/usb/controller/ehci_mv.c stable/9/sys/dev/usb/controller/ehci_pci.c stable/9/sys/dev/usb/controller/musb_otg_atmelarm.c stable/9/sys/dev/usb/controller/ohci_atmelarm.c stable/9/sys/dev/usb/controller/ohci_pci.c stable/9/sys/dev/usb/controller/ohci_s3c24x0.c stable/9/sys/dev/usb/controller/uhci_pci.c stable/9/sys/dev/usb/controller/uss820dci_atmelarm.c stable/9/sys/dev/usb/controller/xhci_pci.c stable/9/sys/dev/usb/usb_util.c stable/9/sys/dev/usb/usb_util.h stable/9/sys/kern/subr_bus.c stable/9/sys/mips/atheros/ar71xx_ehci.c stable/9/sys/mips/atheros/ar71xx_ohci.c stable/9/sys/mips/cavium/usb/octusb_octeon.c stable/9/sys/mips/rmi/xls_ehci.c stable/9/sys/mips/rt305x/rt305x_dotg.c stable/9/sys/sys/bus.h Directory Properties: stable/9/sys/ (props changed) stable/9/sys/amd64/include/xen/ (props changed) stable/9/sys/boot/ (props changed) stable/9/sys/boot/i386/efi/ (props changed) stable/9/sys/boot/ia64/efi/ (props changed) stable/9/sys/boot/ia64/ski/ (props changed) stable/9/sys/boot/powerpc/boot1.chrp/ (props changed) stable/9/sys/boot/powerpc/ofw/ (props changed) stable/9/sys/cddl/contrib/opensolaris/ (props changed) stable/9/sys/conf/ (props changed) stable/9/sys/contrib/dev/acpica/ (props changed) stable/9/sys/contrib/octeon-sdk/ (props changed) stable/9/sys/contrib/pf/ (props changed) stable/9/sys/contrib/x86emu/ (props changed) Modified: stable/9/sys/arm/econa/ehci_ebus.c ============================================================================== --- stable/9/sys/arm/econa/ehci_ebus.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/arm/econa/ehci_ebus.c Sat Dec 31 15:31:34 2011 (r229118) @@ -192,7 +192,7 @@ ehci_ebus_detach(device_t self) device_delete_child(self, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(self); + device_delete_children(self); /* * disable interrupts that might have been switched on in Modified: stable/9/sys/arm/econa/ohci_ec.c ============================================================================== --- stable/9/sys/arm/econa/ohci_ec.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/arm/econa/ohci_ec.c Sat Dec 31 15:31:34 2011 (r229118) @@ -185,7 +185,7 @@ ohci_ec_detach(device_t dev) device_delete_child(dev, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(dev); + device_delete_children(dev); bus_space_write_4(sc->sc_ohci.sc_io_tag, sc->sc_ohci.sc_io_hdl, OHCI_CONTROL, 0); Modified: stable/9/sys/arm/xscale/ixp425/avila_ata.c ============================================================================== --- stable/9/sys/arm/xscale/ixp425/avila_ata.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/arm/xscale/ixp425/avila_ata.c Sat Dec 31 15:31:34 2011 (r229118) @@ -259,17 +259,11 @@ static int ata_avila_detach(device_t dev) { struct ata_avila_softc *sc = device_get_softc(dev); - device_t *children; - int nc; /* XXX quiesce gpio? */ /* detach & delete all children */ - if (device_get_children(dev, &children, &nc) == 0) { - if (nc > 0) - device_delete_child(dev, children[0]); - free(children, M_TEMP); - } + device_delete_children(dev); bus_teardown_intr(dev, sc->sc_irq, sc->sc_ih); bus_release_resource(dev, SYS_RES_IRQ, sc->sc_rid, sc->sc_irq); Modified: stable/9/sys/dev/ahci/ahci.c ============================================================================== --- stable/9/sys/dev/ahci/ahci.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/ahci/ahci.c Sat Dec 31 15:31:34 2011 (r229118) @@ -514,15 +514,11 @@ static int ahci_detach(device_t dev) { struct ahci_controller *ctlr = device_get_softc(dev); - device_t *children; - int nchildren, i; + int i; /* Detach & delete all children */ - if (!device_get_children(dev, &children, &nchildren)) { - for (i = 0; i < nchildren; i++) - device_delete_child(dev, children[i]); - free(children, M_TEMP); - } + device_delete_children(dev); + /* Free interrupts. */ for (i = 0; i < ctlr->numirqs; i++) { if (ctlr->irqs[i].r_irq) { Modified: stable/9/sys/dev/ata/ata-disk.c ============================================================================== --- stable/9/sys/dev/ata/ata-disk.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/ata/ata-disk.c Sat Dec 31 15:31:34 2011 (r229118) @@ -172,8 +172,6 @@ ad_detach(device_t dev) { struct ad_softc *adp = device_get_ivars(dev); struct ata_device *atadev = device_get_softc(dev); - device_t *children; - int nchildren, i; /* check that we have a valid disk to detach */ if (!device_get_ivars(dev)) @@ -183,12 +181,7 @@ ad_detach(device_t dev) callout_drain(&atadev->spindown_timer); /* detach & delete all children */ - if (!device_get_children(dev, &children, &nchildren)) { - for (i = 0; i < nchildren; i++) - if (children[i]) - device_delete_child(dev, children[i]); - free(children, M_TEMP); - } + device_delete_children(dev); /* destroy disk from the system so we don't get any further requests */ disk_destroy(adp->disk); Modified: stable/9/sys/dev/ata/ata-pci.c ============================================================================== --- stable/9/sys/dev/ata/ata-pci.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/ata/ata-pci.c Sat Dec 31 15:31:34 2011 (r229118) @@ -136,15 +136,10 @@ int ata_pci_detach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(dev); - device_t *children; - int nchildren, i; /* detach & delete all children */ - if (!device_get_children(dev, &children, &nchildren)) { - for (i = 0; i < nchildren; i++) - device_delete_child(dev, children[i]); - free(children, M_TEMP); - } + device_delete_children(dev); + if (ctlr->r_irq) { bus_teardown_intr(dev, ctlr->r_irq, ctlr->handle); bus_release_resource(dev, SYS_RES_IRQ, ctlr->r_irq_rid, ctlr->r_irq); Modified: stable/9/sys/dev/gpio/gpiobus.c ============================================================================== --- stable/9/sys/dev/gpio/gpiobus.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/gpio/gpiobus.c Sat Dec 31 15:31:34 2011 (r229118) @@ -219,8 +219,7 @@ static int gpiobus_detach(device_t dev) { struct gpiobus_softc *sc = GPIOBUS_SOFTC(dev); - int err, ndevs, i; - device_t *devlist; + int err; KASSERT(mtx_initialized(&sc->sc_mtx), ("gpiobus mutex not initialized")); @@ -228,16 +227,14 @@ gpiobus_detach(device_t dev) if ((err = bus_generic_detach(dev)) != 0) return (err); - if ((err = device_get_children(dev, &devlist, &ndevs)) != 0) - return (err); - for (i = 0; i < ndevs; i++) - device_delete_child(dev, devlist[i]); + + /* detach and delete all children */ + device_delete_children(dev); if (sc->sc_pins_mapped) { free(sc->sc_pins_mapped, M_DEVBUF); sc->sc_pins_mapped = NULL; } - free(devlist, M_TEMP); return (0); } Modified: stable/9/sys/dev/mvs/mvs_pci.c ============================================================================== --- stable/9/sys/dev/mvs/mvs_pci.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/mvs/mvs_pci.c Sat Dec 31 15:31:34 2011 (r229118) @@ -177,15 +177,10 @@ static int mvs_detach(device_t dev) { struct mvs_controller *ctlr = device_get_softc(dev); - device_t *children; - int nchildren, i; /* Detach & delete all children */ - if (!device_get_children(dev, &children, &nchildren)) { - for (i = 0; i < nchildren; i++) - device_delete_child(dev, children[i]); - free(children, M_TEMP); - } + device_delete_children(dev); + /* Free interrupt. */ if (ctlr->irq.r_irq) { bus_teardown_intr(dev, ctlr->irq.r_irq, Modified: stable/9/sys/dev/mvs/mvs_soc.c ============================================================================== --- stable/9/sys/dev/mvs/mvs_soc.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/mvs/mvs_soc.c Sat Dec 31 15:31:34 2011 (r229118) @@ -173,15 +173,10 @@ static int mvs_detach(device_t dev) { struct mvs_controller *ctlr = device_get_softc(dev); - device_t *children; - int nchildren, i; /* Detach & delete all children */ - if (!device_get_children(dev, &children, &nchildren)) { - for (i = 0; i < nchildren; i++) - device_delete_child(dev, children[i]); - free(children, M_TEMP); - } + device_delete_children(dev); + /* Free interrupt. */ if (ctlr->irq.r_irq) { bus_teardown_intr(dev, ctlr->irq.r_irq, Modified: stable/9/sys/dev/ppbus/ppbconf.c ============================================================================== --- stable/9/sys/dev/ppbus/ppbconf.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/ppbus/ppbconf.c Sat Dec 31 15:31:34 2011 (r229118) @@ -422,20 +422,14 @@ ppbus_attach(device_t dev) static int ppbus_detach(device_t dev) { - device_t *children; - int error, nchildren, i; + int error; error = bus_generic_detach(dev); if (error) return (error); /* detach & delete all children */ - if (!device_get_children(dev, &children, &nchildren)) { - for (i = 0; i < nchildren; i++) - if (children[i]) - device_delete_child(dev, children[i]); - free(children, M_TEMP); - } + device_delete_children(dev); return (0); } Modified: stable/9/sys/dev/ppc/ppc.c ============================================================================== --- stable/9/sys/dev/ppc/ppc.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/ppc/ppc.c Sat Dec 31 15:31:34 2011 (r229118) @@ -1851,20 +1851,13 @@ int ppc_detach(device_t dev) { struct ppc_data *ppc = DEVTOSOFTC(dev); - device_t *children; - int nchildren, i; if (ppc->res_irq == 0) { return (ENXIO); } /* detach & delete all children */ - if (!device_get_children(dev, &children, &nchildren)) { - for (i = 0; i < nchildren; i++) - if (children[i]) - device_delete_child(dev, children[i]); - free(children, M_TEMP); - } + device_delete_children(dev); if (ppc->res_irq != 0) { bus_teardown_intr(dev, ppc->res_irq, ppc->intr_cookie); Modified: stable/9/sys/dev/siba/siba_core.c ============================================================================== --- stable/9/sys/dev/siba/siba_core.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/siba/siba_core.c Sat Dec 31 15:31:34 2011 (r229118) @@ -214,16 +214,8 @@ siba_core_attach(struct siba_softc *siba int siba_core_detach(struct siba_softc *siba) { - device_t *devlistp; - int devcnt, error = 0, i; - - error = device_get_children(siba->siba_dev, &devlistp, &devcnt); - if (error != 0) - return (0); - - for ( i = 0 ; i < devcnt ; i++) - device_delete_child(siba->siba_dev, devlistp[i]); - free(devlistp, M_TEMP); + /* detach & delete all children */ + device_delete_children(siba->siba_dev); return (0); } Modified: stable/9/sys/dev/siis/siis.c ============================================================================== --- stable/9/sys/dev/siis/siis.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/siis/siis.c Sat Dec 31 15:31:34 2011 (r229118) @@ -205,15 +205,10 @@ static int siis_detach(device_t dev) { struct siis_controller *ctlr = device_get_softc(dev); - device_t *children; - int nchildren, i; /* Detach & delete all children */ - if (!device_get_children(dev, &children, &nchildren)) { - for (i = 0; i < nchildren; i++) - device_delete_child(dev, children[i]); - free(children, M_TEMP); - } + device_delete_children(dev); + /* Free interrupts. */ if (ctlr->irq.r_irq) { bus_teardown_intr(dev, ctlr->irq.r_irq, Modified: stable/9/sys/dev/usb/controller/at91dci_atmelarm.c ============================================================================== --- stable/9/sys/dev/usb/controller/at91dci_atmelarm.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/usb/controller/at91dci_atmelarm.c Sat Dec 31 15:31:34 2011 (r229118) @@ -270,7 +270,7 @@ at91_udp_detach(device_t dev) device_delete_child(dev, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(dev); + device_delete_children(dev); /* disable Transceiver */ AT91_UDP_WRITE_4(&sc->sc_dci, AT91_UDP_TXVC, AT91_UDP_TXVC_DIS); Modified: stable/9/sys/dev/usb/controller/atmegadci_atmelarm.c ============================================================================== --- stable/9/sys/dev/usb/controller/atmegadci_atmelarm.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/usb/controller/atmegadci_atmelarm.c Sat Dec 31 15:31:34 2011 (r229118) @@ -163,7 +163,7 @@ atmegadci_detach(device_t dev) device_delete_child(dev, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(dev); + device_delete_children(dev); if (sc->sc_otg.sc_irq_res && sc->sc_otg.sc_intr_hdl) { /* Modified: stable/9/sys/dev/usb/controller/ehci_ixp4xx.c ============================================================================== --- stable/9/sys/dev/usb/controller/ehci_ixp4xx.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/usb/controller/ehci_ixp4xx.c Sat Dec 31 15:31:34 2011 (r229118) @@ -215,7 +215,7 @@ ehci_ixp_detach(device_t self) device_delete_child(self, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(self); + device_delete_children(self); if (sc->sc_irq_res && sc->sc_intr_hdl) { /* Modified: stable/9/sys/dev/usb/controller/ehci_mv.c ============================================================================== --- stable/9/sys/dev/usb/controller/ehci_mv.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/usb/controller/ehci_mv.c Sat Dec 31 15:31:34 2011 (r229118) @@ -247,7 +247,7 @@ mv_ehci_detach(device_t self) device_delete_child(self, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(self); + device_delete_children(self); /* * disable interrupts that might have been switched on in mv_ehci_attach Modified: stable/9/sys/dev/usb/controller/ehci_pci.c ============================================================================== --- stable/9/sys/dev/usb/controller/ehci_pci.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/usb/controller/ehci_pci.c Sat Dec 31 15:31:34 2011 (r229118) @@ -455,7 +455,7 @@ ehci_pci_detach(device_t self) device_delete_child(self, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(self); + device_delete_children(self); pci_disable_busmaster(self); Modified: stable/9/sys/dev/usb/controller/musb_otg_atmelarm.c ============================================================================== --- stable/9/sys/dev/usb/controller/musb_otg_atmelarm.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/usb/controller/musb_otg_atmelarm.c Sat Dec 31 15:31:34 2011 (r229118) @@ -188,7 +188,7 @@ musbotg_detach(device_t dev) device_delete_child(dev, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(dev); + device_delete_children(dev); if (sc->sc_otg.sc_irq_res && sc->sc_otg.sc_intr_hdl) { /* Modified: stable/9/sys/dev/usb/controller/ohci_atmelarm.c ============================================================================== --- stable/9/sys/dev/usb/controller/ohci_atmelarm.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/usb/controller/ohci_atmelarm.c Sat Dec 31 15:31:34 2011 (r229118) @@ -174,7 +174,7 @@ ohci_atmelarm_detach(device_t dev) device_delete_child(dev, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(dev); + device_delete_children(dev); /* * Put the controller into reset, then disable clocks and do Modified: stable/9/sys/dev/usb/controller/ohci_pci.c ============================================================================== --- stable/9/sys/dev/usb/controller/ohci_pci.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/usb/controller/ohci_pci.c Sat Dec 31 15:31:34 2011 (r229118) @@ -331,7 +331,7 @@ ohci_pci_detach(device_t self) device_delete_child(self, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(self); + device_delete_children(self); pci_disable_busmaster(self); Modified: stable/9/sys/dev/usb/controller/ohci_s3c24x0.c ============================================================================== --- stable/9/sys/dev/usb/controller/ohci_s3c24x0.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/usb/controller/ohci_s3c24x0.c Sat Dec 31 15:31:34 2011 (r229118) @@ -156,7 +156,7 @@ ohci_s3c24x0_detach(device_t dev) device_delete_child(dev, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(dev); + device_delete_children(dev); /* * Put the controller into reset, then disable clocks and do Modified: stable/9/sys/dev/usb/controller/uhci_pci.c ============================================================================== --- stable/9/sys/dev/usb/controller/uhci_pci.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/usb/controller/uhci_pci.c Sat Dec 31 15:31:34 2011 (r229118) @@ -387,7 +387,7 @@ uhci_pci_detach(device_t self) device_delete_child(self, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(self); + device_delete_children(self); /* * disable interrupts that might have been switched on in Modified: stable/9/sys/dev/usb/controller/uss820dci_atmelarm.c ============================================================================== --- stable/9/sys/dev/usb/controller/uss820dci_atmelarm.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/usb/controller/uss820dci_atmelarm.c Sat Dec 31 15:31:34 2011 (r229118) @@ -177,7 +177,7 @@ uss820_atmelarm_detach(device_t dev) device_delete_child(dev, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(dev); + device_delete_children(dev); if (sc->sc_irq_res && sc->sc_intr_hdl) { /* Modified: stable/9/sys/dev/usb/controller/xhci_pci.c ============================================================================== --- stable/9/sys/dev/usb/controller/xhci_pci.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/usb/controller/xhci_pci.c Sat Dec 31 15:31:34 2011 (r229118) @@ -202,7 +202,7 @@ xhci_pci_detach(device_t self) device_delete_child(self, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(self); + device_delete_children(self); pci_disable_busmaster(self); Modified: stable/9/sys/dev/usb/usb_util.c ============================================================================== --- stable/9/sys/dev/usb/usb_util.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/usb/usb_util.c Sat Dec 31 15:31:34 2011 (r229118) @@ -58,31 +58,6 @@ #include /*------------------------------------------------------------------------* - * device_delete_all_children - delete all children of a device - *------------------------------------------------------------------------*/ -#ifndef device_delete_all_children -int -device_delete_all_children(device_t dev) -{ - device_t *devlist; - int devcount; - int error; - - error = device_get_children(dev, &devlist, &devcount); - if (error == 0) { - while (devcount-- > 0) { - error = device_delete_child(dev, devlist[devcount]); - if (error) { - break; - } - } - free(devlist, M_TEMP); - } - return (error); -} -#endif - -/*------------------------------------------------------------------------* * device_set_usb_desc * * This function can be called at probe or attach to set the USB Modified: stable/9/sys/dev/usb/usb_util.h ============================================================================== --- stable/9/sys/dev/usb/usb_util.h Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/dev/usb/usb_util.h Sat Dec 31 15:31:34 2011 (r229118) @@ -27,7 +27,6 @@ #ifndef _USB_UTIL_H_ #define _USB_UTIL_H_ -int device_delete_all_children(device_t dev); uint8_t usb_make_str_desc(void *ptr, uint16_t max_len, const char *s); void usb_printbcd(char *p, uint16_t p_len, uint16_t bcd); void usb_trim_spaces(char *p); Modified: stable/9/sys/kern/subr_bus.c ============================================================================== --- stable/9/sys/kern/subr_bus.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/kern/subr_bus.c Sat Dec 31 15:31:34 2011 (r229118) @@ -1862,7 +1862,7 @@ device_delete_child(device_t dev, device PDEBUG(("%s from %s", DEVICENAME(child), DEVICENAME(dev))); /* remove children first */ - while ( (grandchild = TAILQ_FIRST(&child->children)) ) { + while ((grandchild = TAILQ_FIRST(&child->children)) != NULL) { error = device_delete_child(child, grandchild); if (error) return (error); @@ -1881,6 +1881,39 @@ device_delete_child(device_t dev, device } /** + * @brief Delete all children devices of the given device, if any. + * + * This function deletes all children devices of the given device, if + * any, using the device_delete_child() function for each device it + * finds. If a child device cannot be deleted, this function will + * return an error code. + * + * @param dev the parent device + * + * @retval 0 success + * @retval non-zero a device would not detach + */ +int +device_delete_children(device_t dev) +{ + device_t child; + int error; + + PDEBUG(("Deleting all children of %s", DEVICENAME(dev))); + + error = 0; + + while ((child = TAILQ_FIRST(&dev->children)) != NULL) { + error = device_delete_child(dev, child); + if (error) { + PDEBUG(("Failed deleting %s", DEVICENAME(child))); + break; + } + } + return (error); +} + +/** * @brief Find a device given a unit number * * This is similar to devclass_get_devices() but only searches for Modified: stable/9/sys/mips/atheros/ar71xx_ehci.c ============================================================================== --- stable/9/sys/mips/atheros/ar71xx_ehci.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/mips/atheros/ar71xx_ehci.c Sat Dec 31 15:31:34 2011 (r229118) @@ -202,7 +202,7 @@ ar71xx_ehci_detach(device_t self) device_delete_child(self, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(self); + device_delete_children(self); if (sc->sc_irq_res && sc->sc_intr_hdl) { /* Modified: stable/9/sys/mips/atheros/ar71xx_ohci.c ============================================================================== --- stable/9/sys/mips/atheros/ar71xx_ohci.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/mips/atheros/ar71xx_ohci.c Sat Dec 31 15:31:34 2011 (r229118) @@ -150,7 +150,7 @@ ar71xx_ohci_detach(device_t dev) device_delete_child(dev, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(dev); + device_delete_children(dev); /* * Put the controller into reset, then disable clocks and do Modified: stable/9/sys/mips/cavium/usb/octusb_octeon.c ============================================================================== --- stable/9/sys/mips/cavium/usb/octusb_octeon.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/mips/cavium/usb/octusb_octeon.c Sat Dec 31 15:31:34 2011 (r229118) @@ -159,7 +159,7 @@ octusb_octeon_detach(device_t dev) device_delete_child(dev, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(dev); + device_delete_children(dev); if (sc->sc_dci.sc_irq_res && sc->sc_dci.sc_intr_hdl) { /* Modified: stable/9/sys/mips/rmi/xls_ehci.c ============================================================================== --- stable/9/sys/mips/rmi/xls_ehci.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/mips/rmi/xls_ehci.c Sat Dec 31 15:31:34 2011 (r229118) @@ -172,7 +172,7 @@ ehci_xls_detach(device_t self) device_delete_child(self, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(self); + device_delete_children(self); if (sc->sc_irq_res && sc->sc_intr_hdl) { ehci_detach(sc); Modified: stable/9/sys/mips/rt305x/rt305x_dotg.c ============================================================================== --- stable/9/sys/mips/rt305x/rt305x_dotg.c Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/mips/rt305x/rt305x_dotg.c Sat Dec 31 15:31:34 2011 (r229118) @@ -175,7 +175,7 @@ dotg_obio_detach(device_t dev) device_delete_child(dev, bdev); } /* during module unload there are lots of children leftover */ - device_delete_all_children(dev); + device_delete_children(dev); if (sc->sc_dci.sc_irq_res && sc->sc_dci.sc_intr_hdl) { /* Modified: stable/9/sys/sys/bus.h ============================================================================== --- stable/9/sys/sys/bus.h Sat Dec 31 15:18:51 2011 (r229117) +++ stable/9/sys/sys/bus.h Sat Dec 31 15:31:34 2011 (r229118) @@ -424,6 +424,7 @@ device_t device_add_child_ordered(device const char *name, int unit); void device_busy(device_t dev); int device_delete_child(device_t dev, device_t child); +int device_delete_children(device_t dev); int device_attach(device_t dev); int device_detach(device_t dev); void device_disable(device_t dev);