hi, bge(4) is the last driver in the tree that is willing to call if_link_state_change whenever, while others do so only when the link state does change.
there should be no real change in functionality. ok? diff --git sys/dev/pci/if_bge.c sys/dev/pci/if_bge.c index 5cd56e2..233ccab 100644 --- sys/dev/pci/if_bge.c +++ sys/dev/pci/if_bge.c @@ -4512,22 +4512,27 @@ bge_link_upd(struct bge_softc *sc) if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5704) BGE_CLRBIT(sc, BGE_MAC_MODE, BGE_MACMODE_TBI_SEND_CFGS); CSR_WRITE_4(sc, BGE_MAC_STS, 0xFFFFFFFF); status = CSR_READ_4(sc, BGE_MAC_MODE); - ifp->if_link_state = - (status & BGE_MACMODE_HALF_DUPLEX) ? + link = (status & BGE_MACMODE_HALF_DUPLEX) ? LINK_STATE_HALF_DUPLEX : LINK_STATE_FULL_DUPLEX; - if_link_state_change(ifp); ifp->if_baudrate = IF_Gbps(1); + if (ifp->if_link_state != link) { + ifp->if_link_state = link; + if_link_state_change(ifp); + } } } else if (BGE_STS_BIT(sc, BGE_STS_LINK)) { BGE_STS_CLRBIT(sc, BGE_STS_LINK); - ifp->if_link_state = LINK_STATE_DOWN; - if_link_state_change(ifp); + link = LINK_STATE_DOWN; ifp->if_baudrate = 0; + if (ifp->if_link_state != link) { + ifp->if_link_state = link; + if_link_state_change(ifp); + } } } else if (BGE_STS_BIT(sc, BGE_STS_AUTOPOLL)) { /* * Some broken BCM chips have BGE_STATFLAG_LINKSTATE_CHANGED bit * in status word always set. Workaround this bug by reading