summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/kern/freebsd/events.cc8
-rw-r--r--src/kern/linux/events.cc8
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);
+ }
}