summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjlemon <jlemon@FreeBSD.org>2001-09-29 19:28:31 +0000
committerjlemon <jlemon@FreeBSD.org>2001-09-29 19:28:31 +0000
commit7265fc9a25abf1e7ce5c2f861868d50ff0cb7ac7 (patch)
tree059d83b39e680ff22f9e9aee5eb54410ca5ecbe3
parent7ec889372d0e5b4a87c80ff2e066f5c6419b2b28 (diff)
downloadFreeBSD-src-7265fc9a25abf1e7ce5c2f861868d50ff0cb7ac7.zip
FreeBSD-src-7265fc9a25abf1e7ce5c2f861868d50ff0cb7ac7.tar.gz
Do not call mii_pollstat() from within device tick routines; the status
information is updated by mii_tick(). Pointed out by: wpaul (a while back)
-rw-r--r--sys/dev/dc/if_dc.c13
-rw-r--r--sys/dev/sf/if_sf.c13
-rw-r--r--sys/dev/sk/if_sk.c2
-rw-r--r--sys/pci/if_dc.c13
-rw-r--r--sys/pci/if_pcn.c14
-rw-r--r--sys/pci/if_sf.c13
-rw-r--r--sys/pci/if_sis.c12
-rw-r--r--sys/pci/if_sk.c2
-rw-r--r--sys/pci/if_ste.c12
9 files changed, 39 insertions, 55 deletions
diff --git a/sys/dev/dc/if_dc.c b/sys/dev/dc/if_dc.c
index 8cf4276..0d22729 100644
--- a/sys/dev/dc/if_dc.c
+++ b/sys/dev/dc/if_dc.c
@@ -2708,14 +2708,11 @@ static void dc_tick(xsc)
* that time, packets will stay in the send queue, and once the
* link comes up, they will be flushed out to the wire.
*/
- if (!sc->dc_link) {
- mii_pollstat(mii);
- if (mii->mii_media_status & IFM_ACTIVE &&
- IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
- sc->dc_link++;
- if (ifp->if_snd.ifq_head != NULL)
- dc_start(ifp);
- }
+ if (!sc->dc_link && mii->mii_media_status & IFM_ACTIVE &&
+ IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
+ sc->dc_link++;
+ if (ifp->if_snd.ifq_head != NULL)
+ dc_start(ifp);
}
if (sc->dc_flags & DC_21143_NWAY && !sc->dc_link)
diff --git a/sys/dev/sf/if_sf.c b/sys/dev/sf/if_sf.c
index c0c05d5..487b48f 100644
--- a/sys/dev/sf/if_sf.c
+++ b/sys/dev/sf/if_sf.c
@@ -1489,13 +1489,12 @@ static void sf_stats_update(xsc)
stats.sf_tx_multi_colls + stats.sf_tx_excess_colls;
mii_tick(mii);
- if (!sc->sf_link) {
- mii_pollstat(mii);
- if (mii->mii_media_status & IFM_ACTIVE &&
- IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE)
- sc->sf_link++;
- if (ifp->if_snd.ifq_head != NULL)
- sf_start(ifp);
+
+ if (!sc->sf_link && mii->mii_media_status & IFM_ACTIVE &&
+ IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
+ sc->sf_link++;
+ if (ifp->if_snd.ifq_head != NULL)
+ sf_start(ifp);
}
sc->sf_stat_ch = timeout(sf_stats_update, sc, hz);
diff --git a/sys/dev/sk/if_sk.c b/sys/dev/sk/if_sk.c
index 9c842d5..8604209 100644
--- a/sys/dev/sk/if_sk.c
+++ b/sys/dev/sk/if_sk.c
@@ -1691,7 +1691,6 @@ static void sk_tick(xsc_if)
SK_XM_CLRBIT_2(sc_if, XM_IMR, XM_IMR_GP0_SET);
SK_XM_READ_2(sc_if, XM_ISR);
mii_tick(mii);
- mii_pollstat(mii);
untimeout(sk_tick, sc_if, sc_if->sk_tick_ch);
SK_IF_UNLOCK(sc_if);
@@ -1744,7 +1743,6 @@ static void sk_intr_bcom(sc_if)
SK_IF_WRITE_1(sc_if, 0, SK_LINKLED1_CTL,
SK_LINKLED_ON|SK_LINKLED_LINKSYNC_OFF|
SK_LINKLED_BLINK_OFF);
- mii_pollstat(mii);
} else {
mii_tick(mii);
sc_if->sk_tick_ch = timeout(sk_tick, sc_if, hz);
diff --git a/sys/pci/if_dc.c b/sys/pci/if_dc.c
index 8cf4276..0d22729 100644
--- a/sys/pci/if_dc.c
+++ b/sys/pci/if_dc.c
@@ -2708,14 +2708,11 @@ static void dc_tick(xsc)
* that time, packets will stay in the send queue, and once the
* link comes up, they will be flushed out to the wire.
*/
- if (!sc->dc_link) {
- mii_pollstat(mii);
- if (mii->mii_media_status & IFM_ACTIVE &&
- IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
- sc->dc_link++;
- if (ifp->if_snd.ifq_head != NULL)
- dc_start(ifp);
- }
+ if (!sc->dc_link && mii->mii_media_status & IFM_ACTIVE &&
+ IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
+ sc->dc_link++;
+ if (ifp->if_snd.ifq_head != NULL)
+ dc_start(ifp);
}
if (sc->dc_flags & DC_21143_NWAY && !sc->dc_link)
diff --git a/sys/pci/if_pcn.c b/sys/pci/if_pcn.c
index 1dd388b..580f5e9 100644
--- a/sys/pci/if_pcn.c
+++ b/sys/pci/if_pcn.c
@@ -927,16 +927,16 @@ static void pcn_tick(xsc)
mii = device_get_softc(sc->pcn_miibus);
mii_tick(mii);
+ /* link just died */
if (sc->pcn_link & !(mii->mii_media_status & IFM_ACTIVE))
sc->pcn_link = 0;
- if (!sc->pcn_link) {
- mii_pollstat(mii);
- if (mii->mii_media_status & IFM_ACTIVE &&
- IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE)
- sc->pcn_link++;
- if (ifp->if_snd.ifq_head != NULL)
- pcn_start(ifp);
+ /* link just came up, restart */
+ if (!sc->pcn_link && mii->mii_media_status & IFM_ACTIVE &&
+ IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
+ sc->pcn_link++;
+ if (ifp->if_snd.ifq_head != NULL)
+ pcn_start(ifp);
}
sc->pcn_stat_ch = timeout(pcn_tick, sc, hz);
diff --git a/sys/pci/if_sf.c b/sys/pci/if_sf.c
index c0c05d5..487b48f 100644
--- a/sys/pci/if_sf.c
+++ b/sys/pci/if_sf.c
@@ -1489,13 +1489,12 @@ static void sf_stats_update(xsc)
stats.sf_tx_multi_colls + stats.sf_tx_excess_colls;
mii_tick(mii);
- if (!sc->sf_link) {
- mii_pollstat(mii);
- if (mii->mii_media_status & IFM_ACTIVE &&
- IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE)
- sc->sf_link++;
- if (ifp->if_snd.ifq_head != NULL)
- sf_start(ifp);
+
+ if (!sc->sf_link && mii->mii_media_status & IFM_ACTIVE &&
+ IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
+ sc->sf_link++;
+ if (ifp->if_snd.ifq_head != NULL)
+ sf_start(ifp);
}
sc->sf_stat_ch = timeout(sf_stats_update, sc, hz);
diff --git a/sys/pci/if_sis.c b/sys/pci/if_sis.c
index 0e4f0fe..19f6d32 100644
--- a/sys/pci/if_sis.c
+++ b/sys/pci/if_sis.c
@@ -1417,13 +1417,11 @@ static void sis_tick(xsc)
mii = device_get_softc(sc->sis_miibus);
mii_tick(mii);
- if (!sc->sis_link) {
- mii_pollstat(mii);
- if (mii->mii_media_status & IFM_ACTIVE &&
- IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE)
- sc->sis_link++;
- if (ifp->if_snd.ifq_head != NULL)
- sis_start(ifp);
+ if (!sc->sis_link && mii->mii_media_status & IFM_ACTIVE &&
+ IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
+ sc->sis_link++;
+ if (ifp->if_snd.ifq_head != NULL)
+ sis_start(ifp);
}
sc->sis_stat_ch = timeout(sis_tick, sc, hz);
diff --git a/sys/pci/if_sk.c b/sys/pci/if_sk.c
index 9c842d5..8604209 100644
--- a/sys/pci/if_sk.c
+++ b/sys/pci/if_sk.c
@@ -1691,7 +1691,6 @@ static void sk_tick(xsc_if)
SK_XM_CLRBIT_2(sc_if, XM_IMR, XM_IMR_GP0_SET);
SK_XM_READ_2(sc_if, XM_ISR);
mii_tick(mii);
- mii_pollstat(mii);
untimeout(sk_tick, sc_if, sc_if->sk_tick_ch);
SK_IF_UNLOCK(sc_if);
@@ -1744,7 +1743,6 @@ static void sk_intr_bcom(sc_if)
SK_IF_WRITE_1(sc_if, 0, SK_LINKLED1_CTL,
SK_LINKLED_ON|SK_LINKLED_LINKSYNC_OFF|
SK_LINKLED_BLINK_OFF);
- mii_pollstat(mii);
} else {
mii_tick(mii);
sc_if->sk_tick_ch = timeout(sk_tick, sc_if, hz);
diff --git a/sys/pci/if_ste.c b/sys/pci/if_ste.c
index b68ccdd..554b070 100644
--- a/sys/pci/if_ste.c
+++ b/sys/pci/if_ste.c
@@ -864,13 +864,11 @@ static void ste_stats_update(xsc)
stats.ste_multi_colls + stats.ste_late_colls;
mii_tick(mii);
- if (!sc->ste_link) {
- mii_pollstat(mii);
- if (mii->mii_media_status & IFM_ACTIVE &&
- IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE)
- sc->ste_link++;
- if (ifp->if_snd.ifq_head != NULL)
- ste_start(ifp);
+ if (!sc->ste_link && mii->mii_media_status & IFM_ACTIVE &&
+ IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
+ sc->ste_link++;
+ if (ifp->if_snd.ifq_head != NULL)
+ ste_start(ifp);
}
sc->ste_stat_ch = timeout(ste_stats_update, sc, hz);
OpenPOWER on IntegriCloud