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.
This commit is contained in:
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user