sim: Make the drain state a global typed enum

The drain state enum is currently a part of the Drainable
interface. The same state machine will be used by the DrainManager to
identify the global state of the simulator. Make the drain state a
global typed enum to better cater for this usage scenario.
This commit is contained in:
Andreas Sandberg
2015-07-07 09:51:04 +01:00
parent 1dc5e63b88
commit e9c3d59aae
27 changed files with 103 additions and 103 deletions

View File

@@ -217,7 +217,7 @@ void
MinorCPU::signalDrainDone()
{
DPRINTF(Drain, "MinorCPU drain done\n");
setDrainState(Drainable::Drained);
setDrainState(DrainState::Drained);
drainManager->signalDrainDone();
drainManager = NULL;
}
@@ -225,8 +225,8 @@ MinorCPU::signalDrainDone()
void
MinorCPU::drainResume()
{
assert(getDrainState() == Drainable::Drained ||
getDrainState() == Drainable::Running);
assert(getDrainState() == DrainState::Drained ||
getDrainState() == DrainState::Running);
if (switchedOut()) {
DPRINTF(Drain, "drainResume while switched out. Ignoring\n");
@@ -243,7 +243,7 @@ MinorCPU::drainResume()
wakeup();
pipeline->drainResume();
setDrainState(Drainable::Running);
setDrainState(DrainState::Running);
}
void

View File

@@ -539,7 +539,7 @@ FullO3CPU<Impl>::tick()
{
DPRINTF(O3CPU, "\n\nFullO3CPU: Ticking main, FullO3CPU.\n");
assert(!switchedOut());
assert(getDrainState() != Drainable::Drained);
assert(getDrainState() != DrainState::Drained);
++numCycles;
ppCycles->notify(1);
@@ -712,7 +712,7 @@ FullO3CPU<Impl>::activateContext(ThreadID tid)
// We don't want to wake the CPU if it is drained. In that case,
// we just want to flag the thread as active and schedule the tick
// event from drainResume() instead.
if (getDrainState() == Drainable::Drained)
if (getDrainState() == DrainState::Drained)
return;
// If we are time 0 or if the last activation time is in the past,
@@ -1004,12 +1004,12 @@ FullO3CPU<Impl>::drain(DrainManager *drain_manager)
{
// If the CPU isn't doing anything, then return immediately.
if (switchedOut()) {
setDrainState(Drainable::Drained);
setDrainState(DrainState::Drained);
return 0;
}
DPRINTF(Drain, "Draining...\n");
setDrainState(Drainable::Draining);
setDrainState(DrainState::Draining);
// We only need to signal a drain to the commit stage as this
// initiates squashing controls the draining. Once the commit
@@ -1031,7 +1031,7 @@ FullO3CPU<Impl>::drain(DrainManager *drain_manager)
return 1;
} else {
setDrainState(Drainable::Drained);
setDrainState(DrainState::Drained);
DPRINTF(Drain, "CPU is already drained\n");
if (tickEvent.scheduled())
deschedule(tickEvent);
@@ -1132,7 +1132,7 @@ template <class Impl>
void
FullO3CPU<Impl>::drainResume()
{
setDrainState(Drainable::Running);
setDrainState(DrainState::Running);
if (switchedOut())
return;

View File

@@ -336,7 +336,7 @@ class FullO3CPU : public BaseO3CPU
void updateThreadPriority();
/** Is the CPU draining? */
bool isDraining() const { return getDrainState() == Drainable::Draining; }
bool isDraining() const { return getDrainState() == DrainState::Draining; }
void serializeThread(CheckpointOut &cp,
ThreadID tid) const M5_ATTR_OVERRIDE;