Re: git: 96a550e9dd89 - main - genet: Add a detach routine
Date: Sat, 02 Aug 2025 01:00:07 UTC
> On Aug 2, 2025, at 4:09 AM, John Baldwin <jhb@FreeBSD.org> wrote: > > The branch main has been updated by jhb: > > URL: https://cgit.FreeBSD.org/src/commit/?id=96a550e9dd892f24a479da00ead93fbfaafb7733 > > commit 96a550e9dd892f24a479da00ead93fbfaafb7733 > Author: John Baldwin <jhb@FreeBSD.org> > AuthorDate: 2025-08-01 20:07:30 +0000 > Commit: John Baldwin <jhb@FreeBSD.org> > CommitDate: 2025-08-01 20:07:30 +0000 > > genet: Add a detach routine > > PR: 288309 > Co-authored by: Mike Belanger <mibelanger@qnx.com> > MFC after: 2 weeks > --- > sys/arm64/broadcom/genet/if_genet.c | 35 +++++++++++++++++++++++++++++++++++ > 1 file changed, 35 insertions(+) > > diff --git a/sys/arm64/broadcom/genet/if_genet.c b/sys/arm64/broadcom/genet/if_genet.c > index 182b5582fb7c..013573f1551b 100644 > --- a/sys/arm64/broadcom/genet/if_genet.c > +++ b/sys/arm64/broadcom/genet/if_genet.c > @@ -201,6 +201,7 @@ struct gen_softc { > > static void gen_init(void *softc); > static void gen_start(if_t ifp); > +static void gen_stop(struct gen_softc *sc); > static void gen_destroy(struct gen_softc *sc); > static int gen_encap(struct gen_softc *sc, struct mbuf **mp); > static int gen_parse_tx(struct mbuf *m, int csum_flags); > @@ -379,6 +380,39 @@ gen_destroy(struct gen_softc *sc) > } > } > > +static int > +gen_detach(device_t dev) > +{ > + struct gen_softc *sc; > + int error; > + > + sc = device_get_softc(dev); > + ~~~~~~ > + GEN_LOCK(sc); > + gen_stop(sc); > + GEN_UNLOCK(sc); > + callout_drain(&sc->stat_ch); > + ether_ifdetach(sc->ifp); ~~~~~~ I guess the above logic want be wrapped by condition `device_is_attached(dev)` . > + > + /* Detach the miibus */ > + error = bus_generic_detach(dev); > + if (error != 0) > + return (error); > + > + /* clean up dma */ > + gen_bus_dma_teardown(sc); > + > + /* Release bus resources. */ > + bus_teardown_intr(sc->dev, sc->res[_RES_IRQ1], sc->ih); > + bus_teardown_intr(sc->dev, sc->res[_RES_IRQ2], sc->ih2); > + bus_release_resources(sc->dev, gen_spec, sc->res); > + > + if (sc->ifp != NULL) > + if_free(sc->ifp); > + mtx_destroy(&sc->mtx); > + return (0); > +} > + > static int > gen_get_phy_mode(device_t dev) > { > @@ -1805,6 +1839,7 @@ static device_method_t gen_methods[] = { > /* Device interface */ > DEVMETHOD(device_probe, gen_probe), > DEVMETHOD(device_attach, gen_attach), > + DEVMETHOD(device_detach, gen_detach), > > /* MII interface */ > DEVMETHOD(miibus_readreg, gen_miibus_readreg),