summaryrefslogtreecommitdiff
path: root/src/cpu/o3/cpu.cc
diff options
context:
space:
mode:
authorTimothy M. Jones <tjones1@inf.ed.ac.uk>2010-07-22 18:47:43 +0100
committerTimothy M. Jones <tjones1@inf.ed.ac.uk>2010-07-22 18:47:43 +0100
commit9a3533ec843d8337e2181cc3ee2b92f78a17092c (patch)
tree488c9c7b62a3b45c4d090c019646ca361cb5fb1b /src/cpu/o3/cpu.cc
parent8c76715979682cbf0e653128c253805a80c40269 (diff)
downloadgem5-9a3533ec843d8337e2181cc3ee2b92f78a17092c.tar.xz
O3CPU: O3's tick event gets squashed when it is switched out. When repeatedly
switching between O3 and another CPU, O3's tick event might still be scheduled in the event queue (as squashed). Therefore, check for a squashed tick event as well as a non-scheduled event when taking over from another CPU and deal with it accordingly.
Diffstat (limited to 'src/cpu/o3/cpu.cc')
-rw-r--r--src/cpu/o3/cpu.cc4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/cpu/o3/cpu.cc b/src/cpu/o3/cpu.cc
index 2a4e0176a..49bfe88e3 100644
--- a/src/cpu/o3/cpu.cc
+++ b/src/cpu/o3/cpu.cc
@@ -1143,7 +1143,7 @@ FullO3CPU<Impl>::takeOverFrom(BaseCPU *oldCPU)
iew.takeOverFrom();
commit.takeOverFrom();
- assert(!tickEvent.scheduled());
+ assert(!tickEvent.scheduled() || tickEvent.squashed());
// @todo: Figure out how to properly select the tid to put onto
// the active threads list.
@@ -1168,7 +1168,7 @@ FullO3CPU<Impl>::takeOverFrom(BaseCPU *oldCPU)
ThreadContext *tc = threadContexts[i];
if (tc->status() == ThreadContext::Active && _status != Running) {
_status = Running;
- schedule(tickEvent, nextCycle());
+ reschedule(tickEvent, nextCycle(), true);
}
}
if (!tickEvent.scheduled())