From 9a3533ec843d8337e2181cc3ee2b92f78a17092c Mon Sep 17 00:00:00 2001 From: "Timothy M. Jones" Date: Thu, 22 Jul 2010 18:47:43 +0100 Subject: 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. --- src/cpu/o3/cpu.cc | 4 ++-- 1 file 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::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::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()) -- cgit v1.2.3