diff -r 996b20e55386 -r b60bc9acc340 src/sim/system.cc --- a/src/sim/system.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/sim/system.cc Mon Jun 08 12:25:11 2015 +0100 @@ -191,7 +191,7 @@ void System::setMemoryMode(Enums::MemoryMode mode) { - assert(getDrainState() == Drainable::Drained); + assert(getDrainState() == DrainState::Drained); memoryMode = mode; } @@ -358,7 +358,7 @@ unsigned int System::drain(DrainManager *dm) { - setDrainState(Drainable::Drained); + setDrainState(DrainState::Drained); return 0; } diff -r 996b20e55386 -r b60bc9acc340 src/mem/simple_mem.cc --- a/src/mem/simple_mem.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/mem/simple_mem.cc Mon Jun 08 12:25:11 2015 +0100 @@ -246,9 +246,9 @@ } if (count) - setDrainState(Drainable::Draining); + setDrainState(DrainState::Draining); else - setDrainState(Drainable::Drained); + setDrainState(DrainState::Drained); return count; } diff -r 996b20e55386 -r b60bc9acc340 src/sim/drain.hh --- a/src/sim/drain.hh Mon Jun 08 12:23:44 2015 +0100 +++ b/src/sim/drain.hh Mon Jun 08 12:25:11 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012 ARM Limited + * Copyright (c) 2012, 2015 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -45,7 +45,33 @@ #include "base/flags.hh" -class Event; +class Drainable; + +#ifndef SWIG // SWIG doesn't support strongly typed enums +/** + * Object drain/handover states + * + * An object starts out in the Running state. When the simulator + * prepares to take a snapshot or prepares a CPU for handover, it + * calls the drain() method to transfer the object into the Draining + * or Drained state. If any object enters the Draining state + * (Drainable::drain() returning >0), simulation continues until it + * all objects have entered the Drained state. + * + * Before resuming simulation, the simulator calls resume() to + * transfer the object to the Running state. + * + * \note Even though the state of an object (visible to the rest of + * the world through Drainable::getState()) could be used to determine + * if all objects have entered the Drained state, the protocol is + * actually a bit more elaborate. See Drainable::drain() for details. + */ +enum class DrainState { + Running, /** Running normally */ + Draining, /** Draining buffers pending serialization/handover */ + Drained /** Buffers drained, ready for serialization/handover */ +}; +#endif /** * This class coordinates draining of a System. @@ -141,30 +167,6 @@ class Drainable { public: - /** - * Object drain/handover states - * - * An object starts out in the Running state. When the simulator - * prepares to take a snapshot or prepares a CPU for handover, it - * calls the drain() method to transfer the object into the - * Draining or Drained state. If any object enters the Draining - * state (drain() returning >0), simulation continues until it all - * objects have entered the Drained state. - * - * Before resuming simulation, the simulator calls resume() to - * transfer the object to the Running state. - * - * \note Even though the state of an object (visible to the rest - * of the world through getState()) could be used to determine if - * all objects have entered the Drained state, the protocol is - * actually a bit more elaborate. See drain() for details. - */ - enum State { - Running, /** Running normally */ - Draining, /** Draining buffers pending serialization/handover */ - Drained /** Buffers drained, ready for serialization/handover */ - }; - Drainable(); virtual ~Drainable(); @@ -225,15 +227,13 @@ */ virtual void memInvalidate() {}; - State getDrainState() const { return _drainState; } + DrainState getDrainState() const { return _drainState; } protected: - void setDrainState(State new_state) { _drainState = new_state; } - + void setDrainState(DrainState new_state) { _drainState = new_state; } private: - State _drainState; - + DrainState _drainState; }; DrainManager *createDrainManager(); diff -r 996b20e55386 -r b60bc9acc340 src/sim/drain.cc --- a/src/sim/drain.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/sim/drain.cc Mon Jun 08 12:25:11 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012 ARM Limited + * Copyright (c) 2012, 2015 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -58,7 +58,7 @@ Drainable::Drainable() - : _drainState(Running) + : _drainState(DrainState::Running) { } @@ -69,5 +69,5 @@ void Drainable::drainResume() { - _drainState = Running; + _drainState = DrainState::Running; } diff -r 996b20e55386 -r b60bc9acc340 src/sim/sim_object.cc --- a/src/sim/sim_object.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/sim/sim_object.cc Mon Jun 08 12:25:11 2015 +0100 @@ -183,7 +183,7 @@ unsigned int SimObject::drain(DrainManager *drain_manager) { - setDrainState(Drained); + setDrainState(DrainState::Drained); return 0; } diff -r 996b20e55386 -r b60bc9acc340 src/arch/arm/table_walker.cc --- a/src/arch/arm/table_walker.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/arch/arm/table_walker.cc Mon Jun 08 12:25:11 2015 +0100 @@ -138,7 +138,7 @@ { if (drainManager && stateQueues[L1].empty() && stateQueues[L2].empty() && pendingQueue.empty()) { - setDrainState(Drainable::Drained); + setDrainState(DrainState::Drained); DPRINTF(Drain, "TableWalker done draining, processing drain event\n"); drainManager->signalDrainDone(); drainManager = NULL; @@ -159,13 +159,13 @@ if (state_queues_not_empty || pendingQueue.size()) { drainManager = dm; - setDrainState(Drainable::Draining); + setDrainState(DrainState::Draining); DPRINTF(Drain, "TableWalker not drained\n"); // return port drain count plus the table walker itself needs to drain return 1; } else { - setDrainState(Drainable::Drained); + setDrainState(DrainState::Drained); DPRINTF(Drain, "TableWalker free, no need to drain\n"); // table walker is drained, but its ports may still need to be drained diff -r 996b20e55386 -r b60bc9acc340 src/cpu/minor/cpu.cc --- a/src/cpu/minor/cpu.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/cpu/minor/cpu.cc Mon Jun 08 12:25:11 2015 +0100 @@ -217,7 +217,7 @@ MinorCPU::signalDrainDone() { DPRINTF(Drain, "MinorCPU drain done\n"); - setDrainState(Drainable::Drained); + setDrainState(DrainState::Drained); drainManager->signalDrainDone(); drainManager = NULL; } @@ -225,8 +225,8 @@ 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 @@ wakeup(); pipeline->drainResume(); - setDrainState(Drainable::Running); + setDrainState(DrainState::Running); } void diff -r 996b20e55386 -r b60bc9acc340 src/cpu/o3/cpu.hh --- a/src/cpu/o3/cpu.hh Mon Jun 08 12:23:44 2015 +0100 +++ b/src/cpu/o3/cpu.hh Mon Jun 08 12:25:11 2015 +0100 @@ -336,7 +336,7 @@ 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; diff -r 996b20e55386 -r b60bc9acc340 src/cpu/o3/cpu.cc --- a/src/cpu/o3/cpu.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/cpu/o3/cpu.cc Mon Jun 08 12:25:11 2015 +0100 @@ -539,7 +539,7 @@ { 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 @@ // 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 @@ { // 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 @@ 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 @@ void FullO3CPU::drainResume() { - setDrainState(Drainable::Running); + setDrainState(DrainState::Running); if (switchedOut()) return; diff -r 996b20e55386 -r b60bc9acc340 src/dev/arm/flash_device.cc --- a/src/dev/arm/flash_device.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/dev/arm/flash_device.cc Mon Jun 08 12:25:11 2015 +0100 @@ -601,10 +601,10 @@ if (count) { DPRINTF(Drain, "Flash device is draining...\n"); - setDrainState(Drainable::Draining); + setDrainState(DrainState::Draining); } else { DPRINTF(Drain, "Flash device drained\n"); - setDrainState(Drainable::Drained); + setDrainState(DrainState::Drained); } return count; } diff -r 996b20e55386 -r b60bc9acc340 src/dev/arm/ufs_device.cc --- a/src/dev/arm/ufs_device.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/dev/arm/ufs_device.cc Mon Jun 08 12:25:11 2015 +0100 @@ -2333,10 +2333,10 @@ if (count) { DPRINTF(UFSHostDevice, "UFSDevice is draining...\n"); - setDrainState(Drainable::Draining); + setDrainState(DrainState::Draining); } else { DPRINTF(UFSHostDevice, "UFSDevice drained\n"); - setDrainState(Drainable::Drained); + setDrainState(DrainState::Drained); } return count; } diff -r 996b20e55386 -r b60bc9acc340 src/dev/copy_engine.cc --- a/src/dev/copy_engine.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/dev/copy_engine.cc Mon Jun 08 12:25:11 2015 +0100 @@ -140,12 +140,12 @@ cr.status.dma_transfer_status(0); nextState = DescriptorFetch; fetchAddress = cr.descChainAddr; - if (ce->getDrainState() == Drainable::Running) + if (ce->getDrainState() == DrainState::Running) fetchDescriptor(cr.descChainAddr); } else if (cr.command.append_dma()) { if (!busy) { nextState = AddressFetch; - if (ce->getDrainState() == Drainable::Running) + if (ce->getDrainState() == DrainState::Running) fetchNextAddr(lastDescriptorAddr); } else refreshNext = true; @@ -635,20 +635,20 @@ bool CopyEngine::CopyEngineChannel::inDrain() { - if (ce->getDrainState() == Drainable::Draining) { + if (ce->getDrainState() == DrainState::Draining) { DPRINTF(Drain, "CopyEngine done draining, processing drain event\n"); assert(drainManager); drainManager->signalDrainDone(); drainManager = NULL; } - return ce->getDrainState() != Drainable::Running; + return ce->getDrainState() != DrainState::Running; } unsigned int CopyEngine::CopyEngineChannel::drain(DrainManager *dm) { - if (nextState == Idle || ce->getDrainState() != Drainable::Running) + if (nextState == Idle || ce->getDrainState() != DrainState::Running) return 0; unsigned int count = 1; count += cePort.drain(dm); @@ -667,9 +667,9 @@ count += chan[x]->drain(dm); if (count) - setDrainState(Draining); + setDrainState(DrainState::Draining); else - setDrainState(Drained); + setDrainState(DrainState::Drained); DPRINTF(Drain, "CopyEngine not drained\n"); return count; diff -r 996b20e55386 -r b60bc9acc340 src/dev/dma_device.cc --- a/src/dev/dma_device.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/dev/dma_device.cc Mon Jun 08 12:25:11 2015 +0100 @@ -130,9 +130,9 @@ { unsigned int count = pioPort.drain(dm) + dmaPort.drain(dm); if (count) - setDrainState(Drainable::Draining); + setDrainState(DrainState::Draining); else - setDrainState(Drainable::Drained); + setDrainState(DrainState::Drained); return count; } diff -r 996b20e55386 -r b60bc9acc340 src/dev/i8254xGBe.hh --- a/src/dev/i8254xGBe.hh Mon Jun 08 12:23:44 2015 +0100 +++ b/src/dev/i8254xGBe.hh Mon Jun 08 12:25:11 2015 +0100 @@ -352,7 +352,7 @@ virtual void updateHead(long h) { igbe->regs.rdh(h); } virtual void enableSm(); virtual void fetchAfterWb() { - if (!igbe->rxTick && igbe->getDrainState() == Drainable::Running) + if (!igbe->rxTick && igbe->getDrainState() == DrainState::Running) fetchDescriptors(); } @@ -414,7 +414,7 @@ virtual void enableSm(); virtual void actionAfterWb(); virtual void fetchAfterWb() { - if (!igbe->txTick && igbe->getDrainState() == Drainable::Running) + if (!igbe->txTick && igbe->getDrainState() == DrainState::Running) fetchDescriptors(); } diff -r 996b20e55386 -r b60bc9acc340 src/dev/i8254xGBe.cc --- a/src/dev/i8254xGBe.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/dev/i8254xGBe.cc Mon Jun 08 12:25:11 2015 +0100 @@ -586,7 +586,7 @@ case REG_RDT: regs.rdt = val; DPRINTF(EthernetSM, "RXS: RDT Updated.\n"); - if (getDrainState() == Drainable::Running) { + if (getDrainState() == DrainState::Running) { DPRINTF(EthernetSM, "RXS: RDT Fetching Descriptors!\n"); rxDescCache.fetchDescriptors(); } else { @@ -626,7 +626,7 @@ case REG_TDT: regs.tdt = val; DPRINTF(EthernetSM, "TXS: TX Tail pointer updated\n"); - if (getDrainState() == Drainable::Running) { + if (getDrainState() == DrainState::Running) { DPRINTF(EthernetSM, "TXS: TDT Fetching Descriptors!\n"); txDescCache.fetchDescriptors(); } else { @@ -905,7 +905,7 @@ IGbE::DescCache::writeback1() { // If we're draining delay issuing this DMA - if (igbe->getDrainState() != Drainable::Running) { + if (igbe->getDrainState() != DrainState::Running) { igbe->schedule(wbDelayEvent, curTick() + igbe->wbDelay); return; } @@ -986,7 +986,7 @@ IGbE::DescCache::fetchDescriptors1() { // If we're draining delay issuing this DMA - if (igbe->getDrainState() != Drainable::Running) { + if (igbe->getDrainState() != DrainState::Running) { igbe->schedule(fetchDelayEvent, curTick() + igbe->fetchDelay); return; } @@ -2051,7 +2051,7 @@ IGbE::restartClock() { if (!tickEvent.scheduled() && (rxTick || txTick || txFifoTick) && - getDrainState() == Drainable::Running) + getDrainState() == DrainState::Running) schedule(tickEvent, clockEdge(Cycles(1))); } @@ -2075,9 +2075,9 @@ if (count) { DPRINTF(Drain, "IGbE not drained\n"); - setDrainState(Drainable::Draining); + setDrainState(DrainState::Draining); } else - setDrainState(Drainable::Drained); + setDrainState(DrainState::Drained); return count; } diff -r 996b20e55386 -r b60bc9acc340 src/dev/ide_disk.cc --- a/src/dev/ide_disk.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/dev/ide_disk.cc Mon Jun 08 12:25:11 2015 +0100 @@ -342,7 +342,7 @@ panic("Inconsistent DMA transfer state: dmaState = %d devState = %d\n", dmaState, devState); - if (ctrl->dmaPending() || ctrl->getDrainState() != Drainable::Running) { + if (ctrl->dmaPending() || ctrl->getDrainState() != DrainState::Running) { schedule(dmaTransferEvent, curTick() + DMA_BACKOFF_PERIOD); return; } else @@ -436,7 +436,7 @@ curPrd.getByteCount(), TheISA::PageBytes); } - if (ctrl->dmaPending() || ctrl->getDrainState() != Drainable::Running) { + if (ctrl->dmaPending() || ctrl->getDrainState() != DrainState::Running) { schedule(dmaReadWaitEvent, curTick() + DMA_BACKOFF_PERIOD); return; } else if (!dmaReadCG->done()) { @@ -518,7 +518,7 @@ dmaWriteCG = new ChunkGenerator(curPrd.getBaseAddr(), curPrd.getByteCount(), TheISA::PageBytes); } - if (ctrl->dmaPending() || ctrl->getDrainState() != Drainable::Running) { + if (ctrl->dmaPending() || ctrl->getDrainState() != DrainState::Running) { schedule(dmaWriteWaitEvent, curTick() + DMA_BACKOFF_PERIOD); DPRINTF(IdeDisk, "doDmaWrite: rescheduling\n"); return; diff -r 996b20e55386 -r b60bc9acc340 src/dev/io_device.cc --- a/src/dev/io_device.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/dev/io_device.cc Mon Jun 08 12:25:11 2015 +0100 @@ -99,9 +99,9 @@ unsigned int count; count = pioPort.drain(dm); if (count) - setDrainState(Drainable::Draining); + setDrainState(DrainState::Draining); else - setDrainState(Drainable::Drained); + setDrainState(DrainState::Drained); return count; } diff -r 996b20e55386 -r b60bc9acc340 src/dev/ns_gige.cc --- a/src/dev/ns_gige.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/dev/ns_gige.cc Mon Jun 08 12:25:11 2015 +0100 @@ -1068,7 +1068,7 @@ assert(rxDmaState == dmaIdle || rxDmaState == dmaReadWaiting); rxDmaState = dmaReading; - if (dmaPending() || getDrainState() != Drainable::Running) + if (dmaPending() || getDrainState() != DrainState::Running) rxDmaState = dmaReadWaiting; else dmaRead(rxDmaAddr, rxDmaLen, &rxDmaReadEvent, (uint8_t*)rxDmaData); @@ -1099,7 +1099,7 @@ assert(rxDmaState == dmaIdle || rxDmaState == dmaWriteWaiting); rxDmaState = dmaWriting; - if (dmaPending() || getDrainState() != Running) + if (dmaPending() || getDrainState() != DrainState::Running) rxDmaState = dmaWriteWaiting; else dmaWrite(rxDmaAddr, rxDmaLen, &rxDmaWriteEvent, (uint8_t*)rxDmaData); @@ -1515,7 +1515,7 @@ assert(txDmaState == dmaIdle || txDmaState == dmaReadWaiting); txDmaState = dmaReading; - if (dmaPending() || getDrainState() != Running) + if (dmaPending() || getDrainState() != DrainState::Running) txDmaState = dmaReadWaiting; else dmaRead(txDmaAddr, txDmaLen, &txDmaReadEvent, (uint8_t*)txDmaData); @@ -1546,7 +1546,7 @@ assert(txDmaState == dmaIdle || txDmaState == dmaWriteWaiting); txDmaState = dmaWriting; - if (dmaPending() || getDrainState() != Running) + if (dmaPending() || getDrainState() != DrainState::Running) txDmaState = dmaWriteWaiting; else dmaWrite(txDmaAddr, txDmaLen, &txDmaWriteEvent, (uint8_t*)txDmaData); diff -r 996b20e55386 -r b60bc9acc340 src/dev/pcidev.cc --- a/src/dev/pcidev.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/dev/pcidev.cc Mon Jun 08 12:25:11 2015 +0100 @@ -261,9 +261,9 @@ unsigned int count; count = pioPort.drain(dm) + dmaPort.drain(dm) + configPort.drain(dm); if (count) - setDrainState(Drainable::Draining); + setDrainState(DrainState::Draining); else - setDrainState(Drainable::Drained); + setDrainState(DrainState::Drained); return count; } diff -r 996b20e55386 -r b60bc9acc340 src/dev/sinic.cc --- a/src/dev/sinic.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/dev/sinic.cc Mon Jun 08 12:25:11 2015 +0100 @@ -868,7 +868,7 @@ break; case rxBeginCopy: - if (dmaPending() || getDrainState() != Drainable::Running) + if (dmaPending() || getDrainState() != DrainState::Running) goto exit; rxDmaAddr = params()->platform->pciToDma( @@ -1068,7 +1068,7 @@ break; case txBeginCopy: - if (dmaPending() || getDrainState() != Drainable::Running) + if (dmaPending() || getDrainState() != DrainState::Running) goto exit; txDmaAddr = params()->platform->pciToDma( diff -r 996b20e55386 -r b60bc9acc340 src/mem/cache/base.cc --- a/src/mem/cache/base.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/mem/cache/base.cc Mon Jun 08 12:25:11 2015 +0100 @@ -782,12 +782,12 @@ // 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; } diff -r 996b20e55386 -r b60bc9acc340 src/mem/cache/mshr_queue.cc --- a/src/mem/cache/mshr_queue.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/mem/cache/mshr_queue.cc Mon Jun 08 12:25:11 2015 +0100 @@ -186,7 +186,7 @@ DPRINTF(Drain, "MSHRQueue now empty, signalling drained\n"); drainManager->signalDrainDone(); drainManager = NULL; - setDrainState(Drainable::Drained); + setDrainState(DrainState::Drained); } return retval; } @@ -269,11 +269,11 @@ 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; } } diff -r 996b20e55386 -r b60bc9acc340 src/mem/dram_ctrl.cc --- a/src/mem/dram_ctrl.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/mem/dram_ctrl.cc Mon Jun 08 12:25:11 2015 +0100 @@ -2214,9 +2214,9 @@ } if (count) - setDrainState(Drainable::Draining); + setDrainState(DrainState::Draining); else - setDrainState(Drainable::Drained); + setDrainState(DrainState::Drained); return count; } diff -r 996b20e55386 -r b60bc9acc340 src/mem/dramsim2.cc --- a/src/mem/dramsim2.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/mem/dramsim2.cc Mon Jun 08 12:25:11 2015 +0100 @@ -362,11 +362,11 @@ // 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; } } diff -r 996b20e55386 -r b60bc9acc340 src/mem/ruby/system/DMASequencer.cc --- a/src/mem/ruby/system/DMASequencer.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/mem/ruby/system/DMASequencer.cc Mon Jun 08 12:25:11 2015 +0100 @@ -192,12 +192,12 @@ 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; } diff -r 996b20e55386 -r b60bc9acc340 src/mem/ruby/system/RubyPort.cc --- a/src/mem/ruby/system/RubyPort.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/mem/ruby/system/RubyPort.cc Mon Jun 08 12:25:11 2015 +0100 @@ -449,12 +449,12 @@ 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; } diff -r 996b20e55386 -r b60bc9acc340 src/mem/ruby/system/Sequencer.cc --- a/src/mem/ruby/system/Sequencer.cc Mon Jun 08 12:23:44 2015 +0100 +++ b/src/mem/ruby/system/Sequencer.cc Mon Jun 08 12:25:11 2015 +0100 @@ -77,7 +77,7 @@ 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 @@ // See if we should schedule a deadlock check if (!deadlockCheckEvent.scheduled() && - getDrainState() != Drainable::Draining) { + getDrainState() != DrainState::Draining) { schedule(deadlockCheckEvent, clockEdge(m_deadlock_threshold)); }