summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbrad <brad@openbsd.org>2004-12-16 03:41:58 +0000
committerbrad <brad@openbsd.org>2004-12-16 03:41:58 +0000
commit1759e43245c77d76163ef114a6482beb64ad60ee (patch)
treeaa838e6dde25a3a92dc698f10654debf392576db
parent- document IFS behavior changes (diff)
downloadwireguard-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.c30
-rw-r--r--sys/dev/mii/miivar.h4
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 *);