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)
This commit is contained in:
parent
896bddb546
commit
cd62a9cb38
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user