diff --git a/sys/dev/misc/ipmi/ipmi_kcs.c b/sys/dev/misc/ipmi/ipmi_kcs.c --- a/sys/dev/misc/ipmi/ipmi_kcs.c +++ b/sys/dev/misc/ipmi/ipmi_kcs.c @@ -524,12 +524,15 @@ /* Wait for IBF = 0 */ status = INB(sc, KCS_CTL_STS); + { int _t = ticks + 6 * hz; while (status & KCS_STATUS_IBF) { + if (ticks > _t) goto to_abort; DELAY(100); status = INB(sc, KCS_CTL_STS); - } + } } OUTB(sc, KCS_CTL_STS, KCS_CONTROL_GET_STATUS_ABORT); +to_abort: /* Wait for IBF = 0 */ status = INB(sc, KCS_CTL_STS);