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:
4
src/mem/cache/base.cc
vendored
4
src/mem/cache/base.cc
vendored
@@ -783,12 +783,12 @@ BaseCache::drain(DrainManager *dm)
|
||||
|
||||
// Set status
|
||||
if (count != 0) {
|
||||
setDrainState(Drainable::Draining);
|
||||
setDrainState(DrainState::Draining);
|
||||
DPRINTF(Drain, "Cache not drained\n");
|
||||
return count;
|
||||
}
|
||||
|
||||
setDrainState(Drainable::Drained);
|
||||
setDrainState(DrainState::Drained);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
6
src/mem/cache/mshr_queue.cc
vendored
6
src/mem/cache/mshr_queue.cc
vendored
@@ -186,7 +186,7 @@ MSHRQueue::deallocateOne(MSHR *mshr)
|
||||
DPRINTF(Drain, "MSHRQueue now empty, signalling drained\n");
|
||||
drainManager->signalDrainDone();
|
||||
drainManager = NULL;
|
||||
setDrainState(Drainable::Drained);
|
||||
setDrainState(DrainState::Drained);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
@@ -269,11 +269,11 @@ unsigned int
|
||||
MSHRQueue::drain(DrainManager *dm)
|
||||
{
|
||||
if (allocated == 0) {
|
||||
setDrainState(Drainable::Drained);
|
||||
setDrainState(DrainState::Drained);
|
||||
return 0;
|
||||
} else {
|
||||
drainManager = dm;
|
||||
setDrainState(Drainable::Draining);
|
||||
setDrainState(DrainState::Draining);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2189,9 +2189,9 @@ DRAMCtrl::drain(DrainManager *dm)
|
||||
}
|
||||
|
||||
if (count)
|
||||
setDrainState(Drainable::Draining);
|
||||
setDrainState(DrainState::Draining);
|
||||
else
|
||||
setDrainState(Drainable::Drained);
|
||||
setDrainState(DrainState::Drained);
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
@@ -362,11 +362,11 @@ DRAMSim2::drain(DrainManager* dm)
|
||||
// check our outstanding reads and writes and if any they need to
|
||||
// drain
|
||||
if (nbrOutstanding() != 0) {
|
||||
setDrainState(Drainable::Draining);
|
||||
setDrainState(DrainState::Draining);
|
||||
drainManager = dm;
|
||||
return 1;
|
||||
} else {
|
||||
setDrainState(Drainable::Drained);
|
||||
setDrainState(DrainState::Drained);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -192,12 +192,12 @@ DMASequencer::drain(DrainManager *dm)
|
||||
drainManager = dm;
|
||||
|
||||
DPRINTF(Drain, "DMASequencer not drained\n");
|
||||
setDrainState(Drainable::Draining);
|
||||
setDrainState(DrainState::Draining);
|
||||
return child_drain_count + 1;
|
||||
}
|
||||
|
||||
drainManager = NULL;
|
||||
setDrainState(Drainable::Drained);
|
||||
setDrainState(DrainState::Drained);
|
||||
return child_drain_count;
|
||||
}
|
||||
|
||||
|
||||
@@ -449,12 +449,12 @@ RubyPort::drain(DrainManager *dm)
|
||||
drainManager = dm;
|
||||
|
||||
DPRINTF(Drain, "RubyPort not drained\n");
|
||||
setDrainState(Drainable::Draining);
|
||||
setDrainState(DrainState::Draining);
|
||||
return child_drain_count + 1;
|
||||
}
|
||||
|
||||
drainManager = NULL;
|
||||
setDrainState(Drainable::Drained);
|
||||
setDrainState(DrainState::Drained);
|
||||
return child_drain_count;
|
||||
}
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ Sequencer::~Sequencer()
|
||||
void
|
||||
Sequencer::wakeup()
|
||||
{
|
||||
assert(getDrainState() != Drainable::Draining);
|
||||
assert(getDrainState() != DrainState::Draining);
|
||||
|
||||
// Check for deadlock of any of the requests
|
||||
Cycles current_time = curCycle();
|
||||
@@ -215,7 +215,7 @@ Sequencer::insertRequest(PacketPtr pkt, RubyRequestType request_type)
|
||||
|
||||
// See if we should schedule a deadlock check
|
||||
if (!deadlockCheckEvent.scheduled() &&
|
||||
getDrainState() != Drainable::Draining) {
|
||||
getDrainState() != DrainState::Draining) {
|
||||
schedule(deadlockCheckEvent, clockEdge(m_deadlock_threshold));
|
||||
}
|
||||
|
||||
|
||||
@@ -246,9 +246,9 @@ SimpleMemory::drain(DrainManager *dm)
|
||||
}
|
||||
|
||||
if (count)
|
||||
setDrainState(Drainable::Draining);
|
||||
setDrainState(DrainState::Draining);
|
||||
else
|
||||
setDrainState(Drainable::Drained);
|
||||
setDrainState(DrainState::Drained);
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user