cpu: Correctly call parent on switchOut() and takeOverFrom()
This patch cleans up the CPU switching functionality by making sure that CPU models consistently call the parent on switchOut() and takeOverFrom(). This has the following implications that might alter current functionality: * The call to BaseCPU::switchout() in the O3 CPU is moved from signalDrained() (!) to switchOut(). * A call to BaseSimpleCPU::switchOut() is introduced in the simple CPUs.
This commit is contained in:
@@ -1192,8 +1192,6 @@ FullO3CPU<Impl>::signalDrained()
|
||||
|
||||
setDrainState(Drainable::Drained);
|
||||
|
||||
BaseCPU::switchOut();
|
||||
|
||||
if (drainManager) {
|
||||
DPRINTF(Drain, "CPU done draining, processing drain event\n");
|
||||
drainManager->signalDrainDone();
|
||||
@@ -1207,6 +1205,8 @@ template <class Impl>
|
||||
void
|
||||
FullO3CPU<Impl>::switchOut()
|
||||
{
|
||||
BaseCPU::switchOut();
|
||||
|
||||
fetch.switchOut();
|
||||
rename.switchOut();
|
||||
iew.switchOut();
|
||||
|
||||
@@ -177,6 +177,8 @@ AtomicSimpleCPU::drainResume()
|
||||
void
|
||||
AtomicSimpleCPU::switchOut()
|
||||
{
|
||||
BaseSimpleCPU::switchOut();
|
||||
|
||||
assert(_status == BaseSimpleCPU::Running || _status == Idle);
|
||||
_status = SwitchedOut;
|
||||
|
||||
@@ -187,7 +189,7 @@ AtomicSimpleCPU::switchOut()
|
||||
void
|
||||
AtomicSimpleCPU::takeOverFrom(BaseCPU *oldCPU)
|
||||
{
|
||||
BaseCPU::takeOverFrom(oldCPU);
|
||||
BaseSimpleCPU::takeOverFrom(oldCPU);
|
||||
|
||||
assert(!tickEvent.scheduled());
|
||||
|
||||
|
||||
@@ -163,6 +163,8 @@ TimingSimpleCPU::drainResume()
|
||||
void
|
||||
TimingSimpleCPU::switchOut()
|
||||
{
|
||||
BaseSimpleCPU::switchOut();
|
||||
|
||||
assert(_status == BaseSimpleCPU::Running || _status == Idle);
|
||||
_status = SwitchedOut;
|
||||
numCycles += curCycle() - previousCycle;
|
||||
@@ -177,7 +179,7 @@ TimingSimpleCPU::switchOut()
|
||||
void
|
||||
TimingSimpleCPU::takeOverFrom(BaseCPU *oldCPU)
|
||||
{
|
||||
BaseCPU::takeOverFrom(oldCPU);
|
||||
BaseSimpleCPU::takeOverFrom(oldCPU);
|
||||
|
||||
// if any of this CPU's ThreadContexts are active, mark the CPU as
|
||||
// running and schedule its tick event.
|
||||
|
||||
Reference in New Issue
Block a user