⬢ DragonFlyBSD Kernel Audit
DF-3905 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/netif/sk/if_sk.c
+++ b/sys/dev/netif/sk/if_sk.c
@@ -516,13 +516,14 @@ sk_marv_miibus_writereg(struct sk_if_softc *sc_if, int phy, int reg, int val)
 
 	SK_YU_WRITE_2(sc_if, YUKON_SMIDR, val);
 	SK_YU_WRITE_2(sc_if, YUKON_SMICR, YU_SMICR_PHYAD(phy) |
 		      YU_SMICR_REGAD(reg) | YU_SMICR_OP_WRITE);
 
+	/* Wait until the SMI write completes (BUSY deasserts). */
 	for (i = 0; i < SK_TIMEOUT; i++) {
 		DELAY(1);
-		if (SK_YU_READ_2(sc_if, YUKON_SMICR) & YU_SMICR_BUSY)
+		if ((SK_YU_READ_2(sc_if, YUKON_SMICR) & YU_SMICR_BUSY) == 0)
 			break;
 	}
 
 	if (i == SK_TIMEOUT)
 		if_printf(&sc_if->arpcom.ac_if, "phy write timed out\n");