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:
parent
8c76715979
commit
9a3533ec84
1 changed files with 2 additions and 2 deletions
|
@ -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())
|
||||
|
|
Loading…
Reference in a new issue