diff --git a/sys/arm/allwinner/if_emac.c b/sys/arm/allwinner/if_emac.c --- a/sys/arm/allwinner/if_emac.c +++ b/sys/arm/allwinner/if_emac.c @@ -811,10 +811,7 @@ bus_teardown_intr(sc->emac_dev, sc->emac_irq, sc->emac_intrhand); - if (sc->emac_miibus != NULL) { - device_delete_child(sc->emac_dev, sc->emac_miibus); - bus_generic_detach(sc->emac_dev); - } + bus_generic_detach(sc->emac_dev); if (sc->emac_clk != NULL) clk_disable(sc->emac_clk); diff --git a/sys/dev/ae/if_ae.c b/sys/dev/ae/if_ae.c --- a/sys/dev/ae/if_ae.c +++ b/sys/dev/ae/if_ae.c @@ -761,10 +761,6 @@ taskqueue_free(sc->tq); sc->tq = NULL; } - if (sc->miibus != NULL) { - device_delete_child(dev, sc->miibus); - sc->miibus = NULL; - } bus_generic_detach(sc->dev); ae_dma_free(sc); if (sc->intrhand != NULL) { diff --git a/sys/dev/age/if_age.c b/sys/dev/age/if_age.c --- a/sys/dev/age/if_age.c +++ b/sys/dev/age/if_age.c @@ -686,10 +686,6 @@ sc->age_tq = NULL; } - if (sc->age_miibus != NULL) { - device_delete_child(dev, sc->age_miibus); - sc->age_miibus = NULL; - } bus_generic_detach(dev); age_dma_free(sc); diff --git a/sys/dev/alc/if_alc.c b/sys/dev/alc/if_alc.c --- a/sys/dev/alc/if_alc.c +++ b/sys/dev/alc/if_alc.c @@ -1699,10 +1699,6 @@ sc->alc_tq = NULL; } - if (sc->alc_miibus != NULL) { - device_delete_child(dev, sc->alc_miibus); - sc->alc_miibus = NULL; - } bus_generic_detach(dev); alc_dma_free(sc); diff --git a/sys/dev/ale/if_ale.c b/sys/dev/ale/if_ale.c --- a/sys/dev/ale/if_ale.c +++ b/sys/dev/ale/if_ale.c @@ -711,10 +711,6 @@ sc->ale_tq = NULL; } - if (sc->ale_miibus != NULL) { - device_delete_child(dev, sc->ale_miibus); - sc->ale_miibus = NULL; - } bus_generic_detach(dev); ale_dma_free(sc); diff --git a/sys/dev/dc/if_dc.c b/sys/dev/dc/if_dc.c --- a/sys/dev/dc/if_dc.c +++ b/sys/dev/dc/if_dc.c @@ -2539,8 +2539,6 @@ callout_drain(&sc->dc_wdog_ch); ether_ifdetach(ifp); } - if (sc->dc_miibus) - device_delete_child(dev, sc->dc_miibus); bus_generic_detach(dev); if (sc->dc_intrhand) diff --git a/sys/dev/dwc/if_dwc.c b/sys/dev/dwc/if_dwc.c --- a/sys/dev/dwc/if_dwc.c +++ b/sys/dev/dwc/if_dwc.c @@ -656,10 +656,6 @@ ether_ifdetach(sc->ifp); } - if (sc->miibus != NULL) { - device_delete_child(dev, sc->miibus); - sc->miibus = NULL; - } bus_generic_detach(dev); /* Free DMA descriptors */ diff --git a/sys/dev/eqos/if_eqos.c b/sys/dev/eqos/if_eqos.c --- a/sys/dev/eqos/if_eqos.c +++ b/sys/dev/eqos/if_eqos.c @@ -1216,8 +1216,6 @@ ether_ifdetach(sc->ifp); } - if (sc->miibus) - device_delete_child(dev, sc->miibus); bus_generic_detach(dev); if (sc->irq_handle) diff --git a/sys/dev/et/if_et.c b/sys/dev/et/if_et.c --- a/sys/dev/et/if_et.c +++ b/sys/dev/et/if_et.c @@ -370,8 +370,6 @@ callout_drain(&sc->sc_tick); } - if (sc->sc_miibus != NULL) - device_delete_child(dev, sc->sc_miibus); bus_generic_detach(dev); if (sc->sc_irq_handle != NULL) diff --git a/sys/dev/fxp/if_fxp.c b/sys/dev/fxp/if_fxp.c --- a/sys/dev/fxp/if_fxp.c +++ b/sys/dev/fxp/if_fxp.c @@ -933,8 +933,6 @@ FXP_LOCK_ASSERT(sc, MA_NOTOWNED); KASSERT(sc->ih == NULL, ("fxp_release() called with intr handle still active")); - if (sc->miibus) - device_delete_child(sc->dev, sc->miibus); bus_generic_detach(sc->dev); ifmedia_removeall(&sc->sc_media); if (sc->fxp_desc.cbl_list) { diff --git a/sys/dev/ips/ips.c b/sys/dev/ips/ips.c --- a/sys/dev/ips/ips.c +++ b/sys/dev/ips/ips.c @@ -279,17 +279,7 @@ static int ips_diskdev_free(ips_softc_t *sc) { - int i; - int error = 0; - for(i = 0; i < IPS_MAX_NUM_DRIVES; i++){ - if(sc->diskdev[i]) { - error = device_delete_child(sc->dev, sc->diskdev[i]); - if(error) - return error; - } - } - bus_generic_detach(sc->dev); - return 0; + return (bus_generic_detach(sc->dev)); } /* ips_timeout is periodically called to make sure no commands sent diff --git a/sys/dev/jme/if_jme.c b/sys/dev/jme/if_jme.c --- a/sys/dev/jme/if_jme.c +++ b/sys/dev/jme/if_jme.c @@ -928,10 +928,6 @@ sc->jme_tq = NULL; } - if (sc->jme_miibus != NULL) { - device_delete_child(dev, sc->jme_miibus); - sc->jme_miibus = NULL; - } bus_generic_detach(dev); jme_dma_free(sc); diff --git a/sys/dev/msk/if_msk.c b/sys/dev/msk/if_msk.c --- a/sys/dev/msk/if_msk.c +++ b/sys/dev/msk/if_msk.c @@ -2020,17 +2020,6 @@ MSK_IF_LOCK(sc_if); } - /* - * We're generally called from mskc_detach() which is using - * device_delete_child() to get to here. It's already trashed - * miibus for us, so don't do it here or we'll panic. - * - * if (sc_if->msk_miibus != NULL) { - * device_delete_child(dev, sc_if->msk_miibus); - * sc_if->msk_miibus = NULL; - * } - */ - msk_rx_dma_jfree(sc_if); msk_txrx_dma_free(sc_if); bus_generic_detach(dev); @@ -2058,15 +2047,7 @@ sc = device_get_softc(dev); KASSERT(mtx_initialized(&sc->msk_mtx), ("msk mutex not initialized")); - if (device_is_alive(dev)) { - if (sc->msk_devs[MSK_PORT_A] != NULL) { - device_delete_child(dev, sc->msk_devs[MSK_PORT_A]); - } - if (sc->msk_devs[MSK_PORT_B] != NULL) { - device_delete_child(dev, sc->msk_devs[MSK_PORT_B]); - } - bus_generic_detach(dev); - } + bus_generic_detach(dev); /* Disable all interrupts. */ CSR_WRITE_4(sc, B0_IMSK, 0); diff --git a/sys/dev/nfe/if_nfe.c b/sys/dev/nfe/if_nfe.c --- a/sys/dev/nfe/if_nfe.c +++ b/sys/dev/nfe/if_nfe.c @@ -711,8 +711,6 @@ nfe_set_macaddr(sc, eaddr); if_free(ifp); } - if (sc->nfe_miibus) - device_delete_child(dev, sc->nfe_miibus); bus_generic_detach(dev); if (sc->nfe_tq != NULL) { taskqueue_drain(sc->nfe_tq, &sc->nfe_int_task); diff --git a/sys/dev/nge/if_nge.c b/sys/dev/nge/if_nge.c --- a/sys/dev/nge/if_nge.c +++ b/sys/dev/nge/if_nge.c @@ -999,10 +999,6 @@ ether_ifdetach(ifp); } - if (sc->nge_miibus != NULL) { - device_delete_child(dev, sc->nge_miibus); - sc->nge_miibus = NULL; - } bus_generic_detach(dev); if (sc->nge_intrhand != NULL) bus_teardown_intr(dev, sc->nge_irq, sc->nge_intrhand); diff --git a/sys/dev/pccbb/pccbb.c b/sys/dev/pccbb/pccbb.c --- a/sys/dev/pccbb/pccbb.c +++ b/sys/dev/pccbb/pccbb.c @@ -275,42 +275,12 @@ cbb_detach(device_t brdev) { struct cbb_softc *sc = device_get_softc(brdev); - device_t *devlist; - int tmp, tries, error, numdevs; + int error; - /* - * Before we delete the children (which we have to do because - * attach doesn't check for children busses correctly), we have - * to detach the children. Even if we didn't need to delete the - * children, we have to detach them. - */ error = bus_generic_detach(brdev); if (error != 0) return (error); - /* - * Since the attach routine doesn't search for children before it - * attaches them to this device, we must delete them here in order - * for the kldload/unload case to work. If we failed to do that, then - * we'd get duplicate devices when cbb.ko was reloaded. - */ - tries = 10; - do { - error = device_get_children(brdev, &devlist, &numdevs); - if (error == 0) - break; - /* - * Try hard to cope with low memory. - */ - if (error == ENOMEM) { - pause("cbbnomem", 1); - continue; - } - } while (tries-- > 0); - for (tmp = 0; tmp < numdevs; tmp++) - device_delete_child(brdev, devlist[tmp]); - free(devlist, M_TEMP); - /* Turn off the interrupts */ cbb_set(sc, CBB_SOCKET_MASK, 0); diff --git a/sys/dev/re/if_re.c b/sys/dev/re/if_re.c --- a/sys/dev/re/if_re.c +++ b/sys/dev/re/if_re.c @@ -1803,8 +1803,6 @@ if_setflagbits(ifp, 0, IFF_UP); ether_ifdetach(ifp); } - if (sc->rl_miibus) - device_delete_child(dev, sc->rl_miibus); bus_generic_detach(dev); /* diff --git a/sys/dev/rl/if_rl.c b/sys/dev/rl/if_rl.c --- a/sys/dev/rl/if_rl.c +++ b/sys/dev/rl/if_rl.c @@ -882,8 +882,6 @@ #if 0 sc->suspended = 1; #endif - if (sc->rl_miibus) - device_delete_child(dev, sc->rl_miibus); bus_generic_detach(dev); if (sc->rl_intrhand[0]) diff --git a/sys/dev/sge/if_sge.c b/sys/dev/sge/if_sge.c --- a/sys/dev/sge/if_sge.c +++ b/sys/dev/sge/if_sge.c @@ -675,8 +675,6 @@ SGE_UNLOCK(sc); callout_drain(&sc->sge_stat_ch); } - if (sc->sge_miibus) - device_delete_child(dev, sc->sge_miibus); bus_generic_detach(dev); if (sc->sge_intrhand) diff --git a/sys/dev/sis/if_sis.c b/sys/dev/sis/if_sis.c --- a/sys/dev/sis/if_sis.c +++ b/sys/dev/sis/if_sis.c @@ -1146,8 +1146,6 @@ callout_drain(&sc->sis_stat_ch); ether_ifdetach(ifp); } - if (sc->sis_miibus) - device_delete_child(dev, sc->sis_miibus); bus_generic_detach(dev); if (sc->sis_intrhand) diff --git a/sys/dev/sk/if_sk.c b/sys/dev/sk/if_sk.c --- a/sys/dev/sk/if_sk.c +++ b/sys/dev/sk/if_sk.c @@ -1771,15 +1771,6 @@ ether_ifdetach(ifp); SK_IF_LOCK(sc_if); } - /* - * We're generally called from skc_detach() which is using - * device_delete_child() to get to here. It's already trashed - * miibus for us, so don't do it here or we'll panic. - */ - /* - if (sc_if->sk_miibus != NULL) - device_delete_child(dev, sc_if->sk_miibus); - */ bus_generic_detach(dev); sk_dma_jumbo_free(sc_if); sk_dma_free(sc_if); @@ -1798,15 +1789,7 @@ sc = device_get_softc(dev); KASSERT(mtx_initialized(&sc->sk_mtx), ("sk mutex not initialized")); - if (device_is_alive(dev)) { - if (sc->sk_devs[SK_PORT_A] != NULL) { - device_delete_child(dev, sc->sk_devs[SK_PORT_A]); - } - if (sc->sk_devs[SK_PORT_B] != NULL) { - device_delete_child(dev, sc->sk_devs[SK_PORT_B]); - } - bus_generic_detach(dev); - } + bus_generic_detach(dev); if (sc->sk_intrhand) bus_teardown_intr(dev, sc->sk_res[1], sc->sk_intrhand); diff --git a/sys/dev/smc/if_smc.c b/sys/dev/smc/if_smc.c --- a/sys/dev/smc/if_smc.c +++ b/sys/dev/smc/if_smc.c @@ -450,10 +450,7 @@ if_free(sc->smc_ifp); } - if (sc->smc_miibus != NULL) { - device_delete_child(sc->smc_dev, sc->smc_miibus); - bus_generic_detach(sc->smc_dev); - } + bus_generic_detach(sc->smc_dev); if (sc->smc_reg != NULL) { type = SYS_RES_IOPORT; diff --git a/sys/dev/ste/if_ste.c b/sys/dev/ste/if_ste.c --- a/sys/dev/ste/if_ste.c +++ b/sys/dev/ste/if_ste.c @@ -1074,8 +1074,6 @@ STE_UNLOCK(sc); callout_drain(&sc->ste_callout); } - if (sc->ste_miibus) - device_delete_child(dev, sc->ste_miibus); bus_generic_detach(dev); if (sc->ste_intrhand) diff --git a/sys/dev/stge/if_stge.c b/sys/dev/stge/if_stge.c --- a/sys/dev/stge/if_stge.c +++ b/sys/dev/stge/if_stge.c @@ -672,10 +672,6 @@ ether_ifdetach(ifp); } - if (sc->sc_miibus != NULL) { - device_delete_child(dev, sc->sc_miibus); - sc->sc_miibus = NULL; - } bus_generic_detach(dev); stge_dma_free(sc); diff --git a/sys/dev/vge/if_vge.c b/sys/dev/vge/if_vge.c --- a/sys/dev/vge/if_vge.c +++ b/sys/dev/vge/if_vge.c @@ -1177,8 +1177,6 @@ VGE_UNLOCK(sc); callout_drain(&sc->vge_watchdog); } - if (sc->vge_miibus) - device_delete_child(dev, sc->vge_miibus); bus_generic_detach(dev); if (sc->vge_intrhand) diff --git a/sys/dev/vr/if_vr.c b/sys/dev/vr/if_vr.c --- a/sys/dev/vr/if_vr.c +++ b/sys/dev/vr/if_vr.c @@ -838,8 +838,6 @@ taskqueue_drain(taskqueue_fast, &sc->vr_inttask); ether_ifdetach(ifp); } - if (sc->vr_miibus) - device_delete_child(dev, sc->vr_miibus); bus_generic_detach(dev); if (sc->vr_intrhand) diff --git a/sys/dev/vte/if_vte.c b/sys/dev/vte/if_vte.c --- a/sys/dev/vte/if_vte.c +++ b/sys/dev/vte/if_vte.c @@ -506,10 +506,6 @@ ether_ifdetach(ifp); } - if (sc->vte_miibus != NULL) { - device_delete_child(dev, sc->vte_miibus); - sc->vte_miibus = NULL; - } bus_generic_detach(dev); if (sc->vte_intrhand != NULL) { diff --git a/sys/dev/xl/if_xl.c b/sys/dev/xl/if_xl.c --- a/sys/dev/xl/if_xl.c +++ b/sys/dev/xl/if_xl.c @@ -1572,8 +1572,6 @@ callout_drain(&sc->xl_tick_callout); ether_ifdetach(ifp); } - if (sc->xl_miibus) - device_delete_child(dev, sc->xl_miibus); bus_generic_detach(dev); ifmedia_removeall(&sc->ifmedia);