> On Aug 2, 2025, at 4:09 AM, John Baldwin <j...@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 <j...@freebsd.org>
> AuthorDate: 2025-08-01 20:07:30 +0000
> Commit:     John Baldwin <j...@freebsd.org>
> CommitDate: 2025-08-01 20:07:30 +0000
> 
>    genet: Add a detach routine
> 
>    PR:             288309
>    Co-authored by: Mike Belanger <mibelan...@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),




Reply via email to