diff options
author | Timothy M. Jones <tjones1@inf.ed.ac.uk> | 2010-07-22 18:47:43 +0100 |
---|---|---|
committer | Timothy M. Jones <tjones1@inf.ed.ac.uk> | 2010-07-22 18:47:43 +0100 |
commit | 9a3533ec843d8337e2181cc3ee2b92f78a17092c (patch) | |
tree | 488c9c7b62a3b45c4d090c019646ca361cb5fb1b /src/cpu | |
parent | 8c76715979682cbf0e653128c253805a80c40269 (diff) | |
download | gem5-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')
-rw-r--r-- | src/cpu/o3/cpu.cc | 4 |
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()) |