⬢ DragonFlyBSD Kernel Audit
DF-4258 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/netif/my/if_my.c b/sys/dev/netif/my/if_my.c
index 1111111..2222222 100644
--- a/sys/dev/netif/my/if_my.c
+++ b/sys/dev/netif/my/if_my.c
@@ -373,10 +373,19 @@ my_autoneg_xmit(struct my_softc * sc)
 {
 	u_int16_t       phy_sts = 0;
+	int             i;
 
 	my_phy_writereg(sc, PHY_BMCR, PHY_BMCR_RESET);
 	DELAY(500);
-	while (my_phy_readreg(sc, PHY_BMCR) & PHY_BMCR_RESET);
+	for (i = 0; i < MY_TIMEOUT; i++) {
+		DELAY(10);
+		if (!(my_phy_readreg(sc, PHY_BMCR) & PHY_BMCR_RESET))
+			break;
+	}
+	if (i == MY_TIMEOUT)
+		kprintf("my%d: PHY reset never completed\n", sc->my_unit);
 
 	phy_sts = my_phy_readreg(sc, PHY_BMCR);
 	phy_sts |= PHY_BMCR_AUTONEGENBL | PHY_BMCR_AUTONEGRSTR;