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:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user