diff --git a/sys/dev/pci/if_bge.c b/sys/dev/pci/if_bge.c index a562b3ced56d..8d7b1c42ee33 100644 --- a/sys/dev/pci/if_bge.c +++ b/sys/dev/pci/if_bge.c @@ -3997,6 +3997,7 @@ bge_attach(device_t parent, device_t self, void *aux) mii_flags |= MIIF_HAVEFIBER; again: bge_asf_driver_up(sc); + mutex_enter(sc->sc_intr_lock); rv = bge_miibus_readreg(sc->bge_dev, sc->bge_phy_addr, MII_BMCR, &phyreg); if ((rv != 0) || ((phyreg & BMCR_PDOWN) != 0)) { @@ -4013,6 +4014,7 @@ again: DELAY(1000); } } + mutex_exit(sc->sc_intr_lock); mii_attach(sc->bge_dev, mii, capmask, sc->bge_phy_addr, MII_OFFSET_ANY, mii_flags); @@ -5682,7 +5684,9 @@ bge_init(struct ifnet *ifp) BGE_CLRBIT(sc, BGE_RX_MODE, BGE_RXMODE_RX_PROMISC); /* Program multicast filter. */ + mutex_enter(sc->sc_mcast_lock); bge_setmulti(sc); + mutex_exit(sc->sc_mcast_lock); /* Init RX ring. */ bge_init_rx_ring_std(sc);