diff -r 6a447a3138ef -r d03187805733 src/kern/freebsd/events.cc --- a/src/kern/freebsd/events.cc Tue Sep 01 15:28:45 2015 +0100 +++ b/src/kern/freebsd/events.cc Tue Sep 01 11:13:35 2015 -0500 @@ -65,7 +65,13 @@ SkipFuncEvent::process(tc); - PseudoInst::quiesceNs(tc, time); + // Currently, only ARM full-system simulation uses UDelayEvents to skip + // __delay and __loop_delay functions. One form involves setting quiesce + // time to 0 with the assumption that quiesce will not happen. To avoid + // the quiesce handling in this case, only execute the quiesce if time > 0. + if (time > 0) { + PseudoInst::quiesceNs(tc, time); + } } } // namespace FreeBSD diff -r 6a447a3138ef -r d03187805733 src/kern/linux/events.cc --- a/src/kern/linux/events.cc Tue Sep 01 15:28:45 2015 +0100 +++ b/src/kern/linux/events.cc Tue Sep 01 11:13:35 2015 -0500 @@ -85,7 +85,13 @@ SkipFuncEvent::process(tc); - PseudoInst::quiesceNs(tc, time); + // Currently, only ARM full-system simulation uses UDelayEvents to skip + // __delay and __loop_delay functions. One form involves setting quiesce + // time to 0 with the assumption that quiesce will not happen. To avoid + // the quiesce handling in this case, only execute the quiesce if time > 0. + if (time > 0) { + PseudoInst::quiesceNs(tc, time); + } }