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:
Andreas Sandberg
2013-01-07 13:05:44 -05:00
parent 4ae02295d5
commit 901258c22b
3 changed files with 8 additions and 4 deletions

View File

@@ -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();

View File

@@ -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());

View File

@@ -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.