diff options
author | 2004-12-16 03:41:58 +0000 | |
---|---|---|
committer | 2004-12-16 03:41:58 +0000 | |
commit | 1759e43245c77d76163ef114a6482beb64ad60ee (patch) | |
tree | aa838e6dde25a3a92dc698f10654debf392576db | |
parent | - document IFS behavior changes (diff) | |
download | wireguard-openbsd-1759e43245c77d76163ef114a6482beb64ad60ee.tar.xz wireguard-openbsd-1759e43245c77d76163ef114a6482beb64ad60ee.zip |
Make sure ifp->if_baudrate is valid when the parent's statchg
callback is made.
From NetBSD
-rw-r--r-- | sys/dev/mii/mii_physubr.c | 30 | ||||
-rw-r--r-- | sys/dev/mii/miivar.h | 4 |
2 files changed, 19 insertions, 15 deletions
diff --git a/sys/dev/mii/mii_physubr.c b/sys/dev/mii/mii_physubr.c index f95da9ec7d0..d9e55b9c1fa 100644 --- a/sys/dev/mii/mii_physubr.c +++ b/sys/dev/mii/mii_physubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mii_physubr.c,v 1.23 2004/12/08 06:57:55 mcbride Exp $ */ +/* $OpenBSD: mii_physubr.c,v 1.24 2004/12/16 03:41:58 brad Exp $ */ /* $NetBSD: mii_physubr.c,v 1.20 2001/04/13 23:30:09 thorpej Exp $ */ /*- @@ -333,23 +333,35 @@ void mii_phy_update(struct mii_softc *sc, int cmd) { struct mii_data *mii = sc->mii_pdata; + struct ifnet *ifp = mii->mii_ifp; + int announce, s; if (sc->mii_media_active != mii->mii_media_active || sc->mii_media_status != mii->mii_media_status || cmd == MII_MEDIACHG) { + announce = mii_phy_statusmsg(sc); (*mii->mii_statchg)(sc->mii_dev.dv_parent); - mii_phy_statusmsg(sc); sc->mii_media_active = mii->mii_media_active; sc->mii_media_status = mii->mii_media_status; + + if (announce) { + s = splnet(); + rt_ifmsg(ifp); + splx(s); +#if NCARP > 0 + if (ifp->if_carp) + carp_carpdev_state(ifp); +#endif + } } } -void +int mii_phy_statusmsg(struct mii_softc *sc) { struct mii_data *mii = sc->mii_pdata; struct ifnet *ifp = mii->mii_ifp; - int s, baudrate, link_state, announce = 0; + int baudrate, link_state, announce = 0; if (mii->mii_media_status & IFM_AVALID) { if (mii->mii_media_status & IFM_ACTIVE) @@ -376,15 +388,7 @@ mii_phy_statusmsg(struct mii_softc *sc) announce = 1; } - if (announce) { - s = splnet(); - rt_ifmsg(ifp); - splx(s); -#if NCARP > 0 - if (ifp->if_carp) - carp_carpdev_state(ifp); -#endif - } + return (announce); } /* diff --git a/sys/dev/mii/miivar.h b/sys/dev/mii/miivar.h index ac1ccf09121..3bbe6e25e64 100644 --- a/sys/dev/mii/miivar.h +++ b/sys/dev/mii/miivar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: miivar.h,v 1.21 2004/11/18 16:15:33 brad Exp $ */ +/* $OpenBSD: miivar.h,v 1.22 2004/12/16 03:41:58 brad Exp $ */ /* $NetBSD: miivar.h,v 1.17 2000/03/06 20:56:57 thorpej Exp $ */ /*- @@ -257,7 +257,7 @@ int mii_phy_tick(struct mii_softc *); void mii_phy_status(struct mii_softc *); void mii_phy_update(struct mii_softc *, int); -void mii_phy_statusmsg(struct mii_softc *); +int mii_phy_statusmsg(struct mii_softc *); void ukphy_status(struct mii_softc *); |