=== sys/kern/kern_synch.c ================================================================== --- sys/kern/kern_synch.c (revision 254832) +++ sys/kern/kern_synch.c (local) @@ -356,11 +356,8 @@ int pause_sbt(const char *wmesg, sbintime_t sbt, sbintime_t pr, int flags) { - int sbt_sec; + KASSERT(sbt >= 0, ("pause: timeout must be >= 0")); - sbt_sec = sbintime_getsec(sbt); - KASSERT(sbt_sec >= 0, ("pause: timo must be >= 0")); - /* silently convert invalid timeouts */ if (sbt == 0) sbt = tick_sbt; @@ -370,11 +367,14 @@ * We delay one second at a time to avoid overflowing the * system specific DELAY() function(s): */ - while (sbt_sec > 0) { + while (sbt >= SBT_1S) { DELAY(1000000); - sbt_sec--; + sbt -= SBT_1S; } - DELAY((sbt & 0xffffffff) / SBT_1US); + /* Do the delay remainder */ + sbt /= SBT_1US; + if (sbt != 0) + DELAY(sbt); return (0); } return (_sleep(&pause_wchan[curcpu], NULL, 0, wmesg, sbt, pr, flags));