diff options
-rw-r--r-- | src/kern/freebsd/events.cc | 8 | ||||
-rw-r--r-- | src/kern/linux/events.cc | 8 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/kern/freebsd/events.cc b/src/kern/freebsd/events.cc index 2f4ceb056..15954d672 100644 --- a/src/kern/freebsd/events.cc +++ b/src/kern/freebsd/events.cc @@ -65,7 +65,13 @@ UDelayEvent::process(ThreadContext *tc) 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 --git a/src/kern/linux/events.cc b/src/kern/linux/events.cc index c8b53d848..42f058a72 100644 --- a/src/kern/linux/events.cc +++ b/src/kern/linux/events.cc @@ -85,7 +85,13 @@ UDelayEvent::process(ThreadContext *tc) 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); + } } |